💌 所属专栏:【通信协议】
😀 作 者:兰舟比特 🐾
🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干货!
💡 欢迎大家:这里是兰舟比特的技术小站,喜欢的话请点赞、收藏、评论三连击!有问题欢迎留言交流😘😘😘
我们用 最生活化、最通俗的比喻 + 图文式讲解,让你彻底搞懂 SPI 的 4 种模式 👇
🎯 一句话通俗总结:
SPI 的 4 种模式,其实就是“时钟什么时候开始跳、数据在第几下被读”—— 就像两个人打拍子传纸条,得约定好“拍子从高还是低开始”、“是在第一拍还是第二拍读纸条”,不然就乱套了!
🧩 一、先记住两个关键词:
SPI 模式由两个参数决定:
| 参数 | 通俗解释 |
|---|---|
| CPOL(Clock Polarity) | “拍子休息时是蹲着(低)还是站着(高)?” • CPOL=0 → 休息时蹲着(SCLK 空闲=低) • CPOL=1 → 休息时站着(SCLK 空闲=高) |
| CPHA(Clock Phase) | “纸条是在第一拍还是第二拍读?” • CPHA=0 → 第一拍就读 • CPHA=1 → 第二拍才读 |
🕺 二、用“跳舞打拍子传纸条”来理解 4 种模式
想象主机(MCU)和从机(外设)在跳舞,用拍手(SCLK)同步传纸条(数据):
💃 模式 0:蹲着休息,第一拍读纸条(最常用!)
- CPOL=0 → 两人蹲着休息(SCLK 空闲=低)
- CPHA=0 → 音乐一响,第一拍“啪”就伸手读纸条
- 发纸条的人,在“第二拍”放纸条(下降沿更新数据)
拍子: 蹲 → [啪!读] → 蹲 → [啪!读] → 蹲 → [啪!读]
纸条: D0 D1 D2
✅ Mode 0 最常用:SD卡、Flash、传感器都爱用它!
💃 模式 1:蹲着休息,第二拍读纸条
- CPOL=0 → 还是蹲着休息
- CPHA=1 → 音乐响了,第一拍不读,第二拍“啪”才读
拍子: 蹲 → 啪(不读)→ 蹲 → [啪!读D0] → 蹲 → [啪!读D1]
纸条: D0放这儿↘ D1放这儿↘
📌 数据在“第一拍”放好,但要等到“第二拍”才读 → 适合反应慢的设备。
💃 模式 2:站着休息,第一拍读纸条
- CPOL=1 → 两人站着休息(SCLK 空闲=高)
- CPHA=0 → 音乐一响,第一拍“啪”蹲下时就读纸条
拍子: 站 → [啪!蹲→读] → 站 → [啪!蹲→读]
纸条: D0 D1
⚠️ 虽然也是“第一拍读”,但因为是从“高→低”跳变,和 Mode 0 不同!
💃 模式 3:站着休息,第二拍读纸条
- CPOL=1 → 站着休息
- CPHA=1 → 第一拍不读,第二拍“啪”站起来时读
拍子: 站 → 啪(蹲,不读)→ 站 → [啪!站→读D0]
纸条: D0放这儿↘
📌 有些老式存储卡(如 MMC)用这个模式。
📊 三、对比表格(一看就懂)
| 模式 | 休息姿势(CPOL) | 读纸条时机(CPHA) | 采样边沿 | 通俗口诀 |
|---|---|---|---|---|
| Mode 0 | 蹲着(低电平) | 第一拍读 | 上升沿采样 | “蹲着起立就读” 👍 最常用 |
| Mode 1 | 蹲着(低电平) | 第二拍读 | 下降沿采样 | “蹲着,拍两下再读” |
| Mode 2 | 站着(高电平) | 第一拍读 | 下降沿采样 | “站着蹲下就读” |
| Mode 3 | 站着(高电平) | 第二拍读 | 上升沿采样 | “站着,拍两下再读” |
✅ 记住 Mode 0:“蹲着休息,第一拍就读” —— 80% 的芯片都用它!
🚨 四、如果模式配错了会怎样?
👉 就像两个人跳舞节奏对不上:
- 你以为第一拍读,他第二拍才给 → 你读了个寂寞(数据错位)
- 他第一拍给,你第二拍读 → 读到的是下一个数据(错位)
- 结果:收到的数据是乱码、0xFF、0x00,或完全没反应!
📌 典型症状:
- 发送 0x55,收到 0xAA(错一位)
- 发送命令,没回应
- 数据偶尔对,偶尔错
🔍 五、怎么知道该用哪个模式?
✅ 查外设芯片的数据手册!
通常在 “SPI Interface” 或 “Timing Diagram” 章节。
📌 举个生活化例子:
你想和朋友传纸条,总得先问一句:“你习惯第一拍读还是第二拍读?休息时蹲着还是站着?” —— 这就是看手册!
💡 六、调试小技巧
- 先试 Mode 0 → 大概率成功。
- 再试 Mode 3 → 存储类设备常用。
- 用逻辑分析仪看波形 → 看 SCLK 空闲是高是低,数据在哪个边沿变化。
- 收到的数据左移/右移一位? → 很可能是模式错了!
✅ 七、终极记忆口诀:
🎵 “蹲0站1,读1采2”
- 蹲着休息是 Mode 0/1(CPOL=0)
- 站着休息是 Mode 2/3(CPOL=1)
- 第一拍读是 Mode 0/2(CPHA=0)
- 第二拍读是 Mode 1/3(CPHA=1)
或者更简单:
✅ “Mode 0:蹲着第一拍读 —— 最安全,先试它!”
🖼 八、附:Mode 0 和 Mode 3 对比图(文字版)
Mode 0 (蹲着第一拍读):
SCLK: __ __ __ __
| |__| |__| |__| | ← 空闲低,上升沿采样
DATA: D0 D1 D2 D3
Mode 3 (站着第二拍读):
SCLK: __ __ __ __
__| |__| |__| |__| ← 空闲高,上升沿采样(但时机不同!)
DATA: D0 D1 D2 D3
⚠️ 看起来都是“上升沿采样”,但起始状态不同 → 数据对齐方式不同!
✅ 总结:
SPI 4 种模式 = 约定“时钟怎么摆”+“数据啥时候读”。Mode 0 最常用(蹲着第一拍读),配错就乱码。查手册 + 逻辑分析仪 = 100% 搞定!
版权声明:
本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。
轻松掌握SPI四种模式

被折叠的 条评论
为什么被折叠?



