已使用数十年的三种常见的多线串行数据传输格式是I 2 C、UART和 SPI。本文着眼于串行外设接口 (SPI) 总线,该总线已经逃脱了明确的标准化,因此在实现该协议之前,请务必检查您正在使用的集成电路的数据表。
能力和特点
串行外设接口总线使用四根数据线在主设备和从设备之间提供全双工同步通信。
基本主从配置
串行外设接口允许将数据位从主设备移出到从设备,同时,也可以将数据位从从设备移出到主设备。
动画 1 显示数据从 Microchip A 转移到 Microchip B,以及从 Microchip B 转移到 Microchip A。
动画 2 显示了两个微芯片之间 SPI 事务的虚拟 4 通道示波器跟踪。
由于 SPI 尚未标准化,因此可能会遇到先传输有效位 (MSb) 或有效位 (LSb) 的情况。检查您的设备的数据表并相应地设置您的数据处理例程。如果您使用的是 Arduino,您可以参考此页面以获取有关配置 SPI 端口的信息。
时钟极性和相位
时钟转换控制数据的移位和采样。 SPI 有四种模式(0、1、2、3) ,对应于四种可能的时钟配置。
在时钟周期的上升沿采样的位在时钟周期的下降沿移出,反之亦然。
在时钟周期的上升沿采样的位在时钟周期的下降沿移出,反之亦然。
当从机选择线被驱动至逻辑低电平时(从机选择通常是低电平有效信号),每个事务开始。从机选择线、数据线和时钟线之间的确切关系取决于时钟极性 (CPOL) 和时钟相位 (CPHA) 的配置方式。
使用非反转时钟极性(即,当从选择转换为逻辑低电平时,时钟处于逻辑低电平):
模式 0:时钟相位配置为在时钟脉冲的上升沿采样数据并在时钟脉冲的下降沿移出。这对应于上图中的个蓝色时钟迹线。请注意,数据必须在时钟的个上升沿之前可用。
模式 1:时钟相位配置为在时钟脉冲的下降沿采样数据并在时钟脉冲的上升沿移出。这对应于上图中的第二个蓝色时钟迹线。
时钟极性反转(即,当从选择转换为逻辑低电平时,时钟处于逻辑高电平):
模式 2:时钟相位配置为在时钟脉冲的下降沿采样数据并在时钟脉冲的上升沿移出。这对应于上图中的个橙色时钟迹线。请注意,数据必须在时钟的个下降沿之前可用。
模式 3:时钟相位配置为在时钟脉冲的上升沿采样数据并在时钟脉冲的下降沿移出。这对应于上图中的第二个橙色时钟迹线。
关键术语
CLK: 串行时钟。由主设备控制。每个时钟周期都会移出一个新的数据位。
SSN:从机选择(“N”将其标识为低电平有效信号)。由主设备控制。有效的从机选择线表示主机正在向相应的从机设备发送数据或请求数据。
MOSI:主输出?从输入。数据离开主设备并进入从设备。芯片 A 上的 MOSI 线连接到芯片 B 上的 MOSI 线。
MISO:主输入?从输出。数据离开从设备并进入主设备(或菊花链配置中的另一个从设备;请参阅下一节)。芯片 A 上的 MISO 线连接到芯片 B 上的 MISO 线。
CPOL:时钟极性。这控制时钟信号的初始逻辑状态。
CPHA:时钟相位。这控制着数据转换和时钟转换之间的关系。