物理层
SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,
片选线为。
各个通信线的作用
SCK
- 时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样, - 如 STM32 的 SPI 时钟频率最大为 pclk/2,两个设备之间通讯时,通讯速率受限于低速设备。 |
---|
MOSI
|
- Master Output, Slave Input:主设备输出/从设备输入引脚。
- 主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,
- 即这条线上数据的方向为主机到从机。
|
|
MOSO
|
- (Master Input,,Slave Output):主设备输入/从设备输出引脚。
- 主机从这条信号线 读入数据,从机的数据由这条信号线输出到主机,
- 即在这条线上数据的方向为从机到主机。
|
|
片选线
|
- 从设备选择信号线,常称为片选信号线,也称为 NSS、CS,以下用 NSS 表示。
- 当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、 MOSI 及 MISO 同时并联到相同的 SPI 总线上,即无论有多少个从设备,都共同只使用 这 3 条总线;
- 而每个从设备都有独立的这一条 NSS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。
|
速度的影响因素
- SPI的最大时钟频率是CPU处理SPI数据的能力
- 输出端驱动能力(PCB所允许的最大信号传输速率)
协议层
通讯的起始和停止信号
- 起始信号
- 在上图的标号①处,NSS 信号线由高变低,是 SPI 通讯的起始信号。
- NSS 是每个从机各自独占的信号线,当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。
- 停止信号
- 在图中的标号⑥处,NSS 信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。
数据有效性
SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。
MOSI 及 MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。
数据传输时,MSB先行或LSB先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同样的协定,一般都会采用图中的 MSB 先行模式。
在其它时刻,数据无效,MOSI 及 MISO 为下一次表示数据做准备。
SPI 每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。
语雀内容
:::info
MOSI 及 MISO 的数据在,SCK 的上升沿期间变化输出
MOSI 及 MISO 的数据在,SCK 的下降沿时被采样
**
- 高电平时表示数据“1”
- 低电平时表示数据“0” :::
CPOL/CPHA 及通讯模式
SPI 一共有四种通讯模式,它们的主要区别是总线空闲时 SCK 的时钟状态以及数据采样时刻。
为方便说明,在此 引入“时钟极性 CPOL”和“时钟相位 CPHA”的概念。
时钟极性 CPOL
- 指 SPI 通讯设备处于空闲状态时,SCK 信号线的电平信号(即 SPI 通讯开始前、 NSS 线为高电平时 SCK 的状态)。
- CPOL=0 时, SCK 在空闲状态时为低电平,
- CPOL=1 时,则相反。
时钟相位 CPHA
- 指数据的采样的时刻,
- 当 CPHA=0 时,MOSI 或 MISO 数据线上的信号将会在 SCK 时钟线的“奇数边沿”被采样。
- 当 CPHA=1 时,数据线在 SCK 的“偶数 边沿”采样。
I2C与SPI的区别
:::info 寻址方式的不同 :::
I2C 协议中通过设备地址来寻址、 选中总线上的某个设备并与其进行通讯;
SPI 协议中没有设备地址,它使用 NSS 信号线来寻址,当主机要选择从设备时,把该从设备的 NSS 信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行 SPI 通讯。
SPI 通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号。
**