SPI协议详解
SPI协议简介
SPI 全称是 Serial Perripheral Interface,也就是串行外围设备接口。 SPI 是 Motorola 公司推出的一种同步串行接口技术,是一种高速、全双工的同步通信总线, SPI 时钟频率相比 I2C 要高很多,最高可以工作在上百 MHz。 SPI 以主从方式工作,通常是有一个主设备和一个或多个从设备,一般 SPI 需要4 根线,但是也可以使用三根线(单向传输)。该通信方式主要广泛地使用在ADC、LCD等设备与MCU间,适用于对通信速率要求较高的场合。
一、SPI物理层

- CS/SS(Slave Select/Chip Select),常称为片选信号线。当多个SPI从设备与SPI主机相连时,设备的其他信号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同使用这3条总线;但值得注意的是:每个从设备都有独立的一条NSS信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。区别于IIC协议通过设备地址进行寻址,从而完成与总线上某个设备进行通信方式的不同,SPI协议中没有设备地址,而是使用片选信号线来寻址,当主机要选择从设备时,通常情况下把该设备的片选信号线设置为低电平,从而使得该设备被选中,即片选有效,这样主机便和从设备之间建立通信。
- SCK(Serial Clock),时钟信号线,用于通信数据同步,通常由主机产生,但不同设备支持的通信速率不一致,而且值得注意的是:两设备之间通信时,通信速率受限于低速设备。
- MOSI/SDO(Master Out Slave In/Serial Data Output),主设备输出/从设备输入引脚,这根数据线只能用于主机向从机发送数据。
- MISO/SDI(Master In Slave Out/Serial Data Input),主设备输入/从设备输出引脚,这根数据线只能用户从机向主机发送数据。
二、SPI协议层
2.1 SPI基本通信过程

上图为SPI的主机通讯时序,NSS、SCK和MOSI信号都由主机控制,而MISO的信号由从机产生,主机通过该信号线读取从机的数据。MOSI与MISO的信号只在NSS为低电平的时候才有效,在SCK的每个时钟周期MOSI和MISO传输一位数据。
2.2 通信的起始和终止信号
- 起始信号:NSS信号由高变低,即为SPI通讯的起始信号;
- 终止信号:NSS信号由低变高,即为SPI通讯的终止信号;
2.3 数据有效性
SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。MOSI 及 MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的【全双工】。数据传输时,MSB先行或 LSB 先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同样的协定,一般都会采用MSB 先行模式。
观察上图中的标号2-5处,可知MOSI及MISO的数据在在 SCK 的上升沿期间变化输出【触发】,在 SCK 的下降沿时被采样。即在 SCK 的下降沿时刻,MOSI 及 MISO 的数据有效,高电平时表示数据“1”,为低电平时表示数据“0”。在其它时刻,数据无效,MOSI 及 MISO 为下一次表示数据做准备。
SPI每次数据传输可以8位或16位为单位,每次传输的单位数不受限制。
2.4 CPOL/CPHA及通信模式
SPI的四种通讯模式,主要区别是总线空闲时,SCK的时钟状态

本文详细解读SPI协议,包括物理层、基本通信流程、时钟极性和相位控制、编程实现以及实践应用实例,帮助理解SPI作为高速串行接口的工作原理和常见应用场景。
6996

被折叠的 条评论
为什么被折叠?



