SPI工作原理以及核心
目录
SPI总线学习笔记
一、核心特性概览
-
全称:串行外设接口(Serial Peripheral Interface)
-
类型:串行、同步、全双工通信总线
-
拓扑:主从模式(一主多从),不支持多主
-
信号线:通常4根线
-
SCLK:串行时钟(由主设备产生)
-
MOSI:主设备输出,从设备输入(Master Out Slave In)
-
MISO:主设备输入,从设备输出(Master In Slave Out)
-
CS/SS:片选信号(一般低电平有效),用于选择从设备
(是否有效得看从机手册,cs上面有个杠是低电平有效)
-
-
数据传输:高位(MSB)先发送,无需应答机制
二、关键工作机制
-
全双工实现原理
SPI的硬件本质是一个环形移位寄存器。在同一个时钟脉冲下,主设备通过MOSI线将数据移入从设备,同时从设备通过MISO线将数据移入主设备。因此,发送和接收在每一个时钟周期内同时完成。 -
多从机连接方式
-
独立片选(最常用):每个从设备独占一根CS线。主设备通过拉低特定从设备的CS来选中它,其他从设备保持高电平并断开与总线的连接。

-
菊花链:将设备的MISO连接到下一级设备的MOSI,所有设备共享一根CS线,但通信延迟会增加。
-
-
CS信号的额外作用
除了物理上选中设备,CS信号还定义了帧同步边界。一次完整通信以CS下降沿开始,以CS上升沿结束,告知从设备一次事务的起止,确保帧同步。
三、核心配置:时钟极性与相位
这是SPI最核心的配置,主从设备必须严格匹配。它们共同定义了4种工作模式。
-
CPOL(时钟极性):决定总线空闲时SCLK的电平。
-
CPOL = 0:空闲为低电平
-
CPOL = 1:空闲为高电平
-
-
CPHA(时钟相位):决定数据采样发生在第几个时钟边沿。
-
CPHA = 0:在第一个时钟边沿采样数据
-
CPHA = 1:在第二个时钟边沿采样数据
-
| 模式 | CPOL | CPHA | 空闲电平 | 数据采样边沿 |
|---|---|---|---|---|
| 0 | 0 | 0 | 低 | 上升沿 |
| 1 | 0 | 1 | 低 | 下降沿 |
| 2 | 1 | 0 | 高 | 下降沿 |
| 3 | 1 | 1 | 高 | 上升沿 |

主从设备模式不匹配会怎样?
数据错位或完全错误。接收方在错误的时钟边沿采样,导致数据整体偏移一位或多位。这是SPI调试最常见的问题
四、SPI vs. I2C 对比
| 特性 | SPI | I2C |
|---|---|---|
| 引脚数 | 至少4根线(多从需额外CS) | 2根线(SDA, SCL) |
| 通信方式 | 全双工 | 半双工 |
| 速度 | 快,可达几十MHz | 慢,典型100k-3.4MHz |
| 应答机制 | 无,主设备无法确认接收 | 有,每个字节后跟随ACK |
| 多主模式 | 不支持 | 支持 |
| 协议复杂度 | 简单,无帧格式 | 较复杂,有完整帧格式 |
| 距离 | 极短(板内通信) | 稍长,总线电容限制 |
| 总线负载 | 推挽输出,无需上拉电阻 | 开漏输出,需要上拉电阻 |
SPI需要上拉电阻吗?
通常不需要。SPI是推挽输出,能主动驱动高低电平。但CS线有时会加一个上拉电阻,防止主设备未初始化时CS浮空导致误触发
详细IIC原理点此处
https://blog.csdn.net/2301_81636338/article/details/157872688?spm=1011.2124.3001.6209
五、 SPI vs UART
| 维度 | SPI | UART |
|---|---|---|
| 同步/异步 | 同步(有时钟线) | 异步(无时钟线) |
| 引脚数 | 4根 | 2根(RX/TX) |
| 通信方式 | 全双工 | 全双工 |
| 拓扑 | 一主多从 | 点对点 |
| 起始/停止位 | 无(由CS界定帧) | 有 |
详细UART原理点此处
https://blog.csdn.net/2301_81636338/article/details/157764671?spm=1011.2124.3001.6209
六、关键要点与注意事项
-
为什么通信距离很短?
SPI使用单端、高频率信号传输,没有复杂的阻抗匹配和差分抗干扰设计。长距离传输时,线路电容、电感会严重畸变信号,导致通信失败。它主要用于板内器件间的通信。 -
常见调试问题:数据错位
最常见的原因是主从设备的SPI模式(CPOL/CPHA)不匹配,导致采样边沿错误。其次是时钟频率过高(信号完整性差)或接线接触不良。 -
典型应用场景
适合对速度要求高的外设:NOR Flash、SD卡、LCD/OLED屏幕、高速ADC/DAC、以太网控制器(如W5500)、无线模块(如LoRa、NRF24L01)等。 -
UART、I2C、SPI 对比速览
-
UART:串行、异步、全双工。点对点,2根线。先发低位,有起始/停止位。
-
I2C:串行、同步、半双工。多主多从,2根线(需上拉)。先发高位,有应答,有起始/结束条件。
-
SPI:串行、同步、全双工。一主多从,4根线。先发高位,无应答,无起始/结束条件(由CS界定),极性和相位可配置。
-
更多推荐



所有评论(0)