SPI接口在微控制器和外围设备芯片间传输应用广泛,且较为晦涩,所以整理分享,供大家学习参考。本文从属于Mcal系列。
SPI(Serial Peripheral interface)是Motorola公司推出的串行外围设备接口,是一种高速的,全双工,同步的通信总线,在芯片管脚有四根线:SCLK,MISO,MOSI,CS。
(文末附1有单工、半双工和全双工的区别阐述;当然,文末还有其他福利。)
SPI总线主要应用在EEPROM,FLASH,实时时钟,AD转换器,以及数字信号处理器和数字信号解码器之间。SPI在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局节省了空间,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
MOSI:主设备数据输出,从设备数据输入。
SCLK:时钟信号,由主设备产生。
CS:从设备片选信号,由主设备控制。当从设备的片选被拉低的时候,才能从SPI总线上获取数据信息。(注意:SS或CS都表示片选,SS: Slave Select,CS:Chip Select)
1 SPI 特点
SPI通信采用主从模式,主要特点如下:
-
可同时发出和接收串行数据;
-
可以当作主机或从机工作;
-
主机发送时钟频率可编程控制;
-
有发送结束中断标志;
-
写冲突保护;
-
总线竞争保护;
SPI的优点是支持高速、同步、全双工、非差分、总线式通信。缺点是并没有明确的流控制,也没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。
SPI硬件上有一个SPI_DR寄存器和两个缓冲器(发送缓冲器和接收缓冲器),主模式:SPI_DR会先从发送缓冲器读出数据,然后通过MOSI引脚一位一位地将数据发出去,在发送的过程中,SPI_DR的数据会左移(如果是高位先发送),并且会从MISO引脚读入数据填补SPI_DR左移后的空缺。传输数据后,SPI_DR再把数据并行写入接收缓冲寄存器。
SPI主从设备两端都有一个移位寄存器,数据在移位寄存器上通过逐位移动来实现同步双工通信,在主机发送数据的同时也会收到从机发来的数据。需要注意的是传输过程是通过主机写入一个需要发送的数据开始。
如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。发送结束可以设置中断。
SPI通信的从设备在出厂时被配置成某种模式,从设备无法变更。通信双方的通信模式要一致才能正常通信,我们只能配置主设备的通信模式。
CPHA:clock phase,时钟相位。
时钟相位( CPHA):
在同步接口中,肯定存在一个接口时钟,用来同步采样接口上的数据。CPHA就是用来定义数据采样在第几个边沿的,数据的采样时刻。1代表第二个边沿采样,为0代表第一个边沿采样。
SPI通信模式是通过CPOL和CPHA来控制主设备的通信模式。
通过配置极性和相位为0或1,可配置成为4种不同的传输时序:极性为0,时钟空闲为低电平,反之为高;相位为0,据在第一个时钟跳变沿被采集,为1的话在第二个跳变沿被采集。
如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样。
如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
时钟相位主要是在设置数据在什么时候改变和什么时候被采样。
在配置SPI模块时,SPI 主机和从设备时钟相位和极性应该一致。
CPOL=0,CPHA=0:
此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。
CPOL=0,CPHA=1:
此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
CPOL=1,CPHA=0:
此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
CPOL=1,CPHA=1:
此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。
数据帧格式:可软件设置MSB或LSB哪个在先(SPI_CR1寄存器中LSBFIRST位),也可设置输入输出数据帧是8位或者16位(SPI_CR1寄存器DFF位)。
需要注意的是,根据SPI被配置成主或者从模式,MIMO和MOSI引脚的功能会自动改变,实现发送和接收的切换。
附1:单工、半双工和全双工的区别
单工数据传输只支持数据在单一方向上传输,即同一时间只有一方能接受或发送信息,不能实现双向通信,如电视、广播。
半双工数据传输允许数据在两个方向上传输,但在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。在同一时间只可以有一方接受或发送信息,可以实现双向通信。如对讲机。
全双工数据通信允许数据同时在两个方向上传输,即全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信。如电话通信。