代码改变世界

SPI协议

2022-01-28 22:12  jym蒟蒻  阅读(258)  评论(0编辑  收藏  举报

SPI((Serial Peripheral Interface):串行外围设备接口,是一种高速全双工的通信总线。被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率较高的场合。

在这里插入图片描述

SPI 通讯使用3条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,片选线为NSS。

NSS(Slave Select)):从设备选择信号线,常称为片选信号线。有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、 MOSI 及 MISO 同时并联到相同的 SPI 总线上,每个从设备都有独立的一条 NSS 信号线,从设备的片选信号线独占主机的一个引脚,即有多少个从设备,主机就有多少条片选信号线。SPI 协议中没有设备地址,它使用 NSS 信号线来寻址,当主机要选择从设备时,把该从设备的 NSS 信号线设置为低电平,该从设备即被选中,接着主机开始与被选中的从设备进行 SPI 通讯。SPI 通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号。

SCK (Serial Clock):时钟信号线,用于通讯数据同步。由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样。

MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。

MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。


SPI 协议:定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。

NSS、SCK、MOSI 信号都由主机控制产生,而 MISO 的信号由从机产生,主机通过该信号线读取从机的数据。MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。

SPI 一共有四种通讯模式,它们的主要区别是总线空闲时 SCK 的时钟状态以及数据采样时刻。

时钟极性 CPOL:指SPI通讯设备处于空闲状态时,SCK 信号线的电平信号(即 SPI 通讯开始前、NSS 线为高电平时 SCK 的状态)。CPOL=0 时, SCK 在空闲状态时为低电平, CPOL=1 时,则相反。

时钟相位 CPHA :指数据的采样的时刻,当 CPHA=0 时,MOSI 或 MISO 数据线上的信号将会在 SCK 时钟线的“奇数边沿”被采样。当 CPHA=1 时,数据线在 SCK 的“偶数边沿”采样。

CPHA=0 时的 SPI 通讯模式图如下,采样时刻都是在 SCK 的奇数边沿。当 CPOL=0 的时候,时钟的奇数边沿是上升沿,而 CPOL=1 的时候,时钟的奇数边沿是下降沿。所以 SPI 的采样时刻不是由上升/下降沿决定的。

数据的有效性:MOSI 和 MISO 数据线的有效信号在 SCK 的奇数边沿保持不变,数据信号将在 SCK 奇数边沿时被采样,在非采样时刻,MOSI 和 MISO 的有效信号才发生切换。

在这里插入图片描述

当 CPHA=1 时,不受 CPOL 的影响,数据信号在 SCK 的偶数边沿被采样。

通讯的起始信号:下图左下角NSS 信号线由高变低,是 SPI 通讯的起始信号。当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。

通讯的停止信号:下图右下角NSS信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

数据传输和同步:SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。MOSI 及 MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。

在这里插入图片描述

在这里插入图片描述