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。

总线结构

主设备产生时钟并选择从设备。多个从设备可共享 SCLKMOSIMISO,但通常每个从设备需要独立的 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 频率开始,核对 CPOLCPHA 和位序。
  3. 用逻辑分析仪同时观察 CSSCLKMOSIMISO
  4. 对照器件手册拆分命令、地址、占位周期和返回数据。
  5. 检查 CS 的有效电平、建立时间、保持时间和字节间行为。
  6. 提高频率后,用示波器检查过冲、振铃、边沿速度和采样裕量。

适用场景

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

相关文档