
你有没有想过,家里的智能手表是怎么把心率数据传给芯片的?智能音箱的麦克风阵列如何快速把声音信号传给处理单元?这些看似复杂的操作,背后可能藏着一个低调却强大的通信协议 ——SPI(Serial Peripheral Interface,串行外设接口)。
作为嵌入式领域最常用的通信总线之一,SPI 就像电子设备里的 "快递员",能在芯片和传感器、存储芯片之间快速传递数据。今天咱们就聊聊这个 "小能手" 的硬件秘密。

想象一下你开了家快递公司,要给多个小区(从机)送快递(数据)。SPI 的工作模式就像这样:
和常见的 I2C 总线相比,SPI 最大的特点是全双工——MOSI 和 MISO 能同时传数据,就像双向车道,效率更高。但代价是需要更多引脚(I2C 只需要两根线),所以适合 "短距离 + 高速" 的场景,比如传感器、FLASH 存储、LCD 驱动这些需要快速响应的设备。

SPI 是由摩托罗拉(Motorola)公司开发的一种全双工、同步串行通信总线,主要用于微控制器(如单片机)与外围设备之间的通信。它具有以下显著特点:
SPI 广泛应用于各种电子设备中,例如:

要理解 SPI 的硬件,先记住四个关键信号,咱们一个一个拆解:
SCLK 由主机生成,是整个通信的 "心跳"。就像乐队的鼓手,SCLK 的频率(比如 1MHz、10MHz)决定了数据传输的速度。频率越高,数据传得越快,但对硬件的要求也越高(比如走线不能太长,否则容易有噪声)。
MOSI 是主机向从机发送数据的专用通道。主机就像快递员,把要发送的数据按位(bit)依次放到 MOSI 线上,从机则根据 SCK 的节奏 "接货"。
MISO 是从机向主机发送数据的通道。当主机给从机发数据时,从机也会同时通过 MISO 回传数据 —— 这就是全双工的魅力,一来一回同时完成。
SS 线是主机的 "点名开关"。因为 SPI 支持多个从机(比如一个单片机接了 3 个传感器),主机需要通过 SS 线告诉 "今天我要和谁通信"。当 SS 线被拉低(比如从 3.3V 变 0V),对应的从机就会 "竖起耳朵" 准备接收数据;其他从机的 SS 线保持高电平,相当于 "我现在不参与,别打扰"。
举个实际例子:在 STM32 开发板上,我们常看到这样的连接 ——
PA5(SCK)→ 传感器的SCKPA7(MOSI)→ 传感器的MOSIPA6(MISO)→ 传感器的MISOPA4(SS)→ 传感器的SS这四根线一接,单片机就能和传感器愉快地 "聊天" 了。
光知道线怎么连还不够,SPI 的核心秘密藏在时序里 —— 也就是 SCK、MOSI、MISO、SS 这四根线在时间上的配合。就像跳双人舞,节奏不对就会踩脚。

SPI 的时序由两个参数决定:时钟极性(CPOL)和时钟相位(CPHA)。这俩参数组合起来,形成了 SPI 的四种模式(Mode0~Mode3):
为了不让你记混,咱们直接上 "时序四兄弟" 的对比图:
模式 | CPOL | CPHA | SCK 空闲状态 | 数据采样边沿 | 数据变化边沿 |
|---|---|---|---|---|---|
Mode0 | 0 | 0 | 低电平 | 上升沿(低→高) | 下降沿(高→低) |
Mode1 | 0 | 1 | 低电平 | 下降沿(高→低) | 上升沿(低→高) |
Mode2 | 1 | 0 | 高电平 | 下降沿(高→低) | 上升沿(低→高) |
Mode3 | 1 | 1 | 高电平 | 上升沿(低→高) | 下降沿(高→低) |
举个 Mode0 的栗子(最常用的模式): 当 CPOL=0(SCK 空闲低电平),CPHA=0(第一个边沿采样),通信开始时:


理论学得再溜,实际搭电路时也可能踩坑。咱们总结了 SPI 硬件设计中最容易出错的几个点,帮你少走弯路。
如果一个主机要连多个从机(比如同时接 FLASH 和加速度传感器),有两种连接方式:


建议:新手优先选独立片选,简单可靠;如果 IO 不够,再考虑菊花链,但调试时记得用逻辑分析仪(比如 Saleae)看时序。
SPI 的高速(可达几十 MHz)是优点,但也带来麻烦 —— 走线太长会引入噪声,导致数据传错。
记住这几点:
SPI 通信的前提是主机和从机 "共地"—— 也就是它们的 GND 连在一起。如果两地之间有电压差(比如主机 GND 是 0V,从机 GND 是 0.1V),MOSI/MISO 的高 / 低电平判断就会出错(比如 3.3V 的信号在从机看来可能变成 3.2V,被误判为低电平)。 血泪教训:曾经有个项目,传感器和单片机分别接了不同的电源模块,没共地,结果 SPI 通信时好时坏,最后发现是 GND 没连牢。
现象 | 可能原因 | 解决方案 |
|---|---|---|
无时钟输出 | CR1寄存器未使能SPE位 | 写入SPI_CR1_SPE |
数据错位 | 模式不匹配 | 核对CPOL/CPHA设置 |
传输卡死 | CS线未正确释放 | 确保CS高电平持续时间 |
数据乱码 | 电平不匹配 | 添加电平转换电路 |
最后,咱们给 SPI 做个 "体检报告",帮你快速判断什么时候用它:
优点:
缺点:

SPI 就像嵌入式工程师的 "瑞士军刀",虽然不是万能的,但在短距离高速通信场景中几乎不可替代。理解它的硬件时序、掌握设计技巧,能帮你在调试时快速定位问题(比如时序不匹配、信号干扰),少掉几根头发。
附录:SPI vs I2C关键对比
特性 | SPI | I2C |
|---|---|---|
速度 | 可达100Mbps | 通常<1Mbps |
接线复杂度 | 4+n线 | 2线 |
通信方式 | 全双工 | 半双工 |
从机地址 | 无需 | 需要7/10位 |
错误检测 | 无原生机制 | 有ACK/NACK |
最佳场景 | 高速数据流 | 多设备控制 |