SPI协议详解

概述

SPI(Serial Peripheral Interface)总线是一种高速、串行、全双工通信总线,由Motorola公司设计并推广。

优点是支持全双工通信,传输速率快,SCLK时钟频率最高可以达到50MHz左右。

缺点是没有流控制机制,不像I2C有应答机制,也不像UART有数据帧校验机制。

引脚说明

SPI总线以主从方式工作,支持一主一从、一主多从模式,拥有四个信号线:

信号 全称 说明
SCLK Serial Clock

时钟信号,由主设备产生并控制

需要注意的是,SCLK只有在数据传输的过程中产生时钟周期,不进行数据传输时保持高电平或者低电平。

MOSI Master Output Slave Input 主设备数据输出,从设备数据输入
MISO Master Input Slave Output 主设备数据输入,从设备数据输出
SS/NSS/CS Chip Select 从设备片选使能信号,由主设备控制。在一主多从的模式下,每一个从设备都需要独占一个CS信号,也就是说有多少个从设备就需要多少个CS片选信号。

一主一从模式如下:

一主多从模式如下:(每个SPI设备由一根独立的CS片选信号进行片选)

SPI模式

根据CPOL(时钟极性)和CPHA(时钟相位)的组合区分,SPI总线时序有四种模式。SPI通信的双方必须同时工作在其中一种模式下,往往是主控制器匹配SPI设备的工作模式。

SPI Mode CPOL CPHA
0 0 0
1 0 1
2 1 0
3 1 1

其中SPI 0和SPI 3两种模式最常用。

 

CPOL用来控制SCLK信号的Active状态是高电平还是低电平。

0 - SCLK高电平为Active状态

1 - SCLK低电平为Active状态

 

CPHA用来控制MOSI和MISO在第几个SCLK边沿进行数据采样。

0 - 第一个SCLK边沿采样,第二个边沿发送

1 - 第一个SCLK边沿发送,第二个边沿采样

 

 

总结:

SPI总线协议本身并不复杂,这就意味着复杂性在SPI设备驱动的软件编码上,具体体现在:

1)SPI总线协议没有数据校验机制,因此,必须根据SPI设备支持的SCLK时钟频率范围设置SPI时钟频率,实际应用中,可能会碰到示波器量时序信号没问题,但是SPI设备不回复数据或者回复数据错误的情况,大概率就是因为时钟频率不满足SPI设备要求导致的;

2)SPI控制器的发送是直接将数据写入一个移位寄存器中,该移位寄存器跟随SCLK时钟发送数据;SPI控制器的接收与发送同步进行,也就是说发送数据的同时,也在接收数据,而接收数据是写入一个缓存寄存器中,如果缓存寄存器的值不及时读取的话,后续接收的数据会直接丢弃而不是覆盖到该缓存寄存器中,因此,每一次写数据之后,一定要读取数据,即使读取的数据无意义。

3)SPI设备往往不会主动发送数据,而是被动应答;而SPI总线只有在主机发送数据的时候才会产生SCLK时钟周期信号,因此,往往读数据时,需要主机往SPI总线上发送任意数据;

4)SPI设备往往需要特定的时序进行操作,而不能像RAM一样随机读写,比如MMC/SDCard;

posted on 2020-02-23 11:49  者旨於陽  阅读(1723)  评论(0编辑  收藏  举报

导航