SPI简介
SPI(Serial Peripheral Interface) 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速的、全双工、同步的的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间, 要求通讯速率较高的场合。SPI接口在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省了空间,提供方便。
SPI全双工的物理链接

SPI接口通讯一般使用 3 条总线及片选线,3 条总线分别为 SCK(时钟信号)、MOSI(主设备输出/从设备输入引脚)、MISO(主设备输入/从设备输出引脚),及CS(从设备片选信号)。
MISO: 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
MOSI: 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
SCLK:串行时钟信号,用于通讯数据同步,由主设备产生。
CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
SPI内部结构简明图

数据写到移位寄存器,通过移位寄存器向外传输。[主设备]每向从设备发送一位数据,同时接收到[从设备]一位数据。
常见的几种连线
1.全双工设计的接线

2.半双工设计的接线

3.单工设计的接线

SPI工作原理
SPI是通信协议,意味着总线中的只有一支中心设备能发起通信。当SPI主设备想读/写[从设备]时,它首先拉低[从设备]对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,[主设备]把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。
工作过程
拉低对应SS信号线,表示与该设备进行通信
主机通过发送SCLK时钟信号,来告诉从机写数据或者读数据,这里的SCLK时钟信号可以高电平有效也可以低电平有效,SPI组成有四种模式。(时钟的极性与相位)
主机(Master)将要发送的数据写到发送数据缓存区,缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
从机(Slave)也将自己的串行移位寄存器(0~7)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。
外设的读写操作同步完成,只进行写操作,则忽略读操作;主机只进行从机的读操作,则主机须发送一个空字节给从机引发传输。
片选引脚管理(NSS)
①软件模式:
可以设置SPI_CR1寄存器的SSM位来使能这种模式,在这种模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动。
②硬件模式:
第一种情况:NSS输出使能,当STM32工作为SPI模式的时,NSS输出已经通过 SPI_CR2寄存器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的 NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从的SPI设备。
第二种情况:NSS输出被关闭:允许操作于多主环境。
时钟信号的极性和相位
SPI_CR寄存器的CPOL位(时钟极性)和CPHA位(时钟相位)
SPI通信有能够组合成4种可能的时序关系,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下:

时钟极性(CPOL)定义了时钟空闲状态电平,时钟相位(CPHA)定义数据的采集时间。
CPOL=1,表示当空闲状态SCLK为高电平
CPOL=0,表示当空闲状态SCLK为低电平
CPHA=1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样,在第1个边沿发送数据
CPHA=0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样,在第2个边沿发送数据
主从状态下SPI引脚设置

SPI使用的注意事项
- 主从设备传输的最高波特率,来定预分频的大小
- 确定使用SPI四种模式中的哪种(时钟的极性与相位)
- 闲置状态下,SCK、MOSI、NSS引脚的电平
893

被折叠的 条评论
为什么被折叠?



