SPI 的 CPOL/CPHA 四种模式是什么?
更新时间:2026-09-21。问题驱动短答页。总线对比见 I2C vs SPI、UART vs USART,串行接口设计参考见 SoC 外设基础。
一句话回答
SPI 是主从结构的同步全双工四线串行总线(SCLK 时钟、SS/CS 片选、MOSI 主出从入、MISO 主入从出),用两个参数定义时钟与数据的相对关系:CPOL 是时钟极性,决定 SCLK 空闲时的电平(CPOL=0 空闲低、先产生上升沿;CPOL=1 空闲高、先产生下降沿);CPHA 是时钟相位,决定在“第几个沿”对数据采样(CPHA=0 在第一个沿采样、另一个沿移位输出;CPHA=1 在第二个沿采样)。两者组合出 Mode0~3 四种时序。主设备和从设备必须配置成同一种模式(并一致采用 MSB/LSB 顺序),否则接收端会在数据尚未稳定或已变化的边沿去采样,得到整体错位/反相的数据。最常用的是 Mode0(CPOL=0, CPHA=0)和 Mode3(CPOL=1, CPHA=1),它们都在上升沿采样,但空闲电平不同。
四种模式
| 模式 | CPOL 空闲 | CPHA | 采样沿(从接收方视角) |
|---|---|---|---|
| Mode 0 | 0(低) | 0 | 第 1 个沿 = 上升沿采样 |
| Mode 1 | 0(低) | 1 | 第 2 个沿 = 下降沿采样 |
| Mode 2 | 1(高) | 0 | 第 1 个沿 = 下降沿采样 |
| Mode 3 | 1(高) | 1 | 第 2 个沿 = 上升沿采样 |
- CPOL 只改空闲电平/起始沿方向,让波形整体反相。
- CPHA 改“采样 vs 改变数据”的半周期错位:发送方在一个沿更新、接收方在另一个沿采样,保证采样点落在数据稳定窗口中央,见 建立/保持。
- Mode0 与 Mode3 同为上升沿采样,区别仅在空闲电平与片选有效时是否需要额外半个时钟。
不一致会怎样
- CPOL 反了:采样沿整体差半个周期,数据在翻转瞬间被采,时序完全错乱。
- CPHA 错了:发送刚更新就被采(违反保持时间)或晚一拍,首 bit 尤其容易错(CPHA=0 要求 SS 拉低时数据已就位)。
- 移位顺序(MSB/LSB first)不一致也会得到位序颠倒的数据。
设计/调试建议
- 严格按从机器件手册配置 CPOL/CPHA、位序、SCLK 最大频率、SS 有效极性。
- 用逻辑分析仪对照“数据稳定窗口 vs 采样沿”确认,而不是只看时钟频率。
- SPI 无应答、无流控,主设备要自己保证片选和时序;多从机各用一根 SS,见 I2C vs SPI。
- 高速板级注意 SCLK 反射和走线,见 信号完整性。
常见坑
- 主从模式配错,时钟能跑但数据全错。
- 混淆“采样沿”和“移位输出沿”,CPHA 判断颠倒。
- CPHA=0 时 SS 拉低当拍数据未准备好,丢失首位。
- Mode0/Mode3 只看采样沿相同就混用,忽略空闲电平与片选时序差异。
总结
SPI 用 CPOL 定义 SCLK 空闲电平、用 CPHA 定义在第一个还是第二个时钟沿采样,组合成 Mode0~3;数据发送在一个沿更新、接收在另一个沿采样以落在稳定窗口。主从两侧必须严格匹配 CPOL、CPHA、片选极性和 MSB/LSB 顺序,任何一项不一致都会在错误边沿采样导致错位,其中 Mode0 最常见、Mode0 与 Mode3 都在上升沿采样但空闲电平不同;配置永远以从机器件手册为准并上逻辑分析仪核对。