SPI 协议

SPI 概述

SPI 是一种同步的、全双工的、高速的串行通信总线。

4 线制 SPI 四个信号:

  • SCLK:串行时钟信号,由主设备产生,用于同步数据传输。
  • CS:片选信号,由主设备产生,用于选择从设备。
  • MOSI:主设备输出,从设备输入,用于主设备向从设备传输数据。
  • MISO:主设备输入,从设备输出,用于从设备向主设备传输数据。

除了四线式 SPI 总线之外,还有三线式 SPI 总线和双线式 SPI 总线。

  • 四线式 SPI 总线,也称为标准 SPI 总线,由 SCLK、MOSI、MISO 和 SS(Slave Select)四个信号线组成。其中,SCLK 是时钟信号线;MOSI 是主设备向从设备发送数据的信号线;MISO 是从设备向主设备发送数据的信号线;SS 是从设备的片选信号线,用于选择要通信的从设备。

  • 三线式 SPI 总线将 MOSI 和 MISO 合并为单一的信号线。这种 SPI 总线有一个专门的叫做 MOMI 的信号线,既可以作为主设备向从设备发送数据的信号线,又可以作为从设备向主设备发送数据的信号线。

  • 双线式 SPI 总线(也称为 MICROWIRE 或 uWire),由一个串行数据线和一个时钟线组成。在这种 SPI 总线上,没有单独的片选信号线,而是使用一个帧选择控制位来选择相应的从设备。

他们传输速率有差别吗?
是的,SPI 总线的不同类型之间存在传输速率上的差别。一般情况下,四线式 SPI 总线的传输速度最快,而双线式 SPI 总线的传输速度最慢。但具体的传输速度会受到很多因素的影响,例如工作频率、数据线长度等等。如果要在实际应用中选择合适的 SPI 总线类型,需要考虑诸如这些因素的影响,并根据具体情况进行权衡取舍。
SPI 总线的传输速度快慢与其信号线数量有关。双线式 SPI 总线一共只有两条信号线:一个主设备 (Master) 输出时钟信号 (SCLK),一个主设备通过该信号线读取从设备 (Slave) 的应答信号。而四线式 SPI 总线除了上述两条信号线外,还有两条用于数据传输的信号线:主设备通过 MOSI 信号线向从设备发送数据,从设备则通过 MISO 信号线将数据返回给主设备。由于四线式 SPI 总线有专门的数据传输信号线,故可以通过同时在这两条信号线上传输数据来实现更高的传输速率,从而比双线式 SPI 总线快一些。

时钟极性和时钟相位

在 SPI 中,主机可以选择时钟极性和时钟相位。在空闲状态期间,CPOL 位设置时钟信号的极性。空闲状态是指传输开始时 CS 为高电平且在向低电平转变的期间,以及传输结束时 CS 为低电平且在向高电平转变的期间。CPHA 位选择时钟相位。根据 CPHA 位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位。根据 CPOL 和 CPHA 位的选择,有四种 SPI 模式可用。表 1 显示了这 4 种 SPI 模式。

SPI 模式 CPOL(Serial Clock Polarity) CPHA(Serial Clock Phase) 空闲状态下的时钟极性 采样时的时钟相位 移位数据的时钟相位
0 0 0 逻辑低电平 上升沿 下降沿
1 0 1 逻辑低电平 下降沿 上升沿
2 1 1 高电平 下降沿 上升沿
3 1 0 高电平 上升沿 下降沿

CPOL 和 CPHA 可以通过 SPI 的状态寄存器设置。

显示了四种 SPI 模式下的通信示例。在这些示例中,数据显示在 MOSI 和 MISO 线上。传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示。

下图给出了 SPI 模式 1 的时序图。在此模式下,时钟极性为 0,表示时钟信号的空闲状态为低电平。此模式下的时钟相位为 1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

多从机配置

标准 SPI 模式

在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号,MOSI/MISO 线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则 MISO 线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。

从上图可以看出,随着从机数量的增加,来自主机的片选线的数量也增加。这会快速增加主机需要提供的输入和输出数量,并限制可以使用的从机数量。可以使用其他技术来增加常规模式下的从机数量,例如使用多路复用器产生片选信号。

菊花链模式

在菊花链模式下,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一 SPI 时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。

使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需的时钟周期数与菊花链中的从机位置成比例。为使第 3 个从机能够获得数据,需要 24 个时钟脉冲,而常规 SPI 模式下只需 8 个时钟脉冲。下图显示了时钟周期和通过菊花链的数据传播。并非所有 SPI 器件都支持菊花链模式。请参阅产品数据手册以确认菊花链是否可用。

SPI 实现

参考资料

SPI 接口简介 | 亚德诺半导体

SPI 协议 - 杰哥的{运维,编程,调板子}小笔记