SPI通信协议详解

简介

与 I2C 一样, SPI 也是很常用的通信协议( Motorola 公司推出),且二者都支持“一主多从”通信,很多常见的模块(芯片)都支持了该通信协议。相比 I2C 接口, SPI 接口的通信速度更快( I2C 最高 400KHz,而 SPI 最高可达几十MHz),且支持全双工通信。

想了解I2C通信的可以看我之前写的这篇帖子:IIC(I2C)通信协议详解

1 电气连接

SPI通信的接线比I2C稍微复杂些,所以很需要一张图来说明。在SPI通信中,一般需要4根线。准确来说是3+N。N是从机的数量。
SPI通信协议详解_第1张图片
电气接线作用如下:

  • CS/SS, Slave Select/Chip Select,这个是片选信号线,用于选择需要进行通信的从设备。 I2C 主机是通过发送从机设备地址来选择需要进行通信的从机设备的, 而SPI 主机不需要发送从机设备,直接将相应的从机设备片选信号拉低即可。所以有几个从机参与了SPI通信,就需要几根CS/SS信号线。
  • SCK, Serial Clock,串行时钟,为通信提供时钟信号。
  • MOSI/SDO, Master Out Slave In/Serial Data Output,简称主出从入信号线,这根数据线只能用于主机向从机发送数据,也就是所谓的主机输出,从机输入。
  • MISO/SDI, Master In Slave Out/Serial Data Input,主入从出信号线,与MOSI相反,这根数据线只能从机向主机发送数据,也就是所谓的主机输入,从机输出。

记忆这4种接线的时候,只需要记住英文全称就可以反推出其简称。

2 通信过程

2.1 工作模式

SPI 有四种工作模式,通过串行时钟极性(CPOL)和相位(CPHA)来实现(CPOL和CPHA的值可通过寄存器来设置)。

  • CPOL=0,串行时钟空闲状态为电平。
  • CPOL=1,串行时钟空闲状态为电平。
  • CPHA=0,串行时钟第个跳变沿(上升沿或下降沿)采集数据。
  • CPHA=1,串行时钟第个跳变沿(上升沿或下降沿)采集数据。

四种工作模式下的数据交换如下图所示:
SPI通信协议详解_第2张图片

2.2 通信时序

SPI的通信线增多了,通信也变得简单了起来,以常见的CPOL = 0和CPHA = 0为例,其通信时序如下所示。
SPI通信协议详解_第3张图片
首先通过将CS/SS线上的电平拉低,来实现片选,选择了具体的从机(芯片)后,便可发送时钟信号,根据时钟周期进行通信了,且可同时收发数据,十分高效。

还有一个好处,由于片选线的存在,避免了多个从机通信时候的总线冲突,因此不需要I2C那样外接上拉电阻

当然SPI通信也是有缺点的,

  1. SPI既没有UART通信那样的奇偶校验,也没有I2C那样的应答机制,所以并不能保证通信数据的准确性。
  2. 当从机较多的时候,会出现较多的通信线,这对于硬件设计师来说并不是一个好消息。在布线的过程中,不仅仅需要考虑到线路的交叉,还要考虑到信号的相互影响等等因素。

你可能感兴趣的:(单片机,嵌入式硬件)