3. SPI 时序参数:SCLK 极性(CPOL)与相位(CPHA)详解、四种工作模式(Mode 0-3)的时序图
在车载嵌入式系统中,SPI(Serial Peripheral Interface)通信的可靠性高度依赖于主从设备之间对时钟极性和相位的精确匹配。CPOL(Clock Polarity)和 CPHA(Clock Phase)是定义 SPI 时序的两个核心参数,它们共同决定了数据采样和切换的边沿时刻。理解这两个参数是进行 SPI 速率调优和时序匹配的基础。
3.1 CPOL 与 CPHA 定义
| 参数 | 全称 | 定义 | 有效值 |
|---|---|---|---|
| CPOL | Clock Polarity | 决定 SCLK 空闲状态(IDLE)时的电平 | 0:空闲为低电平(Low) 1:空闲为高电平(High) |
| CPHA | Clock Phase | 决定数据在 SCLK 的哪个边沿被采样(Capture) | 0:在第一个边沿采样 1:在第二个边沿采样 |
关键记忆法:CPOL 决定“空闲时是什么样”,CPHA 决定“数据在哪个边沿被读取”。两者组合形成四种工作模式。
3.2 四种工作模式(Mode 0-3)
通过组合 CPOL 和 CPHA,SPI 协议定义了四种标准工作模式。在车载应用中,Mode 0 和 Mode 3 最为常见,因为它们都支持在时钟上升沿采样数据,便于与大多数 MCU 的 GPIO 或 DMA 逻辑对齐。
| 模式 | CPOL | CPHA | 空闲电平 | 数据采样边沿 | 数据切换边沿 | 典型应用场景 |
|---|---|---|---|---|---|---|
| Mode 0 | 0 | 0 | 低电平 | 上升沿(第一个边沿) | 下降沿 | 通用 SPI Flash、SD 卡、多数传感器 |
| Mode 1 | 0 | 1 | 低电平 | 下降沿(第二个边沿) | 上升沿 | 部分 ADC、DAC 器件 |
| Mode 2 | 1 | 0 | 高电平 | 下降沿(第一个边沿) | 上升沿 | 少数特定协议芯片 |
| Mode 3 | 1 | 1 | 高电平 | 上升沿(第二个边沿) | 下降沿 | 高速 SPI NOR Flash、车载以太网 PHY 配置 |
车载调优提示:在高速 SPI(≥20 MHz)场景下,Mode 0 和 Mode 3 的上升沿采样特性更有利于满足建立时间(tSU)要求。Mode 3 由于空闲电平为高,在某些电平转换电路中可减少静态功耗。
3.3 四种模式时序图(内联 SVG)
下图展示了在传输一个字节(0x55,即二进制 01010101)时,四种模式下的 SCLK、MOSI 和 MISO 信号波形。注意观察数据采样点(箭头标记)与时钟边沿的关系。
3.4 时序匹配实战要点
在车载 MCU 驱动开发中,配置 SPI 模式时需遵循以下步骤:
- 查阅从设备数据手册:确认从设备支持的 SPI 模式(通常会在电气特性章节明确标注)。
- 配置 MCU 的 SPI 控制器:通过寄存器设置 CPOL 和 CPHA 位,使其与从设备匹配。
- 验证空闲电平:使用示波器或逻辑分析仪测量 CS 片选拉低后、SCLK 第一个边沿前的电平,确认与 CPOL 设定一致。
- 检查数据采样点:在调试阶段,通过回读 MISO 数据验证采样边沿是否正确。若数据出现移位或错位,通常是因为 CPHA 配置错误。
常见陷阱:部分国产或车规级 SPI 从设备对时序要求较严格,可能在 Mode 0 下无法正常工作,而需要切换至 Mode 3。此时不要盲目修改 CPOL,应同时调整 CPHA 以保持采样边沿一致(Mode 0 和 Mode 3 的采样边沿均为上升沿,仅空闲电平不同)。
3.5 速率调优与边沿关系
SPI 通信速率(SCLK 频率)受限于数据建立时间(tSU)和保持时间(tH)。在高速场景下,Mode 0 和 Mode 3 的上升沿采样优势明显:
- 建立时间(tSU):数据在采样边沿前必须保持稳定的最短时间。上升沿采样允许数据在半个时钟周期内完成切换并稳定。
- 保持时间(tH):数据在采样边沿后必须保持稳定的最短时间。Mode 0/3 的上升沿采样配合下降沿切换,为保持时间留出完整半周期。
下表总结了不同模式下的时序裕量特点:
| 模式 | 采样边沿 | 数据切换边沿 | 建立时间裕量 | 保持时间裕量 | 高速适用性 |
|---|---|---|---|---|---|
| Mode 0 | 上升沿 | 下降沿 | 半周期 | 半周期 | 高 |
| Mode 1 | 下降沿 | 上升沿 | 半周期 | 半周期 | 中 |
| Mode 2 | 下降沿 | 上升沿 | 半周期 | 半周期 | 中 |
| Mode 3 | 上升沿 | 下降沿 | 半周期 | 半周期 | 高 |
车载经验值:在 40 MHz SCLK 下,半周期仅为 12.5 ns。若 PCB 走线延迟超过 2 ns,建议优先选用 Mode 0 或 Mode 3,并适当降低速率至 30 MHz 以保证时序裕量。