在嵌入式系统的短距离高速通信领域,SPI(Serial Peripheral Interface,串行外设接口)协议凭借其简洁、高效的显著特性,占据着至关重要的地位。它由摩托罗拉在 20 世纪 80 年代精心研发,初的目的是解决微控制器与外围芯片之间的高速数据交互难题。之后,经过 JEDEC 的标准化处理,SPI 协议成为电子行业广泛采用的同步串行通信协议,在工业控制、消费电子、汽车电子等众多领域的板级设备互联中得到了普遍应用。
一、SPI 协议特性 SPI 协议的优势源自其独特的设计逻辑,其关键特性主要包括以下几个方面:
同步通信:SPI 协议依赖主设备生成的时钟信号(SCLK)来实现数据的同步传输。时钟节奏完全由主设备掌控,这就避免了异步通信中波特率偏差的问题,为高速传输奠定了坚实的基础。
全双工传输:通过两条独立的数据线路,SPI 协议实现了双向同时通信。主设备在发送数据的同时能够接收从设备的数据,无需进行分时切换,大大提升了数据交互的效率。

主从架构:SPI 采用一主多从的拓扑结构。主设备(通常为微控制器,如 STM32、ESP32 等)发起通信并控制时钟,从设备(如传感器、存储芯片)则被动响应,无法主动发起通信。
灵活可配置:SPI 协议支持可变长度的数据传输(4 - 16 位),时钟频率、极性、相位都可以根据实际需求进行配置,能够适配不同速率需求的外设。同时,它还衍生出了多种变体,以满足多样化的应用场景。
二、SPI 硬件架构与信号定义 SPI 的硬件连接以 4 线标准配置为基础,不过可以根据具体场景进行简化或扩展。所有信号线均由主设备主导,并且没有总线仲裁机制,同一时间仅允许 1 个主设备工作。
(一)4 线标准配置
4 根基础信号线是 SPI 通信的单元,各线路的功能与电气特性十分明确:
SCLK(Serial Clock,串行时钟):由主设备输出,用于同步数据位的传输。时钟频率可配置(1kHz ~ 200MHz),具体取决于芯片工艺。高端 MCU(如 STM32H7)可支持 120MHz,FPGA 甚至能够突破 200MHz,而低速 MCU(如 8051)大多限于 10MHz 以内。空闲状态的电平由时钟极性(CPOL)定义,它是数据采样的关键基准。
MOSI(Master Out Slave In,主出从入):这是主设备向从设备传输数据的单向线路。主设备采用推挽输出,从设备为开漏或推挽输入。数据需要在指定时钟边沿前准备稳定,以确保采样的准确性。
MISO(Master In Slave Out,主入从出):从设备向主设备传输数据的单向线路。从设备采用推挽输出,主设备为推挽输入。它与 MOSI 同步传输,数据的有效性与时钟边沿绑定。
SS/CS(Slave Select/Chip Select,片选线):由主设备输出,用于选通目标从设备,默认低电平有效。未选中时,从设备的 MISO 线会置于高阻态,以避免总线冲突;选中后需保持稳定至传输结束,不可中途拉高。每个从设备都需要独立配备一根 SS 线,这是多从设备管理的。
(二)扩展与简化架构
标准 4 线架构可以根据实际场景进行适配调整,从而衍生出多种变体:
三线 SPI:省略 MISO 或 MOSI 线,适用于单工场景(如仅主发从收的 OLED 屏)。这种架构可以减少 PCB 布线成本,但仅支持半双工通信,需要通过软件来控制数据线的方向。
菊花链 SPI:多从设备串联(前一从设备 MISO 接后一从设备 MOSI),仅需 1 根 SS 线。它适用于从设备数量多但速率要求低的场景(如 LED 灯带),不过传输延迟会随从设备数量的增加而累积。
Quad SPI(QSPI)/Octal SPI:扩展数据线条数(QSPI 用 4 根,Octal SPI 用 8 根),实现并行传输数据,速率大幅提升(如 QSPI 可达到标准 SPI 的 4 倍)。这种架构广泛应用于高速存储场景(如 MCU 固件加载、图像缓存)。
三、SPI 工作原理与时序配置
SPI 的通信过程以时钟同步为,主从设备需要配置一致的时序参数,否则会导致数据采样错位、通信失败。关键在于时钟极性(CPOL)与时钟相位(CPHA)的组合,以及数据传输机制的协同工作。
(一)时序参数:CPOL 与 CPHA
CPOL 定义时钟空闲状态的电平,CPHA 定义数据采样的时钟边沿,两者组合形成 4 种工作模式,以适配不同外设的需求:
模式 0(CPOL = 0,CPHA = 0):时钟空闲时为低电平,数据在时钟上升沿(空闲态跳变至活动态)采样,下降沿更新数据。这是常用的模式,适用于多数传感器(如温度传感器 MAX31855)。
模式 1(CPOL = 0,CPHA = 1):时钟空闲时为低电平,数据在时钟下降沿采样,上升沿更新数据。这种模式需要在时钟有效前准备好数据,适用于高速传输场景。
模式 2(CPOL = 1,CPHA = 0):时钟空闲时为高电平,数据在时钟下降沿(活动态跳变至空闲态)采样,上升沿更新数据。该模式对数据建立时间要求严格,适配部分特殊外设。
模式 3(CPOL = 1,CPHA = 1):时钟空闲时为高电平,数据在时钟上升沿采样,下降沿更新数据。它适用于部分 Flash 存储芯片(如 W25Q 系列),能够有效减少高速传输时的信号干扰,提升数据传输的稳定性。
(二)完整通信流程
SPI 的通信流程由主设备全程主导,从设备被动配合。在标准 4 线架构下,完整流程可分为 4 个步骤,兼顾单字节与多字节传输场景:
选通从设备:主设备拉低目标从设备的 SS/CS 线(低电平有效),此时该从设备被激活,进入待通信状态;其余未被选通的从设备 MISO 线保持高阻态,避免总线冲突。若为多字节传输,SS/CS 线需全程保持低电平,不可中途拉高。
同步时钟与数据传输:主设备启动 SCLK 时钟信号,按照预设的 CPOL 和 CPHA 模式,在对应时钟边沿同步传输与采样数据。主设备通过 MOSI 线发送数据,同时通过 MISO 线接收从设备反馈的数据,实现全双工同步交互。数据传输通常从位(MSB)开始,部分芯片支持位(LSB)优先,需要提前配置一致。
传输结束:当预设长度的数据传输完成后,主设备停止输出 SCLK 时钟信号,时钟恢复至空闲电平(由 CPOL 定义),同时停止 MOSI 线的数据输出,从设备也停止 MISO 线的反馈。
释放从设备:主设备拉高目标从设备的 SS/CS 线,该从设备退出通信状态,MISO 线恢复高阻态,等待下被选通。若需切换从设备通信,需先释放当前从设备,再选通新的从设备,避免总线冲突。
(三)数据帧格式
SPI 协议本身并没有严格定义数据帧格式,具有极高的灵活性。它可以根据外设需求配置 4 - 16 位的数据帧长度,在多数场景下采用 8 位数据帧(1 字节),能够适配绝大多数嵌入式外设。数据帧没有起始位、停止位和校验位,仅包含纯数据位,这也是其传输效率高的原因之一。但这也导致协议本身不具备错误检测能力,需要通过软件添加校验逻辑(如 CRC 校验、奇偶校验)来弥补。
四、SPI 协议的优缺点
(一)优点
传输速率高:作为同步通信协议,SPI 没有异步通信的波特率偏差限制,时钟频率可高达数百 MHz(FPGA 支持 200MHz 以上),远远超过 UART、I2C 等协议,适合高速数据传输场景(如图像传输、固件加载)。
全双工通信:通过两条独立数据线实现双向同步传输,无需分时切换。相比半双工的 I2C 协议,SPI 的数据交互效率大幅提升,适合需要双向高速通信的场景(如主从设备实时数据交互)。
协议简单:SPI 没有复杂的帧格式定义,也无需地址寻址(通过 SS/CS 线选通从设备),硬件实现与软件编程的难度较低,开发周期短,能够适配多数嵌入式 MCU 的硬件 SPI 外设。
灵活性强:支持多种数据帧长度、4 种时序模式,还可衍生出三线、QSPI 等多种变体,能够适配不同速率、不同通信方向的外设需求,兼容性广泛。
(二)主要缺点
占用 GPIO 较多:标准 4 线架构需要占用 4 个 GPIO,在多从设备场景下,每个从设备还需额外占用 1 个 SS/CS 线。相比 I2C(仅需 2 根线),SPI 对 GPIO 资源的消耗更大,不利于多从设备的密集布局。
无总线仲裁机制:同一总线仅允许 1 个主设备工作,若需要多主设备交互,需要通过软件额外实现总线仲裁逻辑,否则会导致总线冲突,增加开发复杂度。
无错误检测与纠错能力:协议本身没有校验位、应答机制,传输过程中若出现信号干扰导致数据错误,无法自动检测和纠正,需要依赖软件添加校验逻辑,增加了软件开销。
传输距离短:SPI 仅适用于板级短距离通信(通常不超过 1 米),信号线长度过长容易受到干扰,导致信号失真,无法用于远距离设备互联,相比 RS - 485、CAN 等总线协议,传输距离存在明显劣势。
五、SPI 协议的应用场景
基于高速、全双工、短距离的特性,SPI 协议主要应用于板级设备互联,覆盖工业控制、消费电子、汽车电子等多个领域,典型应用场景如下:
存储芯片交互:与 Flash、EEPROM 等存储芯片通信,实现固件加载、数据读写(如 W25Q 系列 Flash 常用 SPI 协议,QSPI 模式用于高速固件启动)。
传感器数据采集:连接高速传感器(如温度传感器、加速度传感器、ADC 转换器),快速采集传感器数据,适用于对采集速率要求高的场景(如工业数据实时采集)。
显示模块驱动:驱动 OLED、LCD 等显示模块,传输显示数据。部分小型显示模块采用三线 SPI 简化布线,降低硬件成本。
主从设备数据交互:在嵌入式系统中,实现主 MCU 与从 MCU、FPGA、DSP 等芯片的高速数据交互,实现多芯片协同工作(如工业控制中 MCU 与 FPGA 的数据传输)。
其他高速外设连接:连接 ADC/DAC 转换器、SPI 接口的 WiFi / 蓝牙模块,实现高速数据传输,适配物联网设备的通信需求。
六、SPI 与常见串行通信协议对比
为了更清晰地理解 SPI 协议的定位,将其与嵌入式领域常用的 I2C、UART 协议进行对比,明确各自的适配场景:
对比维度SPII2CUART
通信方式同步全双工同步半双工异步全双工
信号线数量4 线(标准),可简化为 3 线2 线(SDA + SCL)2 线(TX + RX),可单工
传输速率高速(数百 MHz)中速( 1MHz,高速模式可达 5MHz)低速(数十 kbps)
主从架构一主多从(需多 SS 线)一主多从(地址寻址)点对点 / 多机(需额外控制)
错误检测无原生机制,需软件补充有应答机制,支持 CRC 校验支持奇偶校验,可自定义校验
传输距离短(≤1 米)中(≤10 米)中长(可通过电平转换延长)
适配场景板级高速数据交互多从设备低速互联远距离异步数据传输
七、SPI 通信常见问题与排查技巧
(一)常见问题
数据传输错误:这是常见的问题,大多是由于主从设备时序配置不一致(CPOL/CPHA 不匹配)、时钟频率过高导致信号失真、SS/CS 线中途抖动(未保持稳定)或布线干扰引起的。
无数据反馈:可能是 SS/CS 线未正确拉低(未选通从设备)、MISO/MOSI 线接线反接、从设备未上电或未进入 SPI 模式、主设备时钟未启动导致的。
多从设备通信冲突:由于未释放前一个从设备(SS/CS 线未拉高)就选通新从设备,或多个从设备 SS/CS 线同时拉低,导致 MISO 总线冲突。
(二)排查技巧
时序排查:使用示波器观测 SCLK、MOSI、MISO、SS/CS 线的波形,确认时序参数(CPOL/CPHA)与从设备要求一致,时钟频率未超过从设备耐受值。
硬件排查:检查接线是否正确(避免 MISO/MOSI 反接)、从设备供电是否正常、SS/CS 线是否稳定(无抖动),减少布线长度,避免与强干扰线路并行。
软件排查:确认主从设备数据帧长度、数据传输顺序(MSB/LSB)配置一致,添加软件校验逻辑(如 CRC)验证数据完整性,排查 SS/CS 线控制时序(传输前后正确拉低 / 拉高)。
简化测试:降低时钟频率(如降至 100kHz)、采用单字节传输、仅连接单个从设备,逐步排查问题,排除高速传输和多从设备的干扰。