利用四线SPI接口可以构建不同SPI模式(拓扑方式),比如单主单从,单主多从和菊花链等模式,接下来就结合不同SPI模式来分别介绍SPI工作原理。
1)单主单从模式
单主单从模式,即主设备的SCLK、MOSI和MISO连接到从设备的相应引脚。从设备与主设备之间只有一组SCLK、MOSI和MISO线连接,如下所示:
Source: Basics of the SPI Communication Protocol (circuitbasics.com)
其基本原理是:
首先是时钟同步,主设备产生SCLK,控制数据传输的时序。时钟信号由主设备提供,并在主设备和从设备之间同步传输。
Source: Basics of the SPI Communication Protocol
然后是片选信号,主设备将SS/CS引脚切换到低电压状态,从而激活了从设备。
Source: Basics of the SPI Communication Protocol
最后是数据传输过程,主设备通过MOSI线向从设备发送数据。从设备接收到数据后,将其通过MISO线传输给主设备。主设备和从设备之间的数据传输是同时进行的。
Source: Introduction to SPI Interface | Analog Devices
2)单主多从模式
单主多从模式,即主设备的SCLK和MOSI连接到每个从设备的相应引脚,从设备的MISO连接到主设备的MISO引脚,每个从设备有独立的SS引脚与主设备连接,主设备通过选择SS来选择要与之通信的从设备。
Source: Basics of the SPI Communication Protocol
其基本原理与单主单从模式的几乎相同,唯一区别是当某个从设备的SS处于低电平时,该从设备与主设备进行通信,其他从设备的SS处于高电平状态。
3)菊花链模式
菊花链模式,即主设备的MOSI和SCLK连接到第一个从设备的MOSI和SCLK。从第一个从设备的MISO连接到第二个从设备的MOSI,以此类推,直到最后一个从设备的MISO。
Source: Basics of the SPI Communication Protocol
其工作原理是:
首先,主设备提供SCLK,控制数据传输的时序。时钟信号由主设备产生,并在整个菊花链中进行传递,从设备根据时钟信号的边沿进行数据的传输和接收。
然后,主设备通过MOSI线将数据发送到第一个从设备,第一个从设备接收到数据后,将其通过MISO线传输给第二个从设备,这样,数据从一个从设备级联传输到下一个从设备,直到传输到最后一个从设备。
每个从设备都需要有一个独立的SS,主设备通过控制相应的SS选择要与之通信的从设备,只有被选中的从设备才会响应主设备的数据传输。
在菊花链模式下,当数据从一个从设备传播到下一个从设备时,传输数据所需的时钟周期数量与从设备在菊花链中的位置成正比。在一个8位系统中,第3个从设备上的数据需要24个时钟脉冲,而在常规的SPI模式中只需要8个时钟脉冲,下图显示了通过菊花链传播的时钟周期和数据。
Source: Introduction to SPI Interface | Analog Devices
SPI的核心思想是,每个设备都有一个移位寄存器,它可以用来发送或接收一个字节的数据。这两个移位寄存器以环形方式连接在一起,一个寄存器的输出到另一个寄存器的输入,反之亦然。主设备控制共同的时钟信号,确保每个寄存器在另一个寄存器移出一个比特时,正好移入一个比特。
Source: What Could Go Wrong: SPI | Hackaday
4.1采样和移位
根据上面内容可知SPI通信,主设备必须发送SCLK信号,并通过使能SS信号(低电平)选择从设备。然后主设备和从设备可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上,即移位)和接收(采样或读入总线(MISO/SDI)上的数据,即采样)同时进行。
> Sample(采样)
采样是指主设备或从设备在时钟的上升沿或下降沿时读取数据位的操作。采样的目的是在合适的时机获取正确的数据位,以确保数据的准确传输。
> Shift(移位)
移位是指数据位从发送器移动到接收器的过程,以实现数据的传输。移位是SPI通信中的关键步骤之一,确保数据的逐位传输和同步。
4.2时钟极性和时钟相位
具体何时进行采样和移位操作,可以通过设置时钟极性和时钟相位来实现。
> 时钟极性(Clock Polarity,CPOL)
在空闲状态期间,CPOL位设置时钟信号的极性。
CPOL = 1:表示空闲时是高电平;
CPOL = 0:表示空闲时是低电平。
空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间,如下所示:
> 时钟相位(Clock Phase,CPHA)
CPHA位选择时钟相位。根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。
CPHA = 0:表示从第一个跳变沿开始采样;
CPHA = 1:表示从第二个跳变沿开始采样。
主设备必须根据从设备的要求选择时钟极性和时钟相位,根据上述CPOL和CPHA位的选择,有四种SPI模式可用,如下所示:
SPI模式
|
CPOL
|
CPHA
|
空闲状态
|
采样,移位
|
|
0
|
0
|
低电平
|
采样上升沿,移位下降沿
|
1
|
0
|
1
|
低电平
|
采样下降沿,移位上升沿
|
2
|
1
|
0
|
高电平
|
采样下降沿,移位上升沿
|