SPI 四种工作模式(Mode 0 / 1 / 2 / 3)
时钟极性 CPOL 与时钟相位 CPHA 的原理、时序、差异与设计应用指南 | 编制日期 2026-09-21 | 版本号 Rev 1.0
1 SPI 总线基础
先搞清楚 SPI 的物理信号与拓扑,后面的「模式」才有依附对象。
SPI(Serial Peripheral Interface)是一种同步、全双工的串行总线,由 Motorola 在 MC68HC11 上首次定义,之后被广泛采纳但始终没有统一的官方标准文档,因此不同厂商对时钟极性/相位的约定出现了分歧——这就是「四种模式」的由来。
1.1 四根信号线
| 信号 | 方向 | 含义 |
|---|---|---|
| SCLK / SCK | 主 → 从 | 串行时钟,由主机产生,决定数据移位节拍 |
| MOSI / SDO | 主 → 从 | 主机输出、从机输入(Master Out Slave In) |
| MISO / SDI | 从 → 主 | 主机输入、从机输出(Master In Slave Out) |
| CS / SS | 主 → 从 | 片选(Chip Select / Slave Select),低有效最常见 |
1.2 主从拓扑
- 一主多从:多个从机共用 SCLK / MOSI / MISO,每个从机用独立的 CS 选通;同一时刻仅一个 CS 有效,被选中者才响应总线。
- 全双工:主从在每一时钟沿同时移位,MOSI 与 MISO 各传各的数据,互不依赖。
- 速率无标准上限:由器件性能与布线决定,常见几 MHz 至几十 MHz;具体以从机 datasheet 的 fSCK(max) 为准。
来源:自绘,依据 Motorola SPI 规范信号定义
2 决定模式的兩个比特:CPOL 与 CPHA
两个比特决定全部差异:CPOL 管时钟空闲电平,CPHA 管数据采样落在第几个边沿。
2.1 定义
| 比特 | 全称 | 取值 | 含义 |
|---|---|---|---|
| CPOL | Clock Polarity | 0 | SCLK 空闲(CS 无效)时为低电平 |
| CPOL | Clock Polarity | 1 | SCLK 空闲(CS 无效)时为高电平 |
| CPHA | Clock Phase | 0 | 在第一个时钟边沿(首沿)采样数据 |
| CPHA | Clock Phase | 1 | 在第二个时钟边沿(次沿)采样数据 |
所谓「第一个边沿」,是时钟从空闲态翻出去的那一跳;「第二个边沿」是同一时钟周期内回跳的那一跳。CPOL=0 时首沿是上升沿、次沿是下降沿;CPOL=1 时正好相反。
2.2 组合出四种模式
CPOL 与 CPHA 各 2 种取值,组合成 4 种工作模式,编号约定如下:
| 模式 | CPOL | CPHA | 时钟空闲 | 采样边沿 |
|---|---|---|---|---|
| Mode 0 | 0 | 0 | 低 | 上升沿(首沿) |
| Mode 1 | 0 | 1 | 低 | 下降沿(次沿) |
| Mode 2 | 1 | 0 | 高 | 下降沿(首沿) |
| Mode 3 | 1 | 1 | 高 | 上升沿(次沿) |
来源:自绘
3 四模式逐一详解与波形
逐模式说明其波形特征;最关键的规律是「Mode 0 ≡ Mode 3、Mode 1 ≡ Mode 2」。
3.1 Mode 0(CPOL=0, CPHA=0)
时钟空闲为低;在第一个时钟边沿(上升沿)采样数据,数据在随后的第二个边沿(下降沿)切换。这是最常用的模式,大量 SPI Flash、传感器默认采用。
3.2 Mode 1(CPOL=0, CPHA=1)
时钟空闲同样为低;在第二个时钟边沿(下降沿)采样数据,数据在第一个边沿(上升沿)切换。部分 ADC、MCU 外设使用此模式。
3.3 Mode 2(CPOL=1, CPHA=0)
时钟空闲为高;在第一个时钟边沿(下降沿)采样数据,数据在第二个边沿(上升沿)切换。部分存储器、显示驱动采用。
3.4 Mode 3(CPOL=1, CPHA=1)
时钟空闲为高;在第二个时钟边沿(上升沿)采样数据,数据在第一个边沿(下降沿)切换。与 Mode 0 同样是上升沿采样,仅时钟空闲电平不同。
来源:自绘,依据 Motorola SPI 规范
4 四模式速查对比表
把四种模式的全部差异压进一张表,配置前对照即可。
| 模式 | CPOL | CPHA | 时钟空闲 | 采样边沿 | 数据切换边沿 | 等效 | 典型应用 |
|---|---|---|---|---|---|---|---|
| Mode 0 | 0 | 0 | 低 | 上升沿(首沿) | 下降沿(次沿) | Mode 3 | 最常用:SPI Flash、传感器 |
| Mode 1 | 0 | 1 | 低 | 下降沿(次沿) | 上升沿(首沿) | Mode 2 | 部分 ADC、MCU 外设 |
| Mode 2 | 1 | 0 | 高 | 下降沿(首沿) | 上升沿(次沿) | Mode 1 | 部分存储器、显示驱动 |
| Mode 3 | 1 | 1 | 高 | 上升沿(次沿) | 下降沿(首沿) | Mode 0 | 常见:SD 卡、SPI Flash 另一档 |
5 设计应用注意
模式不匹配是 SPI 现场最高频的通信故障。下面按配置与布线层面给出注意点。
- 主从模式必须一致。两端 CPOL/CPHA 取同一组;否则采样边沿错开半个周期,整帧数据偏移(见第 4 图)。
- 查从机模式。看 datasheet 的「SPI Mode / CPOL, CPHA」字段;常见写「Mode 0, 3 supported」,即上升沿采样、两种空闲均可。
- 优先选 Mode 0(空闲低)。上电与未选通时 SCLK 默认低,最不易产生毛刺误触发;Mode 3 仅在从机不支持 Mode 0 时考虑。
- 上电时序。CS 默认拉高(无效),SCLK 处于正确空闲电平后再拉低 CS 启动;避免 MCU 复位后 SCLK 浮空产生假边沿。
- 时钟速率。不超过从机 fSCK(max);高速时注意建立/保持时间 tSU / tHD,必要时降频。
- 多从机不同模式。各从机独立 CS;切换从机先拉高旧 CS,再改 SPI 模式(若各从机模式不同),最后拉低新 CS。尽量统一从机模式。
- CS 建立/保持。满足 tSU(CS)、tHD(CS);CS 无效期间 SCLK 可自由翻转,数据线不被误锁存。
- 半双工/三线器件。部分 LCD、触摸屏只用一根双向数据线(DQ),需把硬件 SPI 配成半双工或单线,别当全双工。
- GPIO 模拟(bit-banging)。明确「在哪个边沿采样/驱动」,软件延时须满足 tSU / tHD,速率受限且 CPU 占用高。
- 硬件 SPI 配置。如 STM32 的 SPI_CR1 含 CPOL/CPHA 位;注意 MCU 复位默认常是 Mode 0,要显式改写。
- MSB/LSB 顺序。与模式无关但常被混淆,按器件设帧格式(多数 SPI 存储器为 MSB first)。
- 调试手段。逻辑分析仪以 CS 触发抓 SCLK + MOSI,对照第 3 图确认当前模式;检查采样边沿处数据是否稳定(不处于跳变中)。
来源:自绘
6 常见故障排查速查表
现象 → 原因 → 处置,调试时直接翻查。
| 现象 | 最可能原因 | 处置 |
|---|---|---|
| 读到全 0xFF / 全 0x00 | 模式不匹配 / CS 未拉低 / 器件未选中 | 核对 CPOL/CPHA;确认 CS 有效电平与建立时间 |
| 数据整体偏移 1 个 bit | CPHA 设错(采样边沿差半个周期) | 切换 CPHA 再试 |
| 偶发误码 | 速率过高 / 建立保持不足 / 信号反射 | 降频;检查走线、端接、上拉 |
| 上电即误触发 | 空闲电平不符(CPOL 错) | 配置正确空闲极性;CS 默认拉高 |
| 多从机互相干扰 | CS 冲突 / 切换从机未复位模式 | 独立 CS;切换从机先拉高旧 CS 再配置 |
| 只发不收 / 只收不发 | 半双工器件误按全双工 | 确认数据线定义(是否 3 线/双线) |
7 选型与配置建议
常见器件类型的默认模式一览;最终以正式 datasheet 为准。
| 器件类型 | 常见默认模式 | 说明 |
|---|---|---|
| SPI NOR / NAND Flash(含 XTX 等) | Mode 0 / 3 | 多为上升沿采样,兼容两种空闲电平 |
| SD 卡(SPI 模式) | Mode 0 | 规范固定 Mode 0 |
| 惯性/环境传感器(IMU、温湿度) | Mode 0 / 3 | 上升沿采样为主 |
| 触摸屏 / 显示驱动 | Mode 0 / 3 | 部分支持 Mode 0/3 自选 |
| 部分 ADC / DAC | Mode 0 或 1 | 以器件 datasheet 为准 |
| I2C/SPI 复用器件 | 看寄存器配置 | 常由配置位选择模式 |
| 老式 EEPROM | Mode 0 | 单模式常见 |
8 上线前核查清单
量产前逐条确认,避免批次性通信失败。
- 确认每个从机 datasheet 标注的 SPI Mode / CPOL / CPHA
- 主机 SPI 控制器配置与从机一致
- 多从机模式不同时,已规划 CS 切换与模式重配置顺序
- CS 默认无效电平正确(通常高),上电 SCLK 处于正确空闲电平
- 时钟频率 ≤ 从机 fSCK(max),并留建立/保持余量
- 满足 tSU(CS) / tHD(CS)
- 确认是双线全双工还是单线/三线半双工
- 帧格式 MSB/LSB 与从机一致
- 用逻辑分析仪以 CS 触发抓取,对照波形确认采样边沿
附录 术语表与参考来源
术语表
| 术语 | 含义 |
|---|---|
| CPOL | Clock Polarity,时钟极性:SCLK 空闲电平(0=低,1=高) |
| CPHA | Clock Phase,时钟相位:数据采样落在第几个边沿(0=首沿,1=次沿) |
| SCLK / SCK | 串行时钟线,主机输出 |
| MOSI / SDO | 主机输出、从机输入数据线 |
| MISO / SDI | 主机输入、从机输出数据线 |
| CS / SS | 片选 / 从机选择,低有效最常见 |
| 首沿 / 次沿 | CPOL=0 时分别为上升/下降沿;CPOL=1 时相反 |
| t_SU / t_HD | 建立时间 / 保持时间,数据在采样边沿前后需稳定的最小窗口 |
参考来源
- Motorola《SPI Block Guide》(MC68HC11 应用笔记,SPI 模式定义的源头)。
- 各 MCU 参考手册中 SPI 控制器章节(如 SPI_CR1 的 CPOL / CPHA 位域)。
- 存储器 / 传感器器件 datasheet 的「SPI Interface / Operating Modes」章节。