SPI通信

摘要

目前不同设备间的通信方式主要分为串行通信和并行通信,其中串行通信又分为异步通信和同步通信。本文主要是分享SPI总线这种串行同步通信。

  1. 串行同步通信

计算机与外界的数据交换称为通信,通信分为并行通信和串行通信两种基本方式。

并行通信指各个数据位同时进行传送的数据通信方式,因此有多少个数据位,就需要多少根数据线。并行数据的特点是传送速度快、效率高,但成本高,通常只适合30m距离内的数据传送。

串行通信指各个数据按传送位顺序进行传输,最少只需要两个传输线即可完成。其传输速度慢、效率低,但传输距离远,而且可以使用现有的通信通道(如电话线、各种网络等),在集散控制系统等远距离通信中使用很广。

通信分类按时钟可分为异步通信和同步通信。串行通信按照串行数据的时钟控制方式分为异步通信和同步通信。

异步通信中的接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。这种传输通常是很小的分组,比如一个字符为一组,为这个组配备起始位和结束位。所以这种传输方式的效率是比较低的,毕竟额外加入了很多的辅助位作为负载,常用在低速的传输中。

同步通信中双方使用频率一致的时钟 ,它的分组相比异步则大得多,称为一个数据帧,通过独特的bit串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备,识别到前导码后马上要开始接收数据了。同步这种方式中因为分组很大,很长一段数据才会有额外的辅助位负载,所以效率更高,更加适合对速度要求高的传输,当然这种通信对时序的要求也更高。

而同时具有串行通信和同步通信特点的通信方式即为串行同步通信,其中目前主流的有SPII2CUSART

  1. SPI总线介绍
    1. SPI简介

SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

SPI是全双工通信,对SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps。

    1. SPI信号线

SPI接口一般使用四条信号线通信:SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。

MISO: 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。

MOSI: 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。

SCLK:串行时钟信号,由主设备产生。

CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

    1. SPI硬件连接方式

SPI通信在硬件设计上分为单主单从和一主多从模式。

单主单从模式只需要4线点对点连接即可,参考下图:

 

图1 单主单从模式

一主多从模式有以下两种方式来实现:

第一种方式:多NSS

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

具体连接方式如下图所示,这种连接方式也是我们常用的一主多从模式。

                                           图2 一主多从多NSS模式

第二种方式:菊花链

在数字通信世界中,在设备信号(总线信号或中断信号)以串行的方式从一 个设备依次传到下一个设备,不断循环直到数据到达目标设备的方式被称为菊花链。菊花链的最大缺点是因为是信号串行传输,所以一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了;另一方面,距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况。

具体的连接如下图所示;

图3 一主多从菊花链模式

其中加粗蓝线表示为数据的流向;所以最终的数据流向图可以表示为:

 

图4 数据流向图

SCK为时钟信号,8clks表示8个边沿信号;其中D为数据,X为无效数据。菊花链模式充分使用了SPI其移位寄存器的功能,整个链充当通信移位寄存器,每个从机在下一个时钟周期将输入数据复制到输出。

这种模式在我们公司几乎没有使用。

另外关于CS/SS引脚,在电路设计应用时建议在驱动端增加上拉4.7K电阻用于提供初始电平,提供SPI通信的稳定性。

    1. SPI通信实现

SPI是一主多从通信协议,这意味着总线中的只有一支中心设备能发起通信。当SPI主设备想读/写从设备时,它首先拉低从设备对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。

SPI主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。首先拉低对应SS信号线,表示与该设备进行通信,之后主机通过发送SCLK时钟信号,来告诉从机写数据或者读数据。

另外需要注意的是,SCLK时钟信号可能是低电平有效,也可能是高电平有效,因为SPI有四种不同模式,取决于CPOL(时钟极性)和CPHA(时钟相位),后面有具体介绍。

主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。

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

SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

而前面提到的SPI四种模式,简单地讲就是设置SCLK时钟电平和触发方式作为有效信号,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,主要是为了保证SPI主机能够和不同SPI设备在同一模式下进行工作。具体如下:

时钟极性(CPOL)定义了时钟空闲状态电平:

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

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

时钟相位(CPHA)定义数据的采集时间:

CPHA=0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。,在第2个边沿发送数据。

CPHA=1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。,在第1个边沿发送数据。

四种模式如下:

Mode0:CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。

Mode1:CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

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

Mode3:CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

主从设备必须使用相同的工作模式——SCLK、CPOL 和 CPHA,才能正常工作。如果有多个从设备,并且它们使用了不同的工作模式,那么主设备必须在读写不同从设备时需要重新修改对应从设备的模式。以上SPI总线协议的主要内容。

SPI就是如此简单,既规定最大传输速率,也没有地址分配,同时也没规定通信应答机制,甚至没有规定流控制规则。只要四根信号线连接正确,SPI工作模式相同,将CS/SS信号线拉低,即可以直接通信,一次一个字节的传输,读写数据同时操作。通信控制都是通过SPI设备自行实现,SPI甚至并不关心物理接口的电气特性,例如信号的标准电压等。这也反应了SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。

    1. SPI工作模式

SPI有三种模式,分别是运行模式、等待模式和停止模式。

运行模式(Run Mode):基本的操作模式,数据通信都在此模式下进行。

等待模式(Wait Mode):SPI工作在等待模式是一种可配置的低功耗模式,可以通过SPICR2寄存器的SPISWAI位进行控制。在等待模式下,如果SPISWAI位清0,SPI操作类似于运行模式。如果SPISWAI位置1,SPI进入低功耗状态,并且SPI时钟将关闭。如果SPI配置为主机,所有的传输将停止,但是会在CPU进入运行模式后重新开始。如果SPI配置为从机,会继续接收和传输一个字节,这样就保证从机与主机同步。

停止模式(Stop Mode):为了降低功耗,SPI在停止模式是不活跃的。如果SPI配置为主机,正在进行的传输会停止,但是在CPU进入运行模式后会重新开始。如果SPI配置为从机,会继续接受和发送一个字节,这样就保证了从机与主机同步。

    1. SPI优劣势

SPI通讯的优势:全双工串行通信;高速数据传输速率;简单的软件配置;极其灵活的数据传输,不限于8位,它可以是任意大小的字;非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

SPI的缺点:没有硬件从机应答信号(主机可能在不知情的情况下无处发送);通常仅支持一个主设备;需要更多的引脚(与I2C不同);没有定义硬件级别的错误检查协议;与RS-232和CAN总线相比,只能支持非常短的距离。

  1. SPI应用

我司目前使用到SPI通信的地方也比较多,常见的有MCU、DAC、ADC、步进电机驱动器、EEROM、ROM、数字电位器等等。

根据自身设计需要选择合适的元器件和主从模式,SPI通信硬件设计还是比较简单,需要注意的是SPI速率快但传输距离短,比较适合短距离通信,建议使用在板内通信,不太推荐使用在板间通信,实在必要的话建议距离尽可能短,有助于提升通信质量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cranx

感谢老铁打赏,666

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值