串行外设接口(SPI)是一种同步串行通信接口规范,主要用于嵌入式系统的短距离通信。 该接口由摩托罗拉公司在20世纪80年代中期开发,已成为事实上的标准。 典型的应用包括闪存,EEPROM,SD卡和液晶显示器等。

有时SPI被称为四线串行总线,与三线、二线和一线串行总线形成对比。 SPI可以被准确地描述为一个同步串行接口,但它与同步串行接口(SSI)协议不同,后者也是一个四线同步串行通信协议。 SSI协议采用差分信号,只提供一个单工通信通道。 于此相对的是,SPI是一个主机和多个从机的通信。

SPI设备之间使用全双工模式通信,是一个主机和一个或多个从机的主从模式。主机负责初始化帧,这个数据传输帧可以用于读与写两种操作,片选线路可以从多个从机选择一个来响应主机的请求。

接口定义

SPI总线规定了4个保留逻辑信号接口:

  • SCLK(Serial Clock):串行时钟,由主机发出
  • MOSI(Master Output, Slave Input):主机输出从机输入信号(数据由主机发出)
  • MISO(Master Input, Slave Output):主机输入从机输出信号(数据由从机发出)
  • SS(Slave Select):片选信号,由主机发出,一般是低电位有效

SPI总线的通信操作可以在单个主设备与一或多个从机之间进行。在只有单一从机的情况下,如果从机允许,可以固定为低电平。大多数从机具有三态逻辑的特性,当器件未被选中时MISO信号变为高阻抗(逻辑断开)。没有三态输出的器件不能与其他器件共享SPI总线段,但是可以使用外接的三态逻辑缓存来解决这个问题。

SPI通信有4种不同的模式,不同的从设备可能在出厂就是配置为某种模式,这是无法改变的;但我们的通信双方必须工作在同一模式下,所以我们可以通过对CPOL(时钟极性)和CPHA(时钟相位)的配置来设置我们可以通过对CPOL(时钟极性)和CPHA(时钟相位)的配置来设置我们的主设备的工作模式;CPOL是用来配置SCLK的电平的空闲态或者有效态时的电平,CPHA是用来配置数据采样是发生在上升沿还是下降沿。具体如下:

  • Mode0:CPOL=0,CPHA=0;空闲态时SCLK=0,数据在上升沿采样,在下降沿移位
  • Mode1:CPOL=0,CPHA=1;空闲态时SCLK=0,数据在下降沿采样,在上升沿移位
  • Mode2:CPOL=1,CPHA=0;空闲态时SCLK=1,数据在上升沿采样,在下降沿移位
  • Mode3:CPOL=1,CPHA=1;空闲态时SCLK=1,数据在下降沿采样,在上升沿移位
四种模式

数据传输限制

SPI数据传输速率主要受限与三点:

  1. SPI的最大时钟频率
  2. CPU处理SPI数据的能力
  3. 输出端驱动能力(PCB所允许的最大信号传输速率)

扩展

一、SPI设备内部详细结构如图2所示,主要组件包括状态寄存器、控制寄存器和数据寄存器,数据位移逻辑单元,波特率发生器,主从控制逻辑单元和端口控制逻辑单元。

SPI设备内部详细结构图

二、由于在SPI Flash的通信中,全双工并不常用,因此扩展了标准SPI中MOSI、MISO的用法,使其工作在半双工,用于加倍数据传输,这就形成了Dual SPI;在Dual SPI的基础上再增加两条信号线(SIO2、SIO3),可以在一个时钟内传输4bit数据,使传输速率再次加倍,就形成了Qual SPI。

参考

  1. 硬件设计:接口–SPI总线
  2. 序列周邊介面
最后修改日期: 2021-10-19