4、SPI菊花链:SPI协议回顾、多设备级联配置、片选信号处理、数据帧格式
SPI(Serial Peripheral Interface)是一种高速、全双工、同步的通信总线,在嵌入式系统中应用广泛。菊花链拓扑结构允许将多个SPI设备串联起来,仅使用一条片选线即可控制所有设备,极大地节省了GPIO资源。本节将深入探讨SPI菊花链的协议基础、硬件配置、片选策略以及数据帧格式。
4.1 SPI协议回顾
标准SPI总线采用主从模式,包含四条信号线:
- SCLK:串行时钟,由主机产生。
- MOSI:主机输出,从机输入。
- MISO:主机输入,从机输出。
- SS/CS:从机选择(片选),低电平有效。
在标准点对点连接中,每个从机需要独立的片选线。当从机数量增多时,GPIO引脚消耗巨大。
图4-1:标准SPI多设备连接(独立片选)
4.2 多设备级联配置
SPI菊花链将所有从机的片选信号并联,数据线采用“级联”方式连接:主机的MOSI连接第一个从机的MOSI,第一个从机的MISO连接第二个从机的MOSI,以此类推,最后一个从机的MISO返回主机。所有从机共享同一时钟和片选信号。
图4-2:SPI菊花链级联拓扑结构
级联配置的关键点:
- 数据延迟:数据经过每个从机时会产生一个时钟周期的延迟(移位寄存器特性)。
- 帧长度:总数据帧长度 = 单个设备数据长度 × 设备数量。
- 初始化:所有从机必须支持菊花链模式(通常通过配置寄存器启用)。
4.3 片选信号处理
在SPI菊花链中,片选信号的处理方式与传统SPI有显著区别:
| 特性 | 标准SPI | 菊花链SPI |
|---|---|---|
| 片选数量 | 每个从机独立CS | 所有从机共享1个CS |
| CS作用 | 选择特定从机 | 同步所有从机开始/结束传输 |
| 数据对齐 | CS下降沿开始,上升沿结束 | CS低电平期间完成所有数据移位 |
| 注意事项 | CS高阻态保护 | CS释放时所有从机同时锁存数据 |
图4-3:菊花链片选信号时序
4.4 数据帧格式
SPI菊花链的数据帧格式需要精心设计,以确保每个从机都能正确接收和发送数据。典型的数据帧结构如下:
图4-4:菊花链数据帧格式
数据帧格式的要点:
- 发送顺序:主机先发送距离最远的从机(最后一个从机)的数据,最后发送最近的从机(第一个从机)的数据。
- 接收顺序:主机先接收最近从机的数据,最后接收最远从机的数据。
- 数据对齐:每个从机在CS上升沿时,从移位寄存器中提取对应自己位置的数据段。
以下是一个典型的菊花链SPI数据发送代码示例(伪代码):
// 菊花链SPI发送示例(3个从机,每个8位)
uint8_t data_to_send[3] = {0x12, 0x34, 0x56}; // 从机1、2、3的数据
uint8_t data_received[3] = {0};
// 注意:发送顺序与物理连接相反
// 先发送从机3的数据,最后发送从机1的数据
spi_cs_low(); // 拉低片选,开始传输
for (int i = 2; i >= 0; i--) {
data_received[i] = spi_transfer_byte(data_to_send[i]);
// 发送当前字节,同时接收对应从机的数据
}
spi_cs_high(); // 拉高片选,所有从机同时锁存数据
// 此时 data_received[0] 是从机1返回的数据
// data_received[1] 是从机2返回的数据
// data_received[2] 是从机3返回的数据
在实际硬件设计中,还需要注意以下事项:
| 设计要点 | 说明 |
|---|---|
| 时钟频率 | 菊花链会增加路径延迟,时钟频率不宜过高,通常建议低于20MHz |
| 信号完整性 | 级联路径较长,需考虑PCB走线阻抗匹配和信号反射 |
| 从机数量 | 受限于总帧长度和时钟偏移,建议不超过8个从机 |
| 兼容性 | 并非所有SPI设备都支持菊花链模式,需查阅数据手册 |
图4-5:菊花链硬件设计注意事项