SPI传输协议介绍
日期 | 版本 | 内容修改 |
---|---|---|
2023/03/11 | V0 | 初版 |
1. SPI协议
SPI(Serial Peripheral Interface)协议由Motorola公司推出。
1.1. 端口名称及含义
标准SPI有4条信号线。
-
MISO
Master Input Slave Output :主机输入,从机输出(数据来自从机)。
也可以是SIMO,DOUT,DO,SDO或SO(在主机端)。 -
MOSI
Master Output Slave Input: 主机输出,从机输入(数据来自主机)。
也可以是SOMI,DIN,DI,SDI或SI(在主机端)。 -
SCLK
Serial CLocK :串行时钟信号,由主机产生发送给从机。
也可以是SCK。 -
SS
Slave Select :片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号,此时也可以叫做NSS。
也可以是CE,CS或SSEL。
1.2. 主从机连接
典型的主从机间SPI连接[1]:
1.3. 传输格式
典型的传输信号过程:
注意,先传输的是LSB,后传输的是MSB。
SPI总线上的主机必须在通信开始时候配置并生成相应的时钟信号。在每个SPI时钟周期内,都会发生全双工数据传输。主机在MOSI线上发送一位数据,从机读取它,而从机在MISO线上发送一位数据,主机读取它。就算只进行单向的数据传输,也要保持这样的顺序。这就意味着无论接收任何数据,必须实际发送一些东西!在这种情况下,我们称其为虚拟数据。所以SPI的传输模式其实还是有些浪费的。特别是如果数据基本是从主机到从机的话,那么MISO就显得用处不大了。而SS在从机少的时候也显得并不是那么必要。
1.4. 传输模式
在以下表格中:
CPOL(Clock POLarity)代表时钟极性,CPOL=0代表时钟空闲时置0,CPOL=1代表时钟空闲置1。
CPHA(Clock PHAse)代表时钟相位,CPHA=0代表时钟的第一个沿为有效沿,CPHA=1代表时钟的第二个沿为有效沿。
SPI Mode | CPOL | CPHA |
---|---|---|
00 | 0 | 0 |
01 | 0 | 1 |
10 | 1 | 0 |
11 | 1 | 1 |
1.5. 多从机模式
如果需要多个从机,一般主机就需要对应数量的NSS:
必须只有一个NSS为低,其余为高,不然会发生混乱。
跟I2C采用拉高拉低来决定哪个从机仲裁成功的模式比起来,SPI的仲裁模式非常简单,但比较浪费。
1.6. SPI的优缺点
1.6.1. 优点
- 全双工串行通信。
- 高速数据传输速率。
- 简单的软件配置。
- 极其灵活的数据传输,不限于8位,它可以是任意大小的字(针对I2C说的)。
- 非常简单的硬件结构。从机不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
1.6.2. 缺点
- 没有硬件从机应答信号(主机可能在不知情的情况下无处发送)(针对I2C说的)。
- 通常仅支持一个主设备。
- 需要更多的引脚(与I2C不同)。
- 没有定义硬件级别的错误检查协议。
- 与RS-232和CAN总线相比,只能支持非常短的距离。
1.6.3. ISP烧写线
在烧写单片机时常用的线叫ISP(In-System Progamming)烧写线。其名字和SPI有点像。不过有的ISP接口(我用的是一款单片机ISP烧写线)正是用SPI协议进行传输的。如图是一种10pin-ISP接口的信号分布图。