Skip to main content

通讯协议-SPI

SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行通信接口,常用于 MCU 与 Flash、显示屏、ADC、DAC、传感器等器件之间的板级高速通信。SPI 没有统一的高层协议,具体命令、时序限制和数据格式必须以从设备手册为准。

信号线​

信号常见别名主设备方向作用
SCLKSCK、CLK输出串行时钟
MOSICOPI、SDI输出主设备发送、从设备接收
MISOCIPO、SDO输入从设备发送、主设备接收
CSSS、NSS输出片选,通常低电平有效
GND--公共参考地

标准四线 SPI 支持全双工。某些器件只使用单向数据线,或将 MOSI/MISO 合并成一根双向数据线,形成三线或半双工 SPI。

总线结构​

主设备产生时钟并选择从设备。多个从设备可共享 SCLK、MOSI 和 MISO,但通常每个从设备需要独立的 CS。

                 +-- CS0 --> 从设备 0
主设备 -- SCLK --+-- SCLK -> 从设备 0/1/2
-- MOSI --+-- MOSI -> 从设备 0/1/2
<- MISO --+-- MISO <- 从设备 0/1/2
+-- CS1 --> 从设备 1
+-- CS2 --> 从设备 2

未被选中的从设备必须释放 MISO,使其处于高阻态。若多个从设备同时驱动 MISO,会造成总线冲突。

SPI 模式​

SPI 模式由时钟极性 CPOL 和时钟相位 CPHA 决定:

模式CPOLCPHA空闲时钟电平采样边沿数据改变边沿
Mode 000低第一个边沿(上升沿)第二个边沿(下降沿)
Mode 101低第二个边沿(下降沿)第一个边沿(上升沿)
Mode 210高第一个边沿(下降沿)第二个边沿(上升沿)
Mode 311高第二个边沿(上升沿)第一个边沿(下降沿)

“第一个/第二个边沿”是相对于 CS 有效后、从时钟空闲电平开始计算。主从设备的模式必须一致,否则可能出现整体移位或位值错误。

一次典型传输​

  1. 主设备将目标从设备的 CS 置为有效。
  2. 主设备按目标器件要求发送命令、地址和数据。
  3. 每产生一个 SCLK 周期,MOSI 与 MISO 通常各移入/移出一位。
  4. 传输完成后,主设备将 CS 置为无效。
CS    ──────┐____________________________┌──────
SCLK ______|_/-\_/-\_/-\_/-\_/-\_/-\_|______
MOSI | 命令 / 地址 / 写入数据 |
MISO | 状态 / 占位 / 读取数据 |

SPI 是全双工移位接口。主设备为了读取数据,也必须发送相同数量的占位字节;从设备可能在主设备发送命令时同时返回无效或状态数据。

关键参数​

参数说明核对来源
最大 SCLK 频率从设备可接受的最高时钟频率从设备数据手册
CPOL/CPHASPI 模式从设备数据手册
位序MSB first 或 LSB first从设备数据手册
字长常见为 8 位,也可能是 9、16、24、32 位从设备数据手册
CS 建立/保持时间CS 有效到首个时钟、末个时钟到 CS 无效的时间从设备时序图
字节间隔连续字节之间是否允许或要求停顿从设备数据手册
电平通信双方 IO 电压与阈值双方数据手册

不要仅依据“器件支持 SPI”确定配置。不同器件可能使用不同模式、命令格式、片选行为和读取延迟。

优点与限制​

优点限制
全双工,吞吐量高没有统一的寻址和命令协议
时序简单,硬件支持广泛多从设备通常占用多个 CS 引脚
无需上拉,边沿通常较快没有原生确认、重试和错误校验
可连续传输大量数据不适合长距离或板外复杂环境

常见扩展​

类型数据线特点
标准 SPIMOSI + MISO全双工,一位数据宽度
三线 SPI单根双向数据线节省引脚,需要切换方向
Dual SPI2 根双向数据线常用于串行 Flash
Quad SPI(QSPI)4 根双向数据线提高 Flash 读取带宽
Octal SPI8 根双向数据线更高吞吐量,时序要求更严格

扩展模式的命令、地址阶段和数据阶段可能使用不同线宽,必须按器件手册配置。

常见问题与排查​

现象常见原因排查方法
始终读到 0xFFMISO 未被驱动、CS 无效、接线断开观察 CS 和 MISO,确认器件供电与引脚方向
始终读到 0x00MISO 被拉低、器件复位或未启动检查复位、供电和 MISO 电平
数据整体移位CPHA/CPOL 配置错误依次核对四种模式或按手册配置
高速正常率低走线、负载、串扰或建立保持时间不足降低时钟,用示波器观察边沿和振铃
首字节正确,后续错误CS 行为或字节间隔不符合要求对照器件时序图检查连续传输规则
多从设备冲突非选中设备未释放 MISO分别断开设备或检查其 MISO 高阻要求

调试步骤​

  1. 确认电源、电平、地线和器件复位状态。
  2. 从低 SCLK 频率开始,核对 CPOL、CPHA 和位序。
  3. 用逻辑分析仪同时观察 CS、SCLK、MOSI 和 MISO。
  4. 对照器件手册拆分命令、地址、占位周期和返回数据。
  5. 检查 CS 的有效电平、建立时间、保持时间和字节间行为。
  6. 提高频率后,用示波器检查过冲、振铃、边沿速度和采样裕量。

适用场景​

SPI 适合板内、短距离、高吞吐量的主从通信。需要多节点寻址、较少引脚或板外通信时,应根据速率、距离和可靠性要求考虑 I²C、CAN、RS-485 等接口。

相关文档​