SPI
链接:SPI协议详解(图文并茂+超详细) - 知乎 (zhihu.com)
1、SPI协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线。
2、SPI特征
(1)三线全双工同步传输
(2)8位或16位传输帧格式选择
(3)主或从模式
(4)可编程的数据顺序,MSB在前或LSB在前
(5)可编程的时钟极性CPOL和相位CPHA
(6)主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变
(7)支持可靠通信的硬件CRC
在发送模式下,CRC值可以被作为最后一个字节发送;
在全双工模式中对接收到的最后一个字节自动进行CRC校验;
(8)可触发中断的主模式故障、过载以及CRC错误标志
(9)支持DMA功能的1字节发送和接收缓冲器:产生发送和接收请求
3、
4、SPI通过4个引脚与外部器件相连:
MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据;
MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据;
SCK:串口时钟,作为主设备的输出,从设备的输入;
NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。从设备的NSS引脚可以由主设备的一个标准I/O引脚来驱动。一旦被使能(SSOE位),NSS引脚也可以作为输出引脚,并在SPI处于主模式时拉低;此时,所有的SPI设备,如果它们的NSS引脚连接到主设备的NSS引脚,则会检测到低电平,如果它们被设置为NSS硬件模式,就会自动进入从设备状态。当配置为主设备、NSS配置为输入引脚(MSTR=1,SSOE=0)时,如果NSS被拉低,则这个SPI设备进入主模式失败状态:即MSTR位被自动清除,此设备进入从模式。
5、从选择(NSS)脚管理
有2中NSS模式:
软件NSS模式:可以通过设置SPI_CR1寄存器的SSM位来使能这种模式。在这种模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动。
硬件NSS模式:(1)NSS输出被使能:当STM32F10XXX工作为主SPI,并且NSS输出已经通过SPI_CR2寄存器的SSOE位使能,这时NSS引脚拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从SPI设备。
当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其他的设备它是主设备;如果它不能拉低NSS,这意味着总线上有另外一个主设备在通信,这时将产生一个硬件失败错误。
(2)NSS输出被关闭:允许操作于多主环境。
注:(1)这里的NSS引脚设置为输入
MOSI脚相互连接,MISO脚相互连接。这样,数据在主和从之间串行地传输。通信总是由主设备发起。主设备通过MOSI脚把数据发送给从设备,从设备通过MISO引脚回传数据。这意味着全双工通信的数据输出和数据的输入是用同一个时钟信号同步的;时钟信号由主设备通过SCK脚提供。
6、时钟信号的极性和相位
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的组合选择数据捕捉的时钟边沿。
注:在改变CPOL/CPHA位之前,必须清除SPE位将SPI禁止
主和从必须配置成相同的时序模式,也就是时钟、数据锁存边沿必须一致。
SCK的空闲状态必须和SPI_CR1寄存器指定的极性一致(CPOL=1,空闲时应上拉SCK为高电平;CPOL=0,空闲时应下拉SCK为低电平)
数据帧格式(8位或16位)由SPI_CR1寄存器的DFF位选择,并且决定发送/接收的数据长度。