支持 SPI 通信
SPI,即串行外设接口,是一种用于高速设备之间短距离同步全双工串行通信协议。SPI 协议支持单个控制器与一个或多个外围设备连接。控制器可以与总线上的任何外围设备通信,但每个外围设备只能与控制器通信。
支持包库中的 SPI Controller Transfer 模块可以与其他 SPI 设备进行通信。只有当您使用自己的硬件作为控制器设备时,才能使用此模块。
使用 SPI,您可以:
将各种传感器连接到电路板上,以测量温度、压力等不同量。
将各种扩展板连接到电路板上,以增强其功能,例如 Wi-Fi® 扩展板。
访问 SD 卡以存储数据或扩展可用内存。
您可以在 配置参数 > 硬件实现 > SPI properties 部分设置 SPI 属性,例如 SPI 时钟输出频率(以 MHz 为单位)、SPI 模式和位顺序。
SPI 线
SPI 使用四线串行总线进行通信:SDI、SDO、SCK 和 CS。SDI、SDO 和 SCK 线是所有设备通用的。SS 线是针对每个外围设备专门设计的。
SDI(串行数据输入)– 此线路是用于向 SPI 控制器发送数据的外围设备线路。
SDO(串行数据输出)– 此线路是控制器线路,用于向 SPI 外围设备发送数据。
SCK (串行时钟)- 控制器生成时钟脉冲,以同步数据传输。
CS(芯片选择)- 这是设备特有的。这是每个设备上 SPI 控制器可以用来启用和禁用设备的引脚。该信号为“低电平有效”信号,这意味着当设备的 SS 引脚设置为低电平时,该设备就变成了外设。
通过在线串行编程 (ICSP) 接头的 SPI 线路在如下所示的所有电路板上都是一致的。

数据传输
SPI 控制器将时钟频率设置为 SPI 外设支持的频率,以便与控制器进行通信。
控制器通过将外围设备的 SS 引脚设置为低电平 (0) 来选择外围设备。控制器一次只能选择一个外围设备。
由于每次 SPI 传输都是全双工传输,控制器在 SDO 线上发送一个位,外围设备读取该位。外围设备也会通过 SDI 线发送一个数据位,控制器会读取该数据位。
当控制器进行数据传输时,外围设备无法选择不发送数据。但是,当通信是单向的时,外围设备会发送虚拟字节(通常全为 1 或全为 0)。同样地,当控制器从外围设备读取数据时,外围设备知道要忽略控制器发送的数据。
传输完成后,控制器停止切换 SCK,并且通常会拉起 SS 以取消选择外围设备。
在数据传输期间,SPI 总线上未被控制器选择的其他外围设备会忽略 SCK 和 SDO 信号,并且不会驱动 SDI。


SPI 传输模式
SPI 控制器设置时钟极性和时钟相位。
时钟极性(CPOL) – 是总线空闲时 SCK 信号的默认值(高/低)。
CPOL = 0 表示总线空闲时 SCK 的默认值为低电平。CPOL = 1 表示总线空闲时 SCK 的默认高电平值。
时钟相位(CPHA) – 指示时钟数据是在 SCK 的前沿(第一个)还是后沿(第二个)采样。
CPHA = 0 表示在 SCK 的上升沿采样,CPHA = 1 表示在 SCK 的下降沿采样,无论时钟沿是上升沿还是下降沿。
极性和相位的组合被称为 SPI 模式。表中列出了 SPI 模式 0-3。
| 模式 | 时钟极性 (CPOL) | 时钟相位 (CPHA) |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
模式 0

模式 1

模式 2

模式 3
