通信方式(二)——SPI

1、什么是SPI

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一
种同步串行接口技术,是一种高速的,全双工,同步的通信总线。在越来越多的芯片集成了这种通信协议,常见的有EEPROM、FLASH、AD转换器等。它的优点是支持全双工通信、通信简单、数据传输速率块、协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;缺点是相比IIC多两根线;没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。

2、硬件连线

SPI 总线包含 4 条线,分别为SS 、SCLK、MOSI、MISO。
(1)SS/CS(SlaveSelect):片选信号线,当有多个 SPI 设备与 MCU 相连时,每个设备的这个片选信号线是与 MCU 单独的引脚相连的,而其他的 SCK、MOSI、MISO 线则为多个设备并联到相同的 SPI 总线上,低电平有效。
(2)SCLK (Serial Clock):时钟信号线,由主通信设备产生,不同的设备支持的时钟频率不一样,如 STM32 的 SPI 时钟频率最大为 f PCLK /2。
(3)MOSI (Master Output, Slave Input):主设备输出 / 从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入数据,即这条线上数据的方向为主机到从机。
(4)MISO(Master Input, Slave Output):主设备输入 / 从设备输出引脚。主机从这条信号线读入数据,从机的数据则由这条信号线输出,即在这条线上数据的方向为从机到主机。
注意:主机和从机不可相互转换。
单个主设备多个从设备的连接方式如下图:
通信方式(二)——SPI_第1张图片

3、数据传输的四种状态

SPI因为用片选的高低电平来选择从机,所以不需要进行寻址。
SPI总线在传输数据的同时也传输了时钟信号,所以SPI协议是一种同步(Synchronous)传输协议,我们用时钟的起始来代表数据传输的开始,用时钟的停止来表示数据传输的结束。据此可分为两种模式,时钟上升沿有效为一种,下降沿有效为另一种;此外,根据SPI设备何时交换数据以及何时对接收数据进行采样,又分为两种模式(奇数边沿采集与偶数边沿采集)。
我们通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式,来保证两个设备之间的传输是同步的。
CPOL,即Clock Polarity(对立的),决定时钟空闲时的电平为高或低。
1 = 时钟低电平时有效,空闲时为高
0 = 时钟高电平时有效,空闲时为低
CPHA,即Clock Phase(阶段;时期),定义SPI数据传输的两种基本模式。
1 = 数据采样发生在时钟(SCK)偶数(2,4,6,…,16)边沿(包括上下边沿)
0 = 数据采样发生在时钟(SCK)奇数(1,3,5,…,15)边沿(包括上下边沿)
四种模式的时序图如下:
通信方式(二)——SPI_第2张图片模式0:CPOL= 0,CPHA=0。SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换
模式1:CPOL= 0,CPHA=1。SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换
模式2:CPOL= 1,CPHA=0。SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换
模式3:CPOL= 1,CPHA=1。SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换

4、SPI架构及特性

(1)单次传输可选择为 8 或 16 位。
(2)波特率预分频系数(最大为 fPCLK/2) 。
(3)时钟极性(CPOL)和相位(CPHA)可编程设置 。
(4)数据顺序的传输顺序可进行编程选择,MSB 在前或 LSB 在前。
(5)可触发中断的专用发送和接收标志。
(6)可以使用 DMA 进行数据传输操作。

STM32的SPI架构图如下:

通信方式(二)——SPI_第3张图片(1)MISO 数据线接收到的信号经移位寄存器处理后把数据转移到接收缓冲区,然后这个数据就可以由我们的软件从接收缓冲区读出了。
当要发送数据时,我们把数据写入发送缓冲区,硬件将会把它用移位寄存器处理后输出到 MOSI 数据线。
(2)SCK 的时钟信号则由波特率发生器产生,我们可以通过波特率控制位(BR)来控制它输出的波特率。
(3)控制寄存器 CR1 掌管着主控制电路,STM32 的 SPI 模块的协议设置(时钟极性、相位等)就是由它来制定的。而控制寄存器 CR2 则用于设置各种中断使能。
(4)最后为 NSS 引脚,这个引脚扮演着 SPI 协议中的SS 片选信号线的角色,如果我们把 NSS 引脚配置为硬件自动控制,SPI 模块能够自动判别它能否成为 SPI 的主机,或自动进入 SPI 从机模式。但实际上我们用得更多的是由软件控制某些 GPIO 引脚单独作为SS信号,这个 GPIO 引脚可以随便选择。

你可能感兴趣的:(通信方式(二)——SPI)