4、SPI菊花链:SPI协议回顾、多设备级联配置、片选信号处理、数据帧格式

SPI(Serial Peripheral Interface)是一种高速、全双工、同步的通信总线,在嵌入式系统中应用广泛。菊花链拓扑结构允许将多个SPI设备串联起来,仅使用一条片选线即可控制所有设备,极大地节省了GPIO资源。本节将深入探讨SPI菊花链的协议基础、硬件配置、片选策略以及数据帧格式。

4.1 SPI协议回顾

标准SPI总线采用主从模式,包含四条信号线:

  • SCLK:串行时钟,由主机产生。
  • MOSI:主机输出,从机输入。
  • MISO:主机输入,从机输出。
  • SS/CS:从机选择(片选),低电平有效。

在标准点对点连接中,每个从机需要独立的片选线。当从机数量增多时,GPIO引脚消耗巨大。

主机 从机1 从机2 从机3 SCLK MOSI MISO CS (独立) SCLK MOSI MISO CS

图4-1:标准SPI多设备连接(独立片选)

4.2 多设备级联配置

SPI菊花链将所有从机的片选信号并联,数据线采用“级联”方式连接:主机的MOSI连接第一个从机的MOSI,第一个从机的MISO连接第二个从机的MOSI,以此类推,最后一个从机的MISO返回主机。所有从机共享同一时钟和片选信号。

主机 从机1 (Slave 1) 从机2 (Slave 2) 从机3 (Slave 3) SCLK CS (共享) MOSI 级联 MISO (返回主机)

图4-2:SPI菊花链级联拓扑结构

级联配置的关键点:

  • 数据延迟:数据经过每个从机时会产生一个时钟周期的延迟(移位寄存器特性)。
  • 帧长度:总数据帧长度 = 单个设备数据长度 × 设备数量。
  • 初始化:所有从机必须支持菊花链模式(通常通过配置寄存器启用)。

4.3 片选信号处理

在SPI菊花链中,片选信号的处理方式与传统SPI有显著区别:

特性 标准SPI 菊花链SPI
片选数量 每个从机独立CS 所有从机共享1个CS
CS作用 选择特定从机 同步所有从机开始/结束传输
数据对齐 CS下降沿开始,上升沿结束 CS低电平期间完成所有数据移位
注意事项 CS高阻态保护 CS释放时所有从机同时锁存数据
菊花链CS时序 CS 高 低 ↓ ↑ 数据传输窗口(N × 8 个SCLK周期) 所有从机同时锁存 CS低电平期间,数据依次通过各从机移位寄存器 CS上升沿时,所有从机同时将移位数据锁存到输出寄存器

图4-3:菊花链片选信号时序

4.4 数据帧格式

SPI菊花链的数据帧格式需要精心设计,以确保每个从机都能正确接收和发送数据。典型的数据帧结构如下:

菊花链数据帧格式(3个从机,每个8位) 从机3数据 (8位) 从机2数据 (8位) 从机1数据 (8位) → → MOSI发送顺序:先发送从机3的数据,最后发送从机1的数据 MISO接收顺序:先接收从机1的数据,最后接收从机3的数据 注:通常MSB优先,每个从机在CS上升沿锁存自己的数据段 总帧长度 = 从机数量 × 每个从机数据宽度

图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设备都支持菊花链模式,需查阅数据手册
硬件连接注意事项 主机 S1 S2 S3 S4 MISO返回路径(注意走线长度匹配) SCLK 共享(注意扇出能力)

图4-5:菊花链硬件设计注意事项

专注课程资料整理