SPI 通信协议介绍

关键字 :SPI
串行外设接口(SPI)是一种用于短距离通信的双工同步串行通信接口规格,主要用于嵌入式系统。SPI 通信协议使用四个通信引脚以及一个电源和接地引脚。通常存在相互通信的“主”设备和“从”设备。 “主设备”将使用其从设备选择 (SS) 通信线路,选择其“从设备”之一,以向“从设备”指示它将与其通信。

SPI通讯波形

SPI 通信过程介绍

       串行外设接口SPI是一种用于短距离通信的双工同步串行通信接口规格,主要用于嵌入式系统。它通常用于与闪存、传感器、实时时钟 (RTC)、模数转换器等进行通信。 SPI 还可以支持多个从设备,但需要添加额外的从设备选择 (SS) 信号。

       SPI 通信协议使用四个通信引脚以及一个电源和接地引脚。通常存在相互通信的“主”设备和“从”设备。 “主设备”将使用其从设备选择 (SS) 通信线路,选择其“从设备”之一,以向“从设备”指示它将与其通信。然后主机和从机将同时在 MOSI(Master Out Slave In)和 MISO(Master In Slave Out)数据线上相互通信。在发送实际数据之前,主机和从机都相互发送一位,以确保 SPI 正常工作。数据可以从最高有效位 (MSB) 或最低有效位 (LSB) 发送。

       要启动通信,主设备必须将片选 (CS) 线置于低电压状态,并在整个通信期间保持该低电压状态。主设备和从设备都会相互发送一个位,以使 SPI 通信正常工作。然后可以在两个设备之间一次一位地同时传输数据。微控制器平台控制数据传输的时间。

       通常,SPI 协议在串行时钟 (SCK) 信号的下降沿传输一位数据。数据必须在串行时钟 (SCK) 的下降沿之前放在数据线上。串行时钟 (SCK) 线在“下降”到低电压状态之前(即下降沿之前)也必须处于高电压状态。这可以通过使用微控制器,在将时钟信号变为低电压状态之前,改变数据线的电压状态完成。


       改变数据线上的位值(电压)和脉冲串行时钟(SCK)线的周期将继续,直到所有需要的位都被传输。片选 (CS) 线将进入高电压状态。然后,微控制器知道通信已经完成并准备另一个任务。

通讯时序图

SPI 的四种工作模式
由时钟极性和时钟相位相互组合,得出SPI四种工作模式如下:
模式0:CPOL= 0,CPHA=0。SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换
模式1:CPOL= 0,CPHA=1。SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换
模式2:CPOL= 1,CPHA=0。SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换
模式3:CPOL= 1,CPHA=1。SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换

        SPI数据交换介绍:SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 “发送者(Transmitter)” 或者 “接收者(Receiver)”. 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了.

  一个 Slave 设备要想能够接收到 Master 发过来的控制信号, 必须在此之前能够被 Master 设备进行访问 (Access). 所以, Master 设备必须首先通过 SS/CS pin 对 Slave 设备进行片选, 把想要访问的 Slave 设备选上.

  在数据传输的过程中, 每次接收到的数据必须在下一次数据传输之前被采样. 如果之前接收到的数据没有被读取, 那么这些已经接收完成的数据将有可能会被丢弃, 导致 SPI 物理模块最终失效. 因此, 在程序中一般都会在 SPI 传输完数据后, 去读取 SPI 设备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的.

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论