简介
SPI(Serial Peripheral Interface,串行外设接口)是一种广泛使用的同步串行通信协议,用于微控制器和各种外围设备之间的数据传输。SPI通信是全双工的,即可以同时发送和接收数据,并且是高速的,没有速度限制,通常能达到甚至超过10Mbps。
SPI 通信线束
SPI通信需要至少四根线:
MOSI (Master Out Slave In):主设备到从设备的数据输出线。
MISO (Master In Slave Out):从设备到主设备的数据输入线。
SCLK (Serial Clock):由主设备产生的时钟信号线,用于同步数据传输。
CS/SS (Chip Select/Slave Select):从设备使能信号线,由主设备控制,用于选择特定的从设备进行通信。
SPI 主从模式
SPI支持一主多从模式,可以通过两种方式实现:
- 多片选:每个从设备都有单独的CS/SS线。
通常,每个从机都需要一条单独的SS线。如果要和特定的从机进行通讯,可以将相应的NSS信号线拉低,并保持其他SS信号线的状态为高电平;如果同时将两个SS信号线拉低,则可能会出现乱码,因为从机可能都试图在同一条MISO线上传输数据,最终导致接收数据乱码。
- 菊花链:从设备通过串联的方式连接,共享时钟和数据线,但每个设备有自己的CS/SS线。
菊花链的最大缺点是信号串行传输,一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了。另一方面,距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况。
SPI通信采用主-从模式,主设备控制通信过程,提供时钟信号,并选择从设备进行通信。
SPI 四种工作模式
SPI有四种不同的工作模式,这些模式由时钟极性(CPOL)和时钟相位(CPHA)决定
CPOL就是决定SCLK这个时钟信号线,在没有数据传输的时候的电平状态。
CPHA就是决定数据位传输是从第一个时钟(SCLK)边沿开始,还是第二个从二个时钟(SCLK)边沿开始。
-
Mode 0 (CPOL = 0, CPHA = 0):时钟空闲状态为低电平,数据在时钟的上升沿采样
时钟极性(CPOL)为0:时钟信号在空闲状态时保持低电平。
时钟相位(CPHA)为0:数据采样发生在时钟信号的第一个边缘,即从低电平跳变到高电平的上升沿,而数据在时钟信号的下降沿变化;
在模式0中,数据通信开始于时钟的第一个上降沿,并在随后的每个上降沿进行采样。
-
Mode 1 (CPOL = 0, CPHA = 1):时钟空闲状态为低电平,数据在时钟的下降沿采样
时钟极性(CPOL)为0:时钟信号在空闲状态时保持低电平。
时钟相位(CPHA)为1:数据采样发生在时钟信号的第二个边缘,即从高电平跳变到低电平的下降沿,而数据在时钟信号的上升沿变化。
在模式1中,数据通信开始于第一个下降沿,并在每个下降沿进行采样。 -
Mode 2 (CPOL = 1, CPHA = 0):时钟空闲状态为高电平,数据在时钟的下降沿采样
时钟极性(CPOL)为1:时钟信号在空闲状态时保持高电平。
时钟相位(CPHA)为0:数据采样发生在时钟信号的第一个边缘,即从高电平跳变到低电平的下降沿,而数据在时钟信号的上升沿变化。
在模式2中,数据通信开始于时钟的第一个下降沿,并在随后的每个下降沿进行采样。
-
Mode 3 (CPOL = 1, CPHA = 1):时钟空闲状态为高电平,数据在时钟的上升沿采样
时钟极性(CPOL)为1:时钟信号在空闲状态时保持高电平。
时钟相位(CPHA)为1:数据采样发生在时钟信号的第二个边缘,即从低电平跳变到高电平的上升沿,而数据在时钟信号的下降沿变化。
在模式3中,数据通信开始于第一个上升沿,并在每个上升沿进行采样。
SPI 原理
工作流程
- 初始化SPI接口
SPI接口通常由主设备(例如微控制器)初始化。主设备会设置SPI接口的工作模式和通信速率。工作模式包括数据位的大小、时钟极性和相位等。通信速率则是指数据传输的速度。 - 主设备启动通信
主设备通过拉低片选线(CS或SS)来启动与特定从设备的通信。片选线是一种使能信号,只有当片选线为低电平时,从设备才会响应主设备的通信请求。 - 主设备发送数据
主设备通过主出从入(MOSI)线路向从设备发送数据。数据是按位串行发送的。 - 从设备接收数据
从设备通过MOSI线路接收主设备发送的数据。数据接收完毕后,从设备可选择向主设备发送响应。 - 从设备发送数据
如果需要,从设备可通过主入从出(MISO)线路向主设备发送数据。数据也是按位串行发送的。 - 主设备接收数据
主设备通过MISO线路接收从设备发送的数据。 - 结束通信
通信结束时,主设备会将片选线拉高,断开与从设备的连接。
SPI(串行外设接口)是一种同步数据总线,可以使主设备与一个或多个从设备进行全双工通信,适用于短距离、高速的通信。SPI接口主要包括四个信号线:SCLK(时钟线)、MOSI(主设备数据输出、从设备数据输入线)、MISO(主设备数据输入、从设备数据输出线)和SS(从设备选择线)。SPI总线通常由一个主设备和一个或多个从设备组成,主设备通过SS线选择与哪个从设备通信。
使用SPI接口通常需要以下步骤:
- 初始化SPI接口:设置数据传输速率、数据位宽度、时钟极性和相位等参数。
- 主设备通过SS线选择一个从设备。
- 主设备通过SCLK线向从设备提供时钟信号。
- 主设备和从设备通过MOSI和MISO线进行全双工数据传输。
- 通信结束后,主设备通过SS线停止选择从设备。
优点与缺点
优点:
- 速度快: SPI接口能够提供较高的数据传输速率。
- 全双工通信: SPI接口支持全双工通信,使得发送和接收数据可以同时进行,提高了通信效率。
- 简单易用: SPI接口的硬件和软件实现相对简单,易于使用。
缺点:
- 无错误检测: SPI通信没有内置的错误检测机制,因此需要额外的手段来检测和纠正错误。
- 距离限制: SPI接口适用于短距离通信,但不适合长距离通信。
- 不支持多设备通信: SPI接口设计为一对一通信,对于需要与多个设备通信的应用,可能需要使用多个SPI接口。