SPI
1 概述
SPI(串行外设设备接口,Serial Peropheral Interface)是一种高速的,全双工,串行、同步的通信总线。
2 特性
- 主或从操作
- 8 或 16 位传输帧格式
- 通信速率一般在 50MHz 以下
- 可编程的时钟极性和相位
- 可编程的数据顺序,MSB 在前或 LSB在前
- 可触发中断的专用发送和接收标志
- 支持可靠通信的硬件 CRC
- 在发送模式下,CRC 值可以被作为最后一个字节发送
- 在接受到最后一个字节时自动进行 CRC 出错检查
3 SPI是如何工作的?(SPI框图)
3.1 SPI 通信框图简化版
3.2 SPI 框图
① SPI相关引脚
MOSI(输出数据线)
MISO(输入数据线)
SCK(时钟)
NSS(片选)
② 数据发送和接受
与缓冲区、移位寄存器以及引脚相关
③ 时钟信号
SPI 时钟信号是通过 SPI_CR1 寄存器配置
④ 主控制逻辑
设计两个控制寄存器 SPI_CR1/2 用于配置 SPI 工作,SPI_SR 用于查看工作状态
3.3 SPI 移位操作
CLK在第一个边沿产生时,数据被传输到 MOSI/MISO 引脚,第二个边沿产生时,数据就被传输到移位寄存器。通过8个流程,1字节的数据就被交换。
Note
- 主机只向从机进行写操作,可以忽略接收到的从机数据。
- 主机要对从机进行读操作,需要发送一个空数据来引发从机发送数据。
4 SPI 工作模式
时钟极性(CPOL):没有数据传输时时钟线的空闲状态电平
0:SCK 在空闲状态保持低电平
1:SCK 在空闲状态保持高电平
时钟相位(CPHA):时钟线在第几个时钟边沿采样数据
0:SCK 的第一(奇数)边沿进行数据位采样,数据在第一个始终边沿被锁存
1:SCK 的第二(偶数)边沿进行数据位采样,数据在第二个边沿被锁存
5 相关寄存器
SPI模式,主模式
- SPI_CR1.MSTR 主设备选择(Master selection)
作用:用于选择 SPI 的主从模式
方向,双向全双工 - SPI_CR2.BOM 双向数据模式使能(Bidirectional data mode enable)
- SPI_CR2.RXONLY 仅接受(Receive only)
作用:用于选择 SPI 的方向
NSS,软件管理且 SSI 为 1,SPI 才能通信 - SPI_CR2.SSM 软件从设备管理(Software slave management)
作用:用于使能软件管理通信 - SPI_CR2.SSI 内部从设备选择(Internal slave select)
作用:用于决定 NSS 的电平
数据传输顺序,8 位 MSB - SPI_CR1.LSBFIRST 帧格式(Frame format)
作用:选择 SPI 传输的帧格式
SPI使能 - SPI_CR1.SPE SPI使能(SPI enable)
波特率 - SPI_CR1.BR 波特率控制(Baud rate control)
Note:当通信正在进行的时候,不能修改这些位
SPI工作模式 - SPI_CR1.CPOL 时钟极性
- SPI_CR1.CPHA 始终相位
- SPI_SR.TXE 发送缓冲为空(Transmit buffer empty)
作用:用于检查发送是否完成,当 TXE 位置 1 ,表示数据已经全部发送出去 - SPI_SR.RXNE 接收缓冲非空(Receive buffer not empty)
作用:用于检查是否接收到数据,但 RXNE 位置 1 ,表示已经接受到数据。 - SPI_DR 数据寄存器
6 SPI 发送实验配置
- 配置 CLOCK、GPIO
- 配置 SPI 工作参数
- 使能 SPI
- SPI 发送