SPI协议

SPI通信简介

SPI作为通用通信协议在许多不同设备中使用。例如,SD卡模块,RFID卡读取器模块和2.4 GHz无线发送器/接收器均使用SPI与微控制器通信。 SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。

SPI的一个独特优势是可以无中断传输数据。可以在连续流中发送或接收任意数量的位。使用I2C和UART,数据以数据包的形式发送,限制为特定位数。开始和停止条件定义了每个数据包的开始和结束,因此数据在传输过程中被中断。 

通过SPI通信的设备处于主从关系。主机是控制设备(通常是微控制器),而从机(通常是传感器,显示器或存储芯片)从主机获取指令。SPI的最简单配置是一个主设备+一个从设备的系统,但是一个主设备可以控制多个从设备。

MOSI (Master Output/Slave Input) – 主设备向从设备发送数据的信号线

MISO (Master Input/Slave Output) – 从设备向主设备发送数据的信号线

SCLK (Clock) – 时钟信号线用于通讯同步。该信号由主机产生,其支持的最高通讯速率为fpclk/2,即所挂载总线速率的一半。如SPI2挂载在APB1总线上,则其最高速率为36MHz / 2 = 18MHz。类似木桶效应,两个设备之间通讯时,通讯速率受限于较低速的设备。

SS/CS (Slave Select/Chip Select) – 主设备选择要向其发送数据的从设备的片选信号线(NSS:即片选信号线,用于选择通讯的从设备,也可用CS表示。每个从设备都有一条独立的NSS信号线,主机通过将某个设备的NSS线置低电平来选择与之通讯的从设备。所以SPI通讯以NSS线电平置低为起始信号,以NSS线电平被拉高为停止信号

如上图,编号1和6即为起始和停止信号的发生区域。NSS电平由高变低,则产生起始信号;NSS电平由低变高,则产生停止信号。从机检测到自己的NSS线电平被置低,则开始与主机进行通讯反之,检测到NSS电平被拉高,则停止通讯。

使用的信号线4
最大传输速度最高可达10Mbps
同步/异步同步
串行/并行串行
最大主设备数1
最大从设备数理论上无上限*

*实际上,从站的数量受到系统负载电容的限制,这降低了主机在电压电平之间准确切换的能力。

数据有效性

MOSI和MISO线在SCK的每个时钟周期传输一位数据,开发者可以自行设置MSB或LSB先行,不过需要保证两个通讯设备都使用同样的协定。从上图看到,在SCK的上升沿和下降沿时进行触发和采样。

SPI有四种通讯模式,在SCK上升沿触发,下降沿采样只是其中一种模式。四种模式的主要区别便是总线空闲时SCK的状态及数据采样时刻。这涉及到“时钟极性CPOL”和“时钟相位CPHA”,由CPOL和CPHA的组合而产生了四种的通讯模式。

CPOL、CPHA

  • CPOL:即在没有数据传输时,时钟的空闲状态的电平。
  • CPHA:即数据的采样时刻。

图16-2

上图中CPHA=0时候,主器件是在NSS信号有效后,立即输出bit1,尽管此时SCLK信号还没有效。从器件bit1的输出时刻是在SCLK信号有效以前,比SCLK的有效早半个周期,其bit1的输出时刻与NSS信号没有关系。

SPI_CR1寄存器的CPOL和CPHA位组合配置成四种时序关系,即四种通讯模式。

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。 SPI主模块和与之通信的外设时钟相位和极性应该一致。

如图16-2所示,如果CPOL被清0,则SCK在空闲状态保持低电平,反之被置1则保持高电平;如果CPHA位被清0,则在SCK每个时钟周期的第1个边沿(奇数边沿)进行数据位采样,反之被置1则在SCK每个时钟周期的第2个边沿(偶数边沿)采样

如下表所示的四种SPI通讯模式。

有一点需要注意的是,主机和从机需要工作在相同的模式下才能正常通讯。

SPI如何工作

时钟

时钟信号将主设备的数据比特输出同步到从设备的比特采样。每个时钟周期传输一比特数据,因此数据传输的速度取决于时钟信号的频率。由于主机配置并生成时钟信号,因此SPI通信始终由主机启动。

 SPI的时钟产生:

任何在设备间共享时钟信号的通信协议都称为同步通信。SPI是一种同步通信协议。还有一些异步方法不使用时钟信号。例如,在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。

可以使用时钟极性和时钟相位的属性来修改SPI中的时钟信号。这两个属性共同定义何时输出比特以及何时对其进行采样。主机可以设置时钟极性,以允许在时钟周期的上升沿或下降沿输出和采样比特。可以设置时钟相位,以便在时钟周期的第一个沿或第二个沿进行输出和采样,而不管它是上升还是下降。

选择从设备

主设备可以通过将从设备的CS / SS线设置为低电压电平来选择要与之通信的从设备。在空闲,即非传输状态下,从设备选择线保持在高电压电平。主设备上可能有多个CS / SS引脚,以允许多个从设备并行连接。如果仅存在一个CS / SS引脚,则可以通过菊花链将多个从设备连接到主设备。

多个从设备

可以将SPI设置为与单个主设备和单个从设备一起运行,并且可以与由单个主设备控制的多个从设备一起设置。有两种方法可以将多个从设备连接到主设备。如果主设备有多个从设备选择引脚,则从设备可以这样并行连接:

如果只有一个从设备选择引脚可用,则可以通过以下方式菊花链的方式连接从设备:

菊花链数据流向为:

MOSI和MISO

主设备通过MOSI线以串行方式将数据发送到从设备。从设备通过MOSI引脚接收主设备发送的数据。从主设备发送到从设备的数据通常先发送最高有效位。

从设备也可以通过MISO线以串行方式将数据发送回主设备。从从设备发送回主设备的数据通常先发送最低有效位。

SPI数据传输步骤

  1. 主设备输出时钟信号:

  2. 主设备将SS / CS引脚切换到低电压状态,从而激活从设备:

  3. 主设备使用MOSI信号线每次将1比特数据发送到从设备。从设备读取接收到的数据比特:

  4. 如果需要响应,则从设备使用MISO信号线每次将1比特数据返回给主设备。主设备读取接收到的数据比特:

SPI总线的优点与缺点

使用SPI总线有一些优点和缺点,如果要在不同的通信协议之间进行选择,则应根据项目要求来判断何时使用SPI总线: 

优点

  • 无起始位和停止位,因此数据位可以连续传输而不会被中断

  • 没有像I2C这样复杂的从设备寻址系统

  • 数据传输速率比I2C更高(几乎快两倍)

  • 分离的MISO和MOSI信号线,因此可以同时发送和接收数据

缺点

  • 使用四根信号线(I2C和UART使用两根信号线)

  • 无法确认是否已成功接收数据(I2C拥有此功能)

  • 没有任何形式的错误检查,如UART中的奇偶校验位

  • 只允许一个主设备

参考链接:收藏 | 电子通信协议之SPI通信协议篇 (qq.com)

SPI总线协议及SPI时序图详解 - Ady Lee - 博客园 (cnblogs.com)

SPI协议(上)——基础介绍 - 知乎 (zhihu.com)

(39条消息) 数字ic设计——SPI_spi设计_桐桐花的博客-CSDN博客

Basics of the SPI Communication Protocol (circuitbasics.com)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值