一、SPI是什么?
一句话秒懂
SPI就像一家快递公司用四条专用车道送货:老板(主设备)亲自点名员工(从设备),然后同时疯狂双向发货,速度碾压普通公路!
基础概念
- 中文名:串行外设接口(Serial Peripheral Interface)
- 核心特点:
- 四线制:SCK(时钟)、MOSI(主发从收)、MISO(主收从发)、SS(片选)
- 全双工狂魔:数据进/出同时进行(类似双向车道飙车)
- 主从模式:主设备完全掌控节奏,从设备只能被动响应
二、硬件接线:如何建立“快递专线”?
接线规则(老板与员工的专属通道)
- 必选线路:
- SCK(时钟线):主设备发出的节奏信号,像心跳一样控制传输速度
- MOSI(Master Out Slave In):主设备→从设备的“发货车道”
- MISO(Master In Slave Out):从设备→主设备的“退货车道”
- SS(Slave Select):主设备用这根线点名要对话的从设备(低电平有效)
(图示:主设备通过SS1、SS2连接两个从设备,共享SCK/MOSI/MISO)
关键细节
- 多从设备接法:每个从设备需要独立的SS线,但SCK/MOSI/MISO可共用
- 电平标准:不同电压设备间需电平转换(如3.3V主设备连接5V从设备)
三、数据传输:老板如何指挥“双向飙车”?
通信流程(快递公司工作日常)
- 点名员工:主设备拉低某个从设备的SS线(比如SS1)
→ 相当于:“1号员工,准备接单!” - 同步时钟:主设备通过SCK发出时钟脉冲(速度由主设备决定)
→ 类似敲鼓设定工作节奏 - 双向发货:
- 主设备通过MOSI发送数据给从设备
- 从设备同时通过MISO返回数据给主设备
→ 类似主仓库一边出货,一边接收退货
- 结束交易:主设备拉高SS线,结束本次通信
(图示:SS拉低→SCK时钟→MOSI/MISO同步传输)
数据帧结构(快递包裹格式)
- 无固定格式:SPI协议本身不规定数据内容(全由主从设备约定)
- 典型用法:
- 先发送1字节指令(如0x03表示“读取数据”)
- 再发送/接收数据字节
- 时钟极性/相位:需主从设备约定何时采样数据(CPOL和CPHA参数)
四、SPI的优缺点(真实吐槽版)
✅ 优点
- 速度极快:可达100Mbps以上(是I2C的百倍,UART的千倍)
- 全双工优势:收发同时进行,效率爆表
- 硬件简单:从设备只需移位寄存器,无需地址解码
❌ 缺点
- 占用引脚多:每增加一个从设备就要多一根SS线
- 无校验机制:依赖硬件抗干扰,长距离易出错
- 主设备霸权:从设备不能主动发起通信
五、实际应用场景
1. 存储器读写(如SD卡、EEPROM)
- 场景:单片机读取SD卡中的图片数据
- 关键点:SD卡初始化阶段需降低时钟频率
2. 显示屏驱动(OLED、TFT-LCD)
- 场景:Arduino通过SPI向0.96寸OLED发送显示指令
- 优势:高速刷新避免屏幕闪烁
3. 传感器高速采样(如数字加速度计)
- 案例:MPU6050陀螺仪以1kHz频率回传数据
六、常见问题(Q&A)
Q1:SS线必须由主设备控制吗?
- 是的!从设备不能主动拉低SS线,必须等待主设备召唤
Q2:时钟极性(CPOL)和相位(CPHA)怎么设置?
- 常见组合有4种模式(模式0-3),需查阅从设备手册
- 模式0最常用:CPOL=0(空闲时低电平),CPHA=0(在SCK上升沿采样)
Q3:SPI能传多远?
- 通常不超过30cm,长距离需改用CAN、RS485等协议
总结
SPI就像电子世界的高速公路——用更多的硬件线路换取极致速度,特别适合需要实时高速传输的场景(如显示屏刷新、高速数据采集)。虽然接线比I2C复杂,但当性能成为刚需时,它仍是无可争议的王者!
上一篇 通信协议详解(一):UART —— 电子设备间的“异步对讲机”
下一篇 通信协议详解(三):I2C —— 电子设备间的“圆桌会议”