💌 所属专栏:【通信协议】 😀 作 者:兰舟比特 🐾 🚀 个人简介:热爱开源系统与嵌入式技术,专注 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 与外设的高效通信 —— 用好它,关键是“模式匹配、片选控制、时序稳定”。 版权声明: 本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。