SPI通信

简介

SPI(Serial Peripheral Interface)是由美国摩托罗拉公司推出的一种同步串行传输规范,也是单片机外设芯片串行扩展接口,它支持高速、全双工、同步通信,没有定义速度限制,一般能达到10M/bps以上。SPI有主、从两种模式,一般由一个主模块和一个或多个从模块组成,主模块选择一个从模块进行同步通信,完成数据的交换。SPI接口的读写操作,都是由主设备发起,多从设备时,通过各自的片选信号进行管理。SPI接口至少需要4根线,单向传输时3根,分别为MISO(主设备数据输入,从设备数据输出)、MOSI(主设备数据输出,从设备数据输入)、SCLK(时钟,由主设备产生)、CS/SS(片选,由主设备控制)。

通信原理

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

SPI数据通信的流程可以分为以下几步:

1、主设备发起信号,将CS/SS拉低,从而启动SPI通信

2、主设备会通过发送时钟信号,来指示从设备进行写数据或者读数据操作(采集时机可以是时钟信号的上升沿(从低到高)或下降沿(从高到低),因为SPI有四种模式,下面会有详细讲解),从而立即读取数据线上的信号,这样就得到了一位数据(1bit)。

3、主机(Master)将要发送的数据写到发送数据缓存区(Menory),经过移位寄存器(缓存长度不一定,取决于单片机的配置),串行移位寄存器会通过MOSI信号线将字节一位一位的移出去传送给从机,与此同时,MISO接口也会接收到的数据经过移位寄存器一位一位的移到接收缓存区。

4、从机(Slave)也会将自己的串行移位寄存器(缓存长度也不一定,取决于单片机的配置)中的内容通过MISO信号线返回给主机。同时,它也会通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换了。

着重说明:SPI具有主模式和从模式之分,而不是读和写的概念,外设的写入和读取操作是同步进行的。若只进行写操作,主机只需忽略接收到的字节(虚拟数据);反之,若主机要读取从机的一个字节,则必须发送一个空字节来引发从机的传输。通俗地讲,你发送一个数据就一定会收到一个数据;你想要接收一个数据,也必须先发送一个数据。

SPI特性

设备选择

SPI是一种单主设备(Single Master)通信协议,只有一支主设备能发起通信。当主设备想要读取/写入从设备时,它会首先将从设备对应的SS线(SS是低电平有效)拉低。接着,主设备就会开始发送工作脉冲到时钟线上,在相应的脉冲时间内,主设备会通过MOSI发送信号以实现“写”,同时也会通过MISO采样以实现“读”操作。通俗的说,主设备选择想要通信的从设备只需要拉低相应从设备的CS/SS线就可以了

设备时钟

SPI时钟特点主要包括:时钟速率、时钟极性和时钟相位三方面。

时钟速率

SPI总线上的主设备必须在开始通信时进行配置并产生相应的时钟信号。从理论上讲,只要可行,时钟速率就可以达到你想要的任何程度,当然,这个速率受限于每个系统能够提供的最大系统时钟频率以及SPI传输的最大速率

时钟极性

根据不同的硬件制造商的命名规则,时钟极性通常被称为CKP或CPOL。时钟极性和相位共同决定了读取数据的方式,比如在信号上升沿读取数据,还是在信号下降沿读取数据。CKP可以被设置为1或0,这意味着你可以根据需要将时钟的默认状态(IDLE)设置为高或低电平。极性反转可以通过一个简单的逻辑逆变器来实现。你必须参考设备的数据手册来正确设置CKP和CKE。

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

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

时钟相位

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

CKE = 0:在时钟信号SCK的第一个跳变沿采样;

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

四种模式

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

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

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

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

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

如图mode1:CKP=0,时钟初始为低电平,CKE=1,第二个跳变沿采样

 

多从机模式

有两种方式可以将多台设备连接到主设备:多片选择和菊花链。多片选择是指将多台设备连接到一个主设备,通过多片选择的方式来实现。而菊花链则是将多台设备连接起来,形成一个菊花链,然后将主设备连接到菊花链的一端,从而实现了多台设备的连接。这两种方式都可以实现将多台设备连接到主设备的目的,但是它们之间又有着很大的不同,因此在选择连接方式时,需要根据实际需要来进行选择。

多片选择

通常,每个从机都需要一条单独的SS线。

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

连接方式如下:

 

菊花链

在数字通信领域,菊花链是一种以串行方式将设备信号(包括总线信号和中断信号)依次传递到下一个设备,并在传递过程中一直循环直到数据被传输到目标设备的方式。

菊花链的缺点是一旦数据链路中的某设备发生故障,优先级较低的设备就无法获得服务;距离主机越远的从机,优先级越低,需要安排好从机优先级,设置总线检测器,短路超时从机。

连接方式如下:

 

SPI优缺点

优点

无起始位和停止位,数据可以连续传输不会被打断;

从设备选择简单;

数据传输速率比I2C更高(已知的有的器件SPI已达到50Mbps);

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

极其灵活的数据传输,不限于8位,它可以是任意大小的字;

非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

缺点

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

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

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

只允许一个主设备;

没有硬件从机应答信号(主机可能在不知情的情况下无处发送);

没有定义硬件级别的错误检查协议;

与RS-232和CAN总线相比,只能支持非常短的距离;

说明:侵权联系删除文章。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值