精解SPI协议

SPI通信协议

1、简介

​ SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据。

​ SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主模块选择一个从模块进行同步通信,从而完成数据的交换。

​ 提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。

(1)SPI通信至少需要4根线,单向传递时3根线

MISO( Master Input Slave Output):主设备用作数据输入,从设备用作数据输出;
MOSI(Master Output Slave Input):主设备用作数据输出,从设备用作数据输入;
SCLK(Serial Clock):时钟信号,由主设备产生
CS/SS(Chip Select/Slave Select):从设备使能信号,由主设备控制,一主多从时,CS/SS是从芯片是否被主芯片选中的控制信号,只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。

(2)以下为一主多从

​ 每个从机都需要一条单独的SS线。

​ 如果要和特定的从机进行通讯,可以将相应的NSS信号线拉低,并保持其他SS信号线的状态为高电平;如果同时将两个SS信号线拉低,则可能会出现乱码,因为从机可能都试图在同一条MISO线上传输数据,最终导致接收数据乱码。

1)多片选方式

在这里插入图片描述

2)菊花链方式

在这里插入图片描述

2、通信原理(通信流程大概可以分为两部分:第一在一个时钟边沿把主从移位寄存器中的一个bit放到通信线上;第二在一个时钟边沿把通信线上的一个bit数据存入主从移位寄存器上)所以一个时钟周期可以完成一个bit数据的传送

​ SPI主从设备均有一个八位串行移位寄存器,主设备通过向它的串行寄存器写入一个字节来发起一次传输。

3、通信流程

SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。即你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

(1)主设备发起信号,将CS/SS拉低,启动通信。

(2)主设备通过发送时钟信号(上升沿或下降沿启动),来告诉从设备进行数据操作,它将立即读取数据线上的信号,这样就得到了一位数据(1bit)。

(3)主机将要发送的数据写到发送数据缓存区,缓存区经过移位寄存器,串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。(这里可以理解为在一个时钟周期内,一个边沿把移位寄存器的值搬出到通信线上,另一个边沿把通信线上的1bit数据搬入移位寄存器里面)

(4)从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。

在这里插入图片描述

4、设备时钟特点

SPI设备时钟主要特点有:时钟速率、时钟极性、时钟相位

(1)时钟速率

​ SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。

​ 从理论上讲,只要实际可行,时钟速率就可以是你想要的任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。

(2)时钟极性

​ 根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据。

​ CKP可以配置为1或0。即你可以根据需要将时钟的默认状态(IDLE)设置为高或低。

CKP = 0:时钟空闲IDLE为低电平 0;

CKP = 1:时钟空闲IDLE为高电平1。

​ 而极性反转可以通过简单的逻辑逆变器实现。

(3)时钟相位

​ 根据硬件制造商的不同,时钟相位通常写为CKE或CPHA。顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;

CKE = 0:在时钟信号SCK的第一个跳变沿采样;(这里的采样可以理解为从线上取数放入移位寄存器中)

CKE = 1:在时钟信号SCK的第二个跳变沿采样。

5、四种SPI通信操作模式

​ 根据SPI的时钟极性和时钟相位特性可以设置4种不同的SPI通信操作模式。

​ 四种模式的区别是定义了在时钟脉冲的哪条边沿转换输出信号(即从移位寄存器搬出数据到通信线),哪条边沿采样输入信号(即从通信线上搬入数据到移位寄存器),还有时钟脉冲的稳定电平值(即时钟信号无效时是高还是低)

img

img
在这里插入图片描述

在这里插入图片描述

1)模式一(下面的数据采样可以理解为从线上取数据放入移位寄存器,数据发送可以理解为从移位寄存器取出数据放到线上,边沿指的是上升沿和下降沿)

​ CKP=0,CKE =0:当空闲态时,SCK处于低电平,数据采样是在第1个边沿**(注意这个时候已经有数据移出到线上了)**,也就是SCK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。

2)模式二

​ CKP=0,CKE=1:当空闲态时,SCK处于低电平,数据发送是在第2个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

3)模式三

​ CKP=1,CKE=0:当空闲态时,SCK处于高电平,数据采集是在第1个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

4)模式四

​ CKP=1,CKE=1:当空闲态时,SCK处于高电平,数据发送是在第2个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

6、SPI优缺点

(1)优点

1)无起始位和停止位,因此数据位可以连续传输而不会被中断;
2)没有像I2C这样复杂的从设备寻址系统;
3)数据传输速率比I2C更高(几乎快两倍);
4)分离的MISO和MOSI信号线,因此可以同时发送和接收数据;
5)极其灵活的数据传输,不限于8位,它可以是任意大小的字;
6)非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

(2)缺点

1)使用四根信号线(I2C和UART使用两根信号线);
2)无法确认是否已成功接收数据(I2C拥有此功能);
3)没有任何形式的错误检查,如UART中的奇偶校验位;
只允许一个主设备;
4)没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
5)没有定义硬件级别的错误检查协议;
6)与RS-232和CAN总线相比,只能支持非常短的距离;

参考链接:https://blog.csdn.net/m0_38106923/article/details/124364676

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值