SPI接口简介
SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI接口一般使用4条线通信:
MISO主设备数据输入,从设备数据输出。
MOSI主设备数据输出,从设备数据输入。
SCLK时钟信号,由主设备产生。
CS从设备片选信号,由主设备控制。
SPI工作原理总结
①硬件上为4根线。
②主机和从机都有一一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
③串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。
④外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。
SPI特征
3线全双工同步传输
8或16位传输帧格式选择
●主或从操作
●支持多主模式
●8个主模式波特 率预分频系数(最大为fpcux/2)
●从模式频率(最大为fpcuw/2)
● 主模式和从模式的快速通信
●主模式和从模式下均可以由软件或硬件进行NSS管理:主从操作模式的动态改变
●可编程的时钟 极性和相位
可编程的数据顺序,MSB在前或LSB在前
●可触发中断的专用发送 和接收标志
( SPI总线忙状态标志
●支持可靠通信的硬件CRC
-在发送模式下, CRC值可以被作为最后一个字节发送
-在全双工模式中对接收到的最后 个字节自动进行CRC校验
可触发中断的主模式故障、过载以及CRC错误标志
● 支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求
从选择(NSS)脚管理
有2种NSS模式:
软件NSS模式:可以通过设置SPI CR1寄存器的SSM位来使能这种模式。在这种模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI CR1的SSI位来驱动硬件NSS模式,分两种情况: ;
NSS输出被使能:当STM32工作为主SPI, 并且NSS输出已经通过SPI _CR2寄存
器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从SPI设备。
当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主设备:如果它不能拉低NSS, 这意味着总线上有另外一个主设备在通信,这时将产生-一个硬件失败错误(Hard Fault)。
NSS输出被关闭:允许操作于多主环境。
时钟信号的相位和极性
SPI_ CR寄存器的CPOL和CPHA位, 能够组合成四种可能的时序关系。CPOL(时钟极性)位控制在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。如果CPOL被清’0’,SCK引脚在空闲状态保持低电平;如果CPOL被置’1’,SCK引脚在空闲状态保持高电平。如果CPHA(时钟相位)位被置’1’,SCK时钟的第二个边沿(CPOL位为0时就是下降沿,CPOL位为’1’时就是上升沿)进行数据位的采样,数据在第二个时钟边沿被锁存。如果CPHA位被清’0’,SCK时钟的第一边沿(CPOL位为’0’时就是 下降沿,CPOL位为’1’时就是上升沿)进行数据位采样,数据在第一个时钟边沿被锁存。
CPOL时钟极性和CPHA时钟相位的组合选择数据捕捉的时钟边沿。
数据帧格式
根据SPI_ CR1寄存器中的LSBFIRST位,输出数据位时可以MSB在先也可以LSB在先。
根据SPI_ _CR1寄存器的DFF位,每个数据帧可以是8位或是16位。所选择的数据帧格式对发送和/或接收都有效。
状态标志
应用程序通过3个状态标志可以完全监控SPI总线的状态。
发送缓冲器空闲标志(TXE)
此标志为1"时表明发送缓冲器为空,可以写下一个待发送的数据进入缓冲器中。当写入SPI _DR时,TXE标志被清除。
接收缓冲器非空(RXNE)
此标志为’1"时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清除此标志。
忙(Busy)标志
BSY标志由硬件设置与清除(写入此位无效果),此标志表明SPI通信层的状态。