STM32F7--->QSPI

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

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闪存映射模式接口框图

请添加图片描述

  • 如图为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相关参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值