【通信协议】一片彻底搞懂SPI的4种模式(小白也能看懂)

轻松掌握SPI四种模式

💌 所属专栏:【通信协议】
😀 作  者:兰舟比特 🐾
🚀 个人简介:热爱开源系统与嵌入式技术,专注 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” 章节。

📌 举个生活化例子:

你想和朋友传纸条,总得先问一句:“你习惯第一拍读还是第二拍读?休息时蹲着还是站着?” —— 这就是看手册!


💡 六、调试小技巧

  1. 先试 Mode 0 → 大概率成功。
  2. 再试 Mode 3 → 存储类设备常用。
  3. 用逻辑分析仪看波形 → 看 SCLK 空闲是高是低,数据在哪个边沿变化。
  4. 收到的数据左移/右移一位? → 很可能是模式错了!

✅ 七、终极记忆口诀:

🎵 “蹲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% 搞定!


版权声明:

本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰舟比特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值