Skip to content

SPI/FLASH

高速全双工的通信协议, 时钟线两根通信引脚, 一根片选引脚, SS引脚是低电平的时候选择这一个设备

在时钟的一个边沿时候进行数据的变换, 时钟的另一个边沿进行数据的采样, 可以设置为不同的模式

CPOL控制的是空闲的时候时钟的状态, 0的时候是低电平, CPHA控制的是数据采样的时间, 设置为0的时候为奇数边沿进行采样

QSPI

应用比SPI协议更加广泛, 对其功能进行增强, 增加队列传输机制, 推出队列串行外围接口协议

使用四条数据线进行数据传输, 使用的方式和SIP相似

  • 四个阶段

指令, 地址, 复用字节, 空周期, 数据

在指令传输的时候使用的SPI的协议, 之后数据的传输, 发送的是四个数据线进行传输

STM32的实现

使用三跟线,可以选择单项的同步单工的功能

8位或者16为的传输格式, 主机或者从机的模式, 可以选的8个分频系数, 可以选的时钟的极性或者相位, MSB在前或者LSB在前, NSS可以选则是硬件控制还是软件控制

有中断标志位对于状态进行处理, SPI总线的忙状态位, 硬件校验, 可以作为最后一个字节进行传输, 支持DMA

  • 升级

支持SPITI协议, 只要是片选信号线的差异

数据支持4位到16为的长度, 支持FIFO

4位到32位, 使用双时钟域, 对于片选极性以及时序, MISO和MOSI的切换

Quad-SPI的扩展, 主要用于控制SPI Flash

有三种模式, 间接模式, 使用寄存器进行所有操作

状态轮训模式, 周期性读取尾部Flash的状态寄存器, 标志位为1的时候会产生中断, 内部映射模式, 外部的Flash映射到内部的内存空间

支持双闪存, 提高容量

实际发送数据

  • 拉低引脚

  • 写入数据到缓冲区

  • 发送完成标志BSY标志

  • 当有数据接收到的时候会有一个RXNE标志

  • 读取SPI的Flash的时候可以读取Flash的标志位

  • 在使用容量比较大的flash的时候有专门的指令进入四字节表示一个地址, 状态寄存器里面有保存

QSPI

有三种模式

  • 间接模式

直接操控寄存器

  • 自动轮训模式

查询SPIFlsh的器件状态寄存器的状态, 有一个掩码功能, 用于匹配状态位

  • 内存映射

将其视为一块内存, 直接使用指针进行操作

有一个限制, 只能够读取数据, 不能进行写入数据

在使用的时候需要设置指令的格式, QSPI_CommandTypeDef, 有具体的指令, 用几条线进行传输, 有的Flash可以设置之后的命令使用地址线发送, 这个不使能, 是否使用DDR(上下边沿进行采样)

最后使用HAL_SPI_Command()进行发送, 使用HAL_QSPI_Transmit()传输数据

可以使用命令HAL_QSPI_AutoPolling()进行自动轮询的读取状态寄存器, 有一个专门的结构体控制自动轮训的查询的标志位, 还可以设置匹配的标志位是与还是或(是否需要全部匹配)