通信协议整理之 SPI 通信
简介
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工同步通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。SPI接口主要应用在 EEPROM ,FLASH ,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器等外设之间。 SPI 通信的一个独特优势是数据可以不间断地传输。可以在连续流中发送或接收任意数量的位。在使用 IIC 和 UART 协议时,数据是以数据包的形式发送的,数据包中定义了开始和结束的位,因此数据在传输过程中会中断。 通过 SPI 进行通信的设备属于主从关系。因此,SPI 协议主设备( 主站 )同样可以控制多个从设备( 从站 )。 SPI 引脚定义:
- MOSI(主输出/从输入):主站将数据发送到从站的线路。
- MOSI(主输出/从输入):主站将数据发送到从站的线路。
- SCLK(时钟):时钟信号的线路。
- SS/CS(从机选择):主站选择线,用于选择要将数据发送到哪个从机。
SPI 是串行通讯协议,数据是一位一位传输的,由 SCLK 提供时钟脉冲, MOSI , MISO 则基于此脉冲完成数据传输及同步的。例如数据输出通过 MOSI 引脚,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取,以此完成一位数据传输,输入也同理。
值得注意的是, SCLK 信号线仅由主设备控制,从设备不能控制信号线。因此,在一个基于 SPI 协议的通信系统中,至少得有一个主设备。
这样的传输方式有一个优点,与普通的串行通讯不同,SPI允许数据一位一位的传送,而不需要一次传输至少八位数据(一个字节),SPI 甚至允许暂停,因为 SCLK 时钟线仅由主控设备控制,主设备通过对 SCLK 时钟线的控制可以完成对通讯的控制,比如当没有时钟跳变时,从设备不采集或传送数据,反之则采集数据。SPI 还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。
工作原理
从上述可知,SPI 协议的通信是由时钟信号控制的,时钟信号负责将主设备的数据位输出与从设备的位采样同步。每个时钟周期传输一位数据,因此数据传输的速度取决于信号的频率。 SPI 中的时钟信号可以使用时钟极性和时钟相位属性进行修改。这两个属性协同工作,以定义何时输出以及何时进行采样。这就涉及 SPI 通信的时序,详解如下:
- CPOL :时钟极性选择,为 0 时 SPI 总线空闲为低电平;为 1 时 SPI 总线空闲为高电平。
- CPHA :时钟相位选择,为 0 时在 SCLK 第一个跳变沿采样;为 1 时在 SCLK 第二个跳变沿采样。
由此组合,可以得到 SPI 的四种工作模式:
SPI 模式 | CPOL | CPHA | 空闲状态下的时钟极性 | 用于采样和/或移位数据的时钟相位 |
---|
1 | 0 | 0 | 逻辑低电平 | 数据在上升沿采样,在下降沿移出 | 2 | 0 | 1 | 逻辑低电平 | 数据在下降沿采样,在上升沿移出 | 3 | 1 | 0 | 逻辑高电平 | 数据在上升沿采样,在下降沿移出 | 4 | 1 | 1 | 逻辑高电平 | 数据在下降沿采样,在上升沿移出 |
通信连接方式
SPI 主设备要与某个从设备通信时,可以将从设备的 CS/SS 线路设置为低电平。反之,在空闲下,从设备选择线保持在高电平。主设备可以有多个从设备选择引脚,即 CS/SS 引脚,且允许多个从设备并联接线。如果主设备只有一个 CS/SS 引脚,则可以通过菊花链的形式将多个从设备连接到主站。 具体方法如下:
补充
硬件 SPI 和模拟 SPI
与 IIC 通信类似, SPI 通信也可用 IO 口模拟 SPI 协议时序来实现通信。 硬件 SPI 速度快,且可以使用 DMA 来进行加速。 软件 SPI 接口相对灵活,但时序较复杂,代码量较多。
|