一、介绍
SPI总线(Serial Peripheral Interface,串行外设接口)是一种高速全双工同步串行通信总线,核心通过“主从架构+同步时钟”实现设备间数据传输,因结构简单、速率高,广泛用于MCU与传感器、存储芯片、显示模块等外设的短距通信。
二、核心架构:
主从控制,4线基础
SPI总线采用“一主多从”模式,所有设备共享时钟和数据线,通过片选信号区分不同从设备,基础通信需4根信号线(部分场景可简化),各线功能如下:
- SCLK(Serial Clock,串行时钟):由主设备(Master) 产生,用于同步主从设备的数据传输节奏,是“同步通信”的核心;
- MOSI(Master Out, Slave In,主出从入):主设备向从设备发送数据的单向信号线;
- MISO(Master In, Slave Out,主入从出):从设备向主设备返回数据的单向信号线;
- SS/CS(Slave Select/Chip Select,从设备选择):主设备通过拉低某一从设备的SS引脚,单独选中该设备(未被选中的从设备SS引脚为高电平,不响应总线通信),是“多从设备区分”的关键。
三、通信原理:同步时钟下的“位同步传输”
SPI的核心是“时钟同步数据”,主设备通过SCLK控制每一位数据的传输时机,主从设备在时钟的特定边沿(上升沿/下降沿)采样或发送数据,整个过程可分为3个关键步骤:
1. 选中从设备:主设备拉低目标从设备的SS引脚
主设备要与某一从设备通信时,首先将该从设备的SS引脚拉低(低电平有效,部分设备支持高电平有效,需硬件定义),此时其他从设备的SS引脚保持高电平,处于“休眠状态”,不接收总线上的SCLK和MOSI信号。
2. 同步传输:时钟边沿触发数据读写
主设备产生SCLK时钟信号,主从设备在时钟的预设边沿(由“时钟极性(CPOL)”和“时钟相位(CPHA)”定义)同步完成数据传输:
- 主设备在SCLK的某一边沿(如上升沿)将MOSI线的“1位数据”输出,从设备在同一边沿读取该数据;
- 同时,从设备在SCLK的另一边沿(如下降沿)将MISO线的“1位数据”输出,主设备在同一边沿读取该数据;
- 每一个SCLK周期传输1位数据,8个SCLK周期即可完成1字节(8位)数据的“全双工传输”(主→从、从→主同时进行)。
3. 结束通信:主设备拉高SS引脚
数据传输完成后,主设备将该从设备的SS引脚拉高,从设备退出通信状态,总线释放,可准备与下一个从设备通信。
四、关键参数:
CPOL与CPHA决定通信时序
SPI的通信时序由“时钟极性(CPOL)”和“时钟相位(CPHA)”两个参数定义,共4种组合(即4种“SPI模式”),主从设备必须使用相同的模式才能正常通信:
- CPOL(时钟极性):定义SCLK在“空闲状态”(无数据传输时)的电平:
- CPOL=0:空闲时SCLK为低电平;
- CPOL=1:空闲时SCLK为高电平。
- CPHA(时钟相位):定义“数据采样”发生在SCLK的第几个边沿:
- CPHA=0:数据在SCLK的“第一个边沿”(CPOL=0时为上升沿,CPOL=1时为下降沿)采样;
- CPHA=1:数据在SCLK的“第二个边沿”(CPOL=0时为下降沿,CPOL=1时为上升沿)采样。
五、核心特性:优势与局限
1. 优势:高速、灵活、全双工
- 高速传输:无起始位/停止位(区别于UART),仅需时钟同步,速率可达几Mbps到几十Mbps(取决于硬件支持);
- 全双工:MOSI和MISO独立,主从可同时收发数据,适合需要双向高速通信的场景(如SD卡、SPI Flash);
- 多从扩展:通过增加SS引脚,主设备可连接多个从设备,硬件结构简单(无需地址线,仅需1根SS对应1个从设备)。
2. 局限:短距、无硬件校验
- 传输距离短:因采用单端信号(无差分抗干扰设计),抗干扰能力弱,通常传输距离不超过10米,仅适合板内或板间短距通信;
- 无硬件校验:总线本身不自带奇偶校验或CRC校验,数据可靠性需通过软件协议(如添加校验位)保障;
- 主从依赖:从设备无法主动发起通信,必须由主设备控制,不适合需要从设备主动上报数据的场景(如传感器实时报警)。
六、总结
SPI总线的本质是“主设备主导的同步串行通信”,通过SCLK实现数据同步,用SS区分从设备,凭借高速全双工的优势成为短距外设通信的主流选择。实际应用中,需重点匹配主从设备的SS电平极性和SPI模式(CPOL/CPHA),同时通过软件校验弥补硬件无校验的不足,确保数据传输可靠。