1. SPI通信基础与模式配置误区
刚入行嵌入式开发时,我也曾犯过类似的错误。记得第一次调试SPI设备,严格按照手册配置了模式3(CPOL=1, CPHA=1),结果抓包数据全是乱码。当时花了整整两天时间排查,最后发现是模式配置错误。这种经历让我深刻认识到:理解SPI时序本质比死记手册更重要。
SPI通信有四个关键参数:CPOL(时钟极性)、CPHA(时钟相位)、数据位序和时钟频率。其中最容易出错的就是前两个参数的组合。SPI模式0到模式3的差异就体现在这两个参数上:
- 模式0:CPOL=0, CPHA=0
- 模式1:CPOL=0, CPHA=1
- 模式2:CPOL=1, CPHA=0
- 模式3:CPOL=1, CPHA=1
关键原则:采样时刻数据必须稳定!这是判断模式是否正确的黄金准则。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 波形诊断实战:从错误案例学习
让我们分析这个典型错误案例。用户配置的是模式3(CPOL=1, CPHA=1),但实际需要的却是模式2(CPOL=1, CPHA=0)。通过示波器捕获的波形可以清晰看到问题所在:
-
时钟极性判断:观察时钟线(SCK)的空闲状态
- 空闲时为高电平 → CPOL=1
- 空闲时为低电平 → CPOL=0
-
采样边沿判断:关键看数据稳定的时段
- 在第一个时钟边沿(本例为下降沿)时,数据线保持稳定
- 在第二个边沿(上升沿)时,数据正在变化
这意味着采样应该发生在第一个边沿(下降沿),因此CPHA=0。如果配置为CPHA=1,就会在数据变化的边沿采样,必然导致数据错误。
3. SPI模式配置速查表
为了快速判断正确的SPI模式,我整理了这个实用表格:
| 观察点 | 判断依据 | 对应参数 |
|---|---|---|
| 时钟空闲状态 | 高电平=1,低电平=0 | CPOL |
| 数据稳定时段 | 第一个边沿稳定→0,第二个→1 | CPHA |
| 有效采样点 | 必须在数据稳定窗口中心 | - |
常见设备模式配置:
