足球世界杯视频

【通信协议】SPI 串行外设接口(一篇掌握核心知识点)

💌 所属专栏:【通信协议】 😀 作 者:兰舟比特 🐾 🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干货! 💡 欢迎大家:这里是兰舟比特的技术小站,喜欢的话请点赞、收藏、评论三连击!有问题欢迎留言交流😘😘😘

🧠 SPI 串行外设接口 —— 一文通吃常用知识点

✅ 1. 什么是 SPI?

SPI(Serial Peripheral Interface) 是一种同步、全双工、主从式串行通信协议,用于 MCU 与外设(传感器、存储器、屏幕等)之间高速数据传输。

📌 特点:

由 Motorola 在 1980 年代提出无起始/停止位,无校验位 → 速度快通常 4 根线:SCLK、MOSI、MISO、SS/CS适合板内短距离通信(< 10cm)

✅ 2. SPI 四根核心信号线

信号全称方向作用SCLKSerial Clock主机 → 从机时钟线,由主机产生,同步数据MOSIMaster Out Slave In主机 → 从机主机发送数据给从机MISOMaster In Slave Out从机 → 主机从机发送数据给主机SS/CSSlave Select / Chip Select主机 → 从机片选线,低电平选中从机

⚠️ 注意:有些设备支持“3线 SPI”(半双工,MOSI/MISO 合并),但标准是 4 线全双工。

✅ 3. SPI 工作模式(4种)—— 必考重点!

由 CPOL(时钟极性) 和 CPHA(时钟相位) 决定:

模式CPOLCPHA空闲电平采样边沿口诀Mode 000低电平上升沿采样✅ 最常用:“蹲着第一拍读”Mode 101低电平下降沿采样“蹲着第二拍读”Mode 210高电平下降沿采样“站着第一拍读”Mode 311高电平上升沿采样“站着第二拍读”

📌 Mode 0 是默认首选!(如 Flash、SD卡、BMP280、OLED)

🔧 MCU 和外设必须模式一致,否则数据错乱!

✅ 4. 数据传输特点

全双工:主机和从机在每个时钟周期同时发送和接收 1 位数据MSB/LSB First:数据从高位还是低位先发 —— 需查手册确认(通常 MSB)数据长度可变:常见 8 位,也可 16 位、24 位等(由软件或硬件配置)无流控、无地址、无错误校验 → 需软件层保障可靠性

✅ 5. 主从架构 & 多设备连接

一个主机(MCU) + 多个从机(外设)共享总线:SCLK、MOSI、MISO 所有从机并联独立片选:每个从机有自己的 CS,由 MCU 的 GPIO 控制⚠️ 同一时间只能拉低一个 CS → 避免 MISO 总线冲突!

📌 多设备接线示意图:

MCU ──SCLK───┬──[Flash]

MOSI───┼──[Sensor]

MISO◄──┼──[OLED]

CS1────┘

CS2─────────┘

CS3────────────┘

✅ 可用“3-8 译码器”扩展 CS,节省 GPIO。

✅ 6. 优缺点对比

优点缺点✅ 速度快(几 Mbps ~ 几十 Mbps)❌ 占用引脚多(每个从机需独立 CS)✅ 全双工,效率高❌ 无标准协议层(不同芯片数据格式不同)✅ 硬件实现简单❌ 无错误校验机制✅ 无地址冲突问题❌ 仅适合短距离(抗干扰差)

✅ 7. 常见应用场景 & 芯片举例

应用类型芯片举例说明温度传感器MAX6675、MAX31855读取热电偶温度存储器W25Q64、AT25SF081SPI Flash,存固件/数据显示屏SSD1306、ILI9341OLED / TFT 屏幕驱动ADC/DACMCP3008、MCP4921模拟量采集/输出SD卡MicroSD(SPI模式)文件存储无线模块nRF24L012.4GHz 无线收发

✅ 8. 如何调试 SPI?

工具作用逻辑分析仪✅ 最推荐!可捕获波形 + 自动解码 SPI 数据示波器(带协议解码)看电气特性 + 协议内容代码打印法在 MCU 中把 SPI 收发数据通过 UART 打印出来(临时调试)万用表/示波器测 CS确认片选信号是否正常拉低

❌ 普通串口助手不能直接监测 SPI!

✅ 9. MCU 端开发要点

使用 硬件 SPI 外设(不是 GPIO 模拟)→ 速度快、稳定配置正确的 模式(CPOL/CPHA)、波特率、数据位宽、MSB/LSBCS 用 GPIO 软件控制(方便多设备)通信前拉低 CS,通信后拉高 CS初始化时所有 CS 设为高电平(未选中状态)

📌 示例代码(Arduino):

SPI.begin(); // 初始化 SPI

digitalWrite(CS_PIN, LOW); // 选中设备

SPI.transfer(0x03); // 发送命令

byte data = SPI.transfer(0x00); // 收数据

digitalWrite(CS_PIN, HIGH); // 取消选中

✅ 10. 高频考点 & 面试问题

SPI 有几种模式?怎么区分? → 4 种,由 CPOL 和 CPHA 决定,Mode 0 最常用。

SPI 是全双工还是半双工? → 全双工(MOSI 和 MISO 可同时收发)。

多个 SPI 设备如何连接? → SCLK/MOSI/MISO 共享,CS 独立,分时选通。

SPI 和 I2C 有什么区别? → SPI 速度快、引脚多、无地址;I2C 速度慢、引脚少、有地址、支持多主。

SPI 通信失败常见原因? → 模式不匹配、CS 未控制好、速率太快、未共地、电压不匹配。

🎯 一句话终极总结:

SPI 是嵌入式世界里的“高速点对点数据通道”,靠 4 根线 + 片选机制 + 时钟同步,实现 MCU 与外设的高效通信 —— 用好它,关键是“模式匹配、片选控制、时序稳定”。

版权声明:

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