SPI协议:实现快速、可靠的数据传输

​​​​​​ 1、概述

SPI 是由摩托罗拉(Motorola)公司20世纪80年代中期开发的全双工同步串行总线,标准SPI有4根线,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选),如下图:

SPI是微处理控制单元(MCU)和外围设备之间进行通信的同步串行端口。主要应用在EEPROM、Flash、实时时钟(RTC)、数模转换器(ADC)、网络控制器、MCU、LCD屏、数字信号处理器(DSP)以及数字信号解码器之间。SPI典型系统框图如下图,接线方式:主设备MISO接从设备MISO,主设备MOSI接从设备MOSI,主从设备所有SCLK接在一起,主设备CS0-CSn接不同从设备CS。

SPI主要特点有:

  1. 全双工;
  2. 可以当作主机或从机工作;
  3. 提供频率可编程时钟;
  4. 发送结束中断标志;
  5. 写冲突保护,总线竞争保护等。

 2、工作方式

SPI时钟CPOL和相位CPHA:

  1. CPOL:时钟极性为0时SPI总线空闲为低电平,为1时SPI总线空闲为高电平。
  2. CPHA:时钟相位为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样。

如下图SPI总线时钟和相位不同延伸出四种工作方式,其中使用的最为广泛的是SPI0和SPI3方式 (实线表示): 

当CPHA=0、CPOL=0时SPI总线工作在方式1。MISO引脚上的数据在第一个SPSCK沿跳变之前已经上线了,而为了保证正确传输,MOSI引脚的MSB位必须与SPSCK的第一个边沿同步,在SPI传输过程中,首先将数据上线,然后在同步时钟信号的上升沿时,SPI的接收方捕捉位信号,在时钟信号的一个周期结束时(下降沿),下一位数据信号上线,再重复上述过程,直到一个字节的8位信号传输结束。 

当CPHA=0、CPOL=1时SPI总线工作在方式2。与前者唯一不同之处只是在同步时钟信号的下降沿时捕捉位信号,上升沿时下一位数据上线。 

当CPHA=1、CPOL=0时SPI总线工作在方式3。MISO引脚和MOSI引脚上的数据的MSB位必须与SPSCK的第一个边沿同步,在SPI传输过程中,在同步时钟信号周期开始时(上升沿)数据上线,然后在同步时钟信号的下降沿时,SPI的接收方捕捉位信号,在时钟信号的一个周期结束时(上升沿),下一位数据信号上线,再重复上述过程,直到一个字节的8位信号传输结束。 

 当CPHA=1、CPOL=1时SPI总线工作在方式4。与前者唯一不同之处只是在同步时钟信号的上升沿时捕捉位信号,下降沿时下一位数据上线。

 

3、SPI协议拓展

前面章节称为标准SPI协议(Standard SPI)或单线SPI协议(Single SPI),其中的单线是指该SPI协议中使用单根数据线 MOSI 进行发送数据,单根数据线 MISO 进行接收数据。为了适应更高速率的通讯需求,半导体厂商扩展SPI协议,主要发展出了 Dual/Quad/Octal SPI协议,加上标准SPI协议(Single SPI),这四种协议的主要区别是数据线的数量及通讯方式,见下表:

协议

数据线数量及功能

通讯方式

Single SPI(标准SPI)

1根发送,1根接收 全双工

Dual SPI(双线SPI)

收发共用2根数据线 半双工

Quad SPI(四线SPI)

收发共用4根数据线 半双工

Octal SPI(八线SPI)

收发共用8根数据线 半双工

注:上述四种模式也可以通过数据线数量来称呼为1/2/4/8线模式,有的芯片手册称标准SPI全双工模式为2线模式,半双工模式下只用一条数据线时称1线模式。

3.1、Dual SPI(2线)模式

对于SPI Flash,全双工并不常用,因此扩展了MOSI和MISO的用法,让它们工作在半双工,用以加倍数据传输,也就是Dual SPI模式。首先发送一个命令字节进入dual mode,这样MOSI变成SIO0(serial i/o 0),MISO变成SIO1(serial i/o 1),于是SCLK一次触发就能传输2bit数据,数据传输加倍。

 3.2、Quad SPI(4线)模式

与Dual SPI类似,也是针对SPI Flash,也是半双工,Quad SPI Flash增加了两根I/O线(SIO2,SIO3),目的是SCLK一次触发传输4bit数据。

 

  3.3、Octal SPI(8线)模式

在Quad SPI基础上继续扩展,增加四根I/O线(SIO4,SIO5,SIO6,SIO7),SCLK一次触发传输8bit数据,称为Octal SPI模式。

 3.4、SDR/DDR模式

SDR(STR)模式:Single Data Rate(Single Transfer Rate)默认情况下,SPI驱动 MOSI或SIO0、SIO1、SIO2、SIO3信号,或者通过 SCLK 的触发对信号进行采样时,一个时钟周期只执行一次,称为单倍数据速率模式(SDR或STR),下图是四线模式,SDR(STR)通信。

DDR(DTR)模式:Double Data Rate(Double Transfer Rate)当SPI在地址/交替字节/数据阶段驱动MOSI或SIO0、SIO1、SIO2、SIO3信号时,将在SCLK 的每个上升沿和下降沿发送1位;或者通过 SCLK 的触发对信号进行采样时,每个上升沿和下降沿将采样一次;也就是说一个时钟周期内发送2位或者接收2位数据,称为双倍数据速率模式(DDR或DTR),下图四线模式,DDR(DTR)通信,注意命令数据不支持。

 ​​​​​​​3.5、Motorola/TI模式

标准SPI协议称为Motorola模式,TI模式叫SSP协议,两者的用法有类似的地方,SPI可通过软件兼容支持。TI模式时序图如下:

Motorola模式下数据传输状态片选信号全程拉低,TI模式下片选信号是一个脉冲信号。

NSSP模式,启动该模式后,当NSS至少保持一个周期的高电平状态时,两个连续的数据帧传输间将生成NSS脉冲。该模式下,从器件可以锁存数据。NSSP脉冲模式旨在用于一个主器件-从器件对的应用。

对我们大多数的SPI应用,基本上都是传输开始把NSS拉低,传输完成再拉高。

对串行输入并行输出的移位寄存器,数据接口与时钟接口先发送串行数据到移位寄存器,然后NSSP脉冲发出,移位寄存器才会把数据发出去并重新锁存。

物联沃分享整理
物联沃-IOTWORD物联网 » SPI协议:实现快速、可靠的数据传输

发表评论