QSPI即Quad SPI(四线SPI),几种SPI的区别详见参考


文章目录

  • QSPI 介绍
  • 工作模式
  • QSPI特点
  • F7的QSPI闪存映射模式接口框图
  • QSPI命令序列(与FLASH的通信)
  • 指令阶段
  • 地址阶段
  • 交替字节(复用字节)阶段
  • 空指令周期阶在空指令周期阶段,在给定的
  • 数据阶段
  • 间接模式
  • QSPI的使用
  • QSPI初始化步骤
  • 1.开启QSPI接口和相关时钟,设置IO的复用功能
  • 2.设置QSPI相关参数



QSPI 介绍

工作模式

  • QSPI是一种专用的通信接口,可连接单、双或四(条数据线)SPI FLASH存储器。STM32F7具有QSPI接口,并且支持三种工作模式:
  1. 间接模式
     使用QSPI执行全部操作
  2. 状态轮询模式
     周期性读取外部FLASH状态寄存器,当标志位置1时会产生中断
  3. 内存映射模式
     外部FLASH映射到微控制器地址空间,从而系统将其视作内部存储器

QSPI特点

  • 支持三种工作模式
  • 支持双闪存模式,可以并行方位两个FLASH,可同时发送/接收8位数据
  • 支持SDR(单倍率)和DDR(双倍率)模式————(这部分不理解后面用到再解释)
  • 间接模式和内存映射模式,可编程操作码,可编程帧格式
  • 集成FIFO(先进先出的 双口缓存器),用于发送和接收
  • 允许8/16/32位的数据访问
  • 间接模式的操作可使用DMA通道
  • 在达到FIFO阈值、超时、操作完成及访问发生错误时产生中断

F7的QSPI闪存映射模式接口框图

stm32中spi在stm32cubemx中clk时钟设置_字节数

  • 如图为STM32F7的QSPI闪存模式的系统框图,QSPI通过6根线与SPI芯片连接,包括:4根数据线(IO0~3)、一根时钟线(CLK)和1根片选线(nCS)。普通的SPI只有一根数据项(MOSI),而QSPI有4根数据项,速率至少提升了4倍,大大提升了通信效率。

QSPI命令序列(与FLASH的通信)

  • QSPI通过命令序列FLASH通信,每条命令包括:指令、地址、交替字节、空指令、数据,这五个阶段任一阶段均可跳过,但至少要包含指令、地址、交替字节或数据阶段之一
  • nCS在每条指令开始前下降,每条指令完成后上升。有图可见工5个阶段,其中交替字(复用)节阶段一般用不到,可以省略(通过设置 ABMODE[1:0]=00 )。如下逐一分析

指令阶段

  • 此阶段通过 QUADSPI _CCR[7: 寄存器的 INSTRUCTION 字段指定一个 8 位指令发送到FLASH 。注意,指令阶段,一般是通过 IO0 单线发送,但是也可以配置为双线 四线发送指令,可以通过 QUADSPI _CCR[9: 寄存器的 IMODE[1:0] 这两个位进行配置,如 IMODE[1:0]=00则表示无需发送指令。

地址阶段

  • 此阶段可以发送 1~4 字节地址给 FLASH 芯片,指示要操作的地址。地址字节长度由QUADSPI _CCR[13: 寄存器的 ADSIZE[1:0] 字段指定, 0~3 表示 1~4 字节地址长度。在间接模式和轮询模式下,待发送的地址由 QUADSPI _AR 寄存器指定。地址阶段同样可以以单线 双线四线模式发送,通过 QUADSPI _CCR[11: 寄存器的 ADMODE[1:0] 这两个位进行配置,如ADMODE [1:0]=00 ,则表示无需发送地址。

交替字节(复用字节)阶段

  • 此阶段可以发送1~4 字节数据给 FLASH 芯片,一般用于控制操作模式。待发送的交替字节数由 QUADSPI_CCR[17:16] 寄存器的 ABSIZE[1:0] 位配置。待发送的数据由 QUADSPI_ABR寄存器中指定。交替字节同样可以以单线 双线 四线模式发送,通过 QUADSPI_CCR[15:14] 寄存器的 ABMODE[1:0] 这两个位配置, AB MODE[1:0]=00 ,则跳过交替字节阶段。

空指令周期阶在空指令周期阶段,在给定的

  • 1~31 个周期内不发送或接收任何数据,目的是当采用更高的时钟频率时,给 FLASH 芯片留出准备数据阶段的时间。这一阶段中给定的周期数由QUADSPI_CCR[22:18] 寄存器的 DCYC[4:0] 位配置。 若 DCYC 为零,则跳过空指令周期阶段。

数据阶段

  • 此阶段可以从FLASH 读取 写入任意字节数量的数据。在间接模式和自动轮询模式下,待发送 接收的字节数由 QUADSPI_DLR 寄存器指定。 在间接写入模式下,发送到 FLASH 的数据必须写入 QUADSPI_DR 寄存器。在间接读取模式下,通过读取 QUADSPI_DR 寄存器获得从FLASH 接收的数据。数据阶段同样可以以单线 双线 四线模式发送,通过 QUADSPI _CCR[25:寄存器的 DMODE [1:0] 这两个位进行配置,如 DMODE [1:0]=00 ,则表示无数据。

间接模式

  • 在间接模式下,通过写入QUADSPI 寄存器来触发命令,通过读写数据寄存器来传输数据。
  • 当FMODE=00 (QUADSPI_CCR[27:26]) 时, QUADSPI 处于间接写入模式,在数据阶段,将数据写入数据寄存器 (QUADSPI_ DR),即可写入数据到 FLASH 。
  • 当FMODE=01 时, QUADSPI 处于间接读取模式,在数据阶段,读取 QUADSPI_DR 寄存器,即可读取 FLASH 里面的数据。
  • 读写字节数由数据长度寄存器 (QUADSPI_ DLR)指定。当 QUADSPI_DLR=0xFFFFFFFF 时,则数据长度视为未定义, QUADSPI 将持续传输数据,直到到达 FLASH 结尾( FLASH 容量由QUADSPI_DCR[20:16] 寄存器的 FSIZE[4:0] 位定义)。如果不传输任何数据,则 DMODE[1:0](QUADSPI_CCR[25:24] 应设置为 00 。
  • 当发送或接收的字节数(数据量)达到编程设定值时,如果TCIE=1 ,则 TCF 置 1 并产生中断。在数据量不确定的情况下,将根据 FSIZE[4:0] 定义的 FLASH 大小,在达到外部 SPI FLASH的 限制时, TCF 置 1 。
  • 在间接模式下有三种触发命令启动的方式,即:
  1. 当不需要发送地址(ADMODE[1:0]==00)和数据(DMODE[1:0]==00)时,对INSTRUCTION[7:0] (QUADSPI_CCR[7:0] )执行写入操作。
  2. 当需要发送地址(ADMODE[1:0]!=00),但不需要发送数据(DMODE[1:0]==00),对ADDRESS[31:0] (QUADSPI_AR)执行写入操作。
  3. 当需要发送地址(ADMODE[1:0]!=00)和数据(DMODE[1:0]!=00)时 ,对 DATA[31:0] (QUADSPI_DR)执行写入操作。

如果命令启动,BUSY 位( QUADSPI_SR 的第 5 位)将自动置 1

QSPI的使用

QSPI初始化步骤

1.开启QSPI接口和相关时钟,设置IO的复用功能

2.设置QSPI相关参数