SPI是一种常见的设备通用通信协议。它有一个独特优势就是可以无中断传输数据,可以连续地发送或接收任意数量的位。而在I2CUART中,数据以数据包的形式发送,有着限定位数。

SPI优缺点

  • 优点
    SPI通讯无起始位和停止位,因此数据可以连续流传输而不会中断;没有像I2C这样的复杂的从站寻址系统,数据传输速率比I2C更高(几乎快两倍)。独立的MISOMOSI线路,可以同时发送和接收数据。

  • 缺点
    SPI使用四根线(I2CUART使用两根线),没有信号接收成功的确认(I2C拥有此功能),没有任何形式的错误检查(如UART中的奇偶校验位等)。

SPI通信工作原理

SPI设备中,设备分为主机从机系统。

  • 主机是控制设备(通常是控制器)

  • 从机(通常是传感器或存储芯片)从主机那获取指令。

一套SPI通讯共包含四种信号线:

  • MOSI (Master Output/Slave Input) – 信号线,主机输出,从机输入。

  • MISO (Master Input/Slave Output) – 信号线,主机输入,从机输出。

  • SCLK (Clock) – 时钟信号。

  • SS/CS (Slave Select/Chip Select) – 片选信号。

2.1、时钟信号

每个时钟周期传输一位数据,因此数据传输的速度取决于时钟信号的频率。 时钟信号由于是主机配置生成的,因此SPI通信始终由主机启动。
设备共享时钟信号的任何通信协议都称为同步SPI是一种同步通信协议,还有一些异步通信不使用时钟信号。 例如在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。

片选信号

主机通过拉低从机的CS/SS来使能通信。 在空闲/非传输状态下,片选线保持高电平。在主机上可以存在多个CS/SS引脚,允许主机与多个不同的从机进行通讯。

2.3、MOSI和MISO

主机通过MOSI以串行方式将数据发送给从机,从机也可以通过MISO将数据发送给主机,两者可以同时进行。所以理论上,SPI是一种全双工的通讯协议。
传输步骤:
以传输模式:CPOL = 0CPHA = 0 为例:

数据传输

为了开始通信,总线上的主设备需要使用从设备支持的频率来配置时钟,这个频率最高为几兆赫兹左右。然后主设备将某个从设备的SS线置为低电平,来选中这个从设备。如果等待时间是必要的话(例如进行模数转换),主设备必须在这段时间结束后,才可以发出时钟周期信号。
在每个SPI时钟周期内,都会发生全双工数据传输。主设备在MOSI线上发送一个位,从设备读取它,同时从机在MISO线上发送一位数据,主机读取它。即使只有单向数据传输的目的,主从机之间的通信工作方式仍然是双工的。

传输通常会使用给定字长的两个移位寄存器,一个在主设备中,一个在从设备中,这两个寄存器连接成一个虚拟的环形缓冲器。数据通常先从最高位移出。在时钟信号边沿,主机和从机均移出一位,然后在传输线上输出给对方。在下一个时钟沿,每个接收器都从传输线接受对方发出的数据位,并且从移位寄存器的最低位推入。每完成这样一个移出——推入的周期后,主机和从机就交换寄存器中的一位数据。当所有数据位都经过了这样的移出——推入过程后,主机和从机就完成了寄存器上的数据交换。如果需要交换的数据比寄存器的位数还要长的话,则需要重新加载移位寄存器并重复该过程。传输可能会持续任意数量的时钟周期。完成后,主设备会停止发送时钟信号,并通常会取消选择从设备。

传输寄存器通常包含8位。但是其他字长也很常见,例如触摸屏控制器或音频编解码器通常采用16位字长(如德州仪器的TSC2101),许多数模转换或者模数转换的设备则会采用12位字长。
所有在总线上的没有被片选线激活的从设备必须忽略输入时钟和MOSI信号,并且不得从MISO发送数据。

模式

分别是 CPOL (Clock POlarity)和 CPHA (Clock PHAse)。

  • CPOL配置SPI总线的极性

  • CPHA配置SPI总线的相位

SPI*总线的极性*

极性,会直接影响SPI总线空闲时的时钟信号是高电平还是低电平

  • CPOL = 1:表示空闲时是高电平

  • CPOL = 0:表示空闲时是低电平

 

SPI*总线的相位*

一个时钟周期会有2个跳变沿。而相位,直接决定SPI总线从那个跳变沿开始采样数据。

  • CPHA = 0:表示从第一个跳变沿开始采样

  • CPHA = 1:表示从第二个跳变沿开始采样

4种模式

CPOL 和 CPHA 的不同组合,形成了SPI总线的不同模式。

modeCPOLCPHA
mode 000
mode 101
mode 210
mode 311

模式0 (CPOL=0; CPHA=0)

特性:

CPOL = 0:空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿
CPHA = 0:数据在第1个跳变沿(上升沿)采样

模式1 (CPOL=0; CPHA=1)

特性:

Copy
CPOL = 0:空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿
CPHA = 1:数据在第2个跳变沿(下降沿)采样

模式2 (CPOL=1; CPHA=0)

特性:

Copy
CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿
CPHA = 0:数据在第1个跳变沿(下降沿)采样

 

作者:SteveChen  创建时间:2025-03-30 20:40
最后编辑:SteveChen  更新时间:2025-03-30 20:43
上一篇:
下一篇: