关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

趣味SPI总线解析(一)

2020.10.05

什么是SPI?

SPI全称是串行外设接口(Serial Peripheral Interface),是由Motorola提出的一种全双工(全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A))同步串行通信接口,通信波特率可以高达5Mbps,但具体速度大小取决于SPI硬件。

SPI总线只需四条线就可以完成MCU与各种外围器件的通讯。

1)MOSI(SDI) – Master数据输出,Slave数据输入

2)MISO (SDO) – Master数据输入,Slave数据输出

3)SClK  – 时钟信号,由Master产生

4)/CS  – Slave使能信号,由Master控制。

wx_article_20181109183525_jVz4FH.jpg

Msater为主模式,Slave从模式。SPI通信就是采用这样的主从模式(Master-Slave)架构,一般为一个Master和多个Slave的应用模式。切记,谁为主,谁提供SCLK时钟信号。

wx_article_20181109183525_XCnmJs.jpg

在以上四根线中,CS是控制芯片是否被选中的,只有选信号为预先规定的使能信号时,对此芯片的操作才有效。这就允许主模式在同一总线上连接多个SPI设备成为可能。接下来再连接通讯的3根线就可以了。

SPI如何实现通讯

SPI也是串行通讯协议,是说数据是一位一位传输的。这是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。操作时序很简单,如下:

wx_article_20181109183526_UC5yWb.jpg

看见时序图了,就知道怎么通讯了。SPI接口在Master控制下产生的从器件使能信号和时钟信号,两个双向移位寄存器按位传输进行数据交换,传输数据高位在前,低位在后(MSB first)。在SCK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。

换个说法,SPI是一个环形总线结构,主要是在sck的控制下,两个双向移位寄存器进行数据交换。对于主机来说,上升沿发送、下降沿接收、高位先发送。

上升沿到来的时候,sdi上的电平将被发送到从设备的寄存器中。从M_Sbuff寄存器的7位,发送到S_Sbuff寄存器的0位;

wx_article_20181109183526_OwcqZW.jpg

下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。从S_Sbuff寄存器的7位,发送到M_Sbuff寄存器的0位;

一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的命令准备数据,主机在下一个8位时钟周期才把数据读回来。

SPI总线比IIC总线传输数据省事。之前用过的IIC通讯,又有起始位,又有停止位的。SPI比较豪爽,对于主机来说,有上升沿就写一位,有下降沿就读一位。因为这样,SPI能够不等8位数据都传完就停止。没有了主机发出的SCLK脉冲,就不再有数据交换了。需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是保持高电平要么是保持低电平。

SPI注意事项与实现

SPI总线有四种工作方式(SPI0, SPI1, SPI2, SPI3),其中使用的最为广泛的是SPI0和SPI3方式。

时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA 是用来配置数据采样是在第几个边沿:

CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时;

CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时;

CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿;

CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿。

wx_article_20181109183526_VlmjcP.jpg

如上图,乃SPI四种模式的时序图。


推荐
热点排行
一周推荐
关闭