SPI ,全称:Serial Peripheral Interface,即串行外围设备接口。是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI通讯设备之间的常用连接方式如下图:
SPI通讯使用3条总线和一个片选线,3条总线分别为SCK、MOSI、MISO,片选线为SS,它们的作用介绍如下:
SS(Slave Select):从设备选择信号线,常称为片选信号线,也称为NSS、CS。当有多个SPI从设备与SPI主机相连时,设备的其它信号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同只使用这3条总线;而每个从设备都有独立的这一条NSS信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。I2C协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而SPI协议中没有设备地址,它使用NSS信号线来寻址,当主机要选择从设备时,把该从设备的NSS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以NSS线置低电平为开始信号,以NSS线被拉高作为结束信号。
SCK(Serial Clock):时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如STM32的SPI时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。
MOSI(Master Output, Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即在这条线上数据的方向为主机到从机。
MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。
SPI基本通讯过程:
这是一个主机的通讯时序。NSS、SCK、MOSI信号都由主机控制产生,而 MISO 的信号由从机产生,主机通过该信号线读取从机的数据。MOSI与 MISO的信号只在 NSS 为低电平的时候才有效,在 SCK的每个时钟周期 MOSI和 MISO传输一位数据。各信号分解如下:
通讯的起始和停止信号
在上图中的①标号处,NSS 信号线由高变低,是 SPI通讯的起始信号。NSS是每个从机各自独占的信号线,当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。在图中的⑥标号处,NSS信号由低变高,是 SPI通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。
数据有效性
SPI使用 MOSI及 MISO信号线来传输数据,使用 SCK信号线进行数据同步。MOSI及 MISO数据线在 SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时,MSB先行或 LSB先行并没有作硬性规定,但要保证两个 SPI通讯设备之间使用同样的协定。
观察图中的②③④⑤标号处,MOSI及 MISO的数据在 SCK的上升沿期间变化输出,在 SCK的下降沿时被采样。即在 SCK的下降沿时刻,MOSI及 MISO的数据有效,高电平时表示数据“1”,为低电平时表示数据“0”。在其它时刻,数据无效,MOSI及 MISO为下一次表示数据做准备。
SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。
时钟信号的相位和极性:
SPIx_CR1寄存器的CPOL和CPHA位能够组合成四种可能的时序关系。CPOL:时钟极性选择,为0时SPI总线空闲为低电平,为1时SPI总线空闲为高电平。CPHA:时钟相位选择,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样。根据CPOL和CPHA的不同组合可以分为四种工作方式,工作方式如下:
[size=0.83em]20190817081810498.png (115.15 KB, 下载次数: 3) 下载附件 [color=rgb(153, 153, 153) !important]2021-11-19 23:23 上传
当CPHA=0、CPOL=1时,MISO引脚上的数据在第一个时钟沿跳变之前已经上线了,而为了保证正确传输,MOSI引脚的最高位必须与时钟的第一个边沿同步,在SPI传输过程中,首先将数据上线,然后在同步时钟信号的下降沿时,SPI的接收方捕捉位信号,在时钟信号的一个周期结束时(上升沿),下一位数据信号上线,再重复上述过程,直到一个字节的8位信号传输结束。当CPHA=0、CPOL=0时,与前者唯一不同之处只是在同步时钟信号的上升沿时捕捉位信号,下降沿时下一位数据上线。
当CPHA=1、CPOL=1时,MISO引脚和MOSI引脚上的数据的最高位必须与时钟的第一个边沿同步,在SPI传输过程中,在同步时钟信号周期开始时(下降沿)数据上线,然后在同步时钟信号的上升沿时,SPI的接收方捕捉位信号,在时钟信号的一个周期结束时(下降沿),下一位数据信号上线,再重复上述过程,直到一个字节的8位信号传输结束。当CPHA=1、CPOL=0时,与前者唯一不同之处只是在同步时钟信号的下降沿时捕捉位信号,上升沿时下一位数据上线。
|