【车载开发系列】SPI总线通信技术
【车载开发系列】SPI总线通信技术
- 【车载开发系列】SPI总线通信技术
- 一. 什么是SPI
- 二. 应用范围
- 三. 协议特点
- 1)传输速率
- 2)主要功能
- 3)拓扑结构
- 4)接口配置
- 四. SPI总线原理
- 五. 信号列表
- 六. SPI传输时序
- 1)模式0
- 2)模式1
- 3)模式2
- 4)模式3
- 七. 数据交换
一. 什么是SPI
SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的,主从结构的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
二. 应用范围
SPI协议主要作为主控芯片去配置外围芯片的接口协议。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
它在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
★PCB(Printed Circuit Board)印刷电路板
三. 协议特点
SPI,是一种高速的,全双工,同步的,主从结构的通信总线。需要说明的是,SPI只有主模式和从模式之分,没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。
1)传输速率
SPI总线的传输速率需要自定义,没有具体的规定,一般为:400KHz~10MHz
2)主要功能
实现MCU与各种外接设备连接(芯片与芯片之间的连接),以串行的方式进行数据交换(串并转换)。
3)拓扑结构
一个SPI Master可以通过共享数据线的方式可以连接多个SPI Slave(一主多从);
4)接口配置
作为芯片与芯片之间互连的接口,通过配置寄存器实现主控芯片(SPI Master)对外围芯片(SPI Slave)的配置;
四. SPI总线原理
SPI是一个环形总线结构,遵循主从结构,SPI协议适用于一主多从的工作场景。 SPI通讯需要使用4条线:3条总线和1条片选线,物理连接如下:
时序其实很简单,主要是在SCLK的控制下,两个双向移位寄存器进行数据交换。
五. 信号列表
SS、SCK、MOSI信号均由主设备产生,MISO信号由从设备产生。在SS为低电平的前提下,MOSI和MISO信号才有效,在每个时钟周期MOSI和MISO传输一位数据。
信号名 | 含义 | 描述 |
---|---|---|
SCK | Serial Clock时钟信号线 | Master设备往 Slave设备传输时钟信号, 同步控制数据交换的时机以及速率 |
MOSI | Master Ouput Slave | Input、主设备输出从设备输入数据线 |
MISO | Master Input Slave Ouput、主设备输入从设备输出数据线 | 在Master上面也被称为 Rx-Channel, 作为数据的入口, 主要用于SPI从设备接收数据 |
SS | Slave Select、从机选择线,低电平有效 | Master设备片选Slave设备, 使被选中的 Slave设备能够被Master设备所访问 |
六. SPI传输时序
SPI设备在进行通信的过程中, Master设备和 Slave设备之间会产生一个数据链路回环(Data Loop)。
SPI接口有四种不同的数据传输时序,取决于时钟极性(CPOL)和时钟相位(CPHA)的组合。
No | 含义 | 描述 |
---|---|---|
1 | 相位(CPHA) | 表示时钟线空闲时的状态 |
2 | 极性(CPOL) | 表示设备从数据线采样的时刻 |
_ | CPOL=0 | CPOL=1 |
---|---|---|
CPHA=0 | 时钟线在空闲时为低电平;在每个周期的第一个时钟沿采样 | 时钟线在空闲时为高电平;在每个周期的第一个时钟沿采样 |
CPHA=1 | 时钟线在空闲时为低电平;在每个周期的第二个时钟沿采样 | 时钟线在空闲时为高电平;在每个周期的第二个时钟沿采样 |
1)模式0
CPOL= 0,CPHA=0。SCK串行时钟线空闲时为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换
2)模式1
CPOL= 0,CPHA=1。SCK串行时钟线空闲时为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换
3)模式2
CPOL= 1,CPHA=0。SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换
4)模式3
CPOL= 1,CPHA=1。SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换
其中比较常用的模式是模式0和模式3。为了更清晰的描述SPI总线的时序,下面展现了模式0下的SPI时序图:
上图清晰的表明在模式0下,在空闲状态下,SCK串行时钟线为低电平,当SS被主机拉低以后,数据传输开始,数据线MOSI和MISO的数据切换(Toggling)发生在时钟的下降沿(上图的黑色虚线),而数据线MOSI和MISO的数据的采样(Sampling)发生在数据的正中间(上图中的灰色实线)。
七. 数据交换
SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 “发送者(Transmitter)” 或者 “接收者(Receiver)”. 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了。
一个 Slave 设备要想能够接收到 Master 发过来的控制信号, 必须在此之前能够被 Master 设备进行访问 (Access)。所以, Master 设备必须首先通过 SS/CS pin 对 Slave 设备进行片选, 把想要访问的 Slave 设备选上。
在数据传输的过程中, 每次接收到的数据必须在下一次数据传输之前被采样. 如果之前接收到的数据没有被读取, 那么这些已经接收完成的数据将有可能会被丢弃, 导致 SPI 物理模块最终失效. 因此, 在程序中一般都会在 SPI 传输完数据后, 去读取 SPI 设备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的