目录
1. SPI通信原理
SPI(Serial Peripheral Interface,串行外设接口)属于串行全双工同步通信方式,常在嵌入式系统中用作MCU和外设(Flash、ADC等)之间进行数据交互的一种方式,通信速度可达25MHz以上,其硬件连线如Fig.1所示,SPI有四根线,MOSI(Master Output Slave Input)为主设备输出从设备输入线,MISO(Master Input Slave Output)为主设备输入从设备输出线,SCLK为同步时钟线,由主设备发起,CS(Chip Select)为从设备片选信号线。如表1所示,SPI因CPOL(时钟极性)和CPHA(相位极性)的不同组合有四种传输模式。
如图Fig.2,以模式0为例说明,CPOL=0,CPHA=0,SCLK空闲为低电平,从低电平变为高电平,在第一个时钟的上升沿采样数据。实际使用中,主从机选择同一种SPI传输模式,主机拉低片选信号来选中从机,主机发送SCLK时钟信号,同时通过MOSI发送通信数据,从机同时通过MISO信号线接收数据,完成传输后拉高片选信号。
2. SPI控制器
如图Fig.3示,SPI控制器整体由4部分组成:
1)外接引脚:MOSI、MISO、SCLK是特定的引脚,片选线NSS可用任意GPIO通过软件控制。
2)数据收发模块:发送数据时,总线上的数据写入发送缓冲区,再进入移位寄存器从MOSI线输出,接收数据时,MISO的数据进入移位寄存器,通过接收缓冲区到达总线数据上。
3)时钟:SPI的时钟是通过配置SPI_CR1寄存器的BR[2:0]实现对PCLK分频得到的,最高为PCLK时钟的一半。
4)主控逻辑:CR1和CR2这两个控制寄存器可以设置SPI的工作模式、外设时钟频率、DMA功能等,通过SR状态寄存器可获得当前SPI的工作状态。
3.