QSPI 工作原理

[English]

概述

QSPI 作为主设备 (Master) 用于对通用的从设备 (Slave)(如 Flash、PSRAM 或者显示屏)进行读写操作,支持单线、双线或四线(数据线)SPI 操作。可以在如下两种模式下工作: 间接模式:使用 QSPI 寄存器执行全部操作 内存映射模式:外部设备映射到内部存储地址空间,从而系统将其视为内部存储器

QSPI 主要特性如下: | 两种工作模式:间隔模式和内存映射模式 | 完全可编程操作码和帧格式 | 集成 FIFO,独立的发射 FIFO 和接收 FIFO | 收发传输完成产生中断

QSPI 和外部设备之间一般包含如下阶段:CMD 指令阶段、ADDR 地址阶段、WAIT 等待阶段和数据阶段。

  • CMD 指令阶段

指令通常是单线模式,也可以是双线和或四线模式,通过寄存器可以配置;通常 CMD 指令阶段都是 1 线模式,对于 Flash、PSRAM、OLED 等外设来说都是单线模式不变。CMD 寄存器最多支持 8 个字节,这些 CMD 不仅仅用于表示指令,还用于表示地址,对于地址来说,是存在线宽变化的。指令长度可以是 1 个或者最多 8 个字节。有 4 个预设的寄存器 CMDA、CMDB、CMDC 和 CMDD,每次SPI操作选一个 CMD 模式。 CMDA、CMDB、CMDC 和 CMDD 表示不同的操作模式(间接模式/内存映射模式)及读/写方向: 1) CMDA 用于内存映射模式向设备内存写数据 2) CMDB 用于内存映射模式从设备内存读数据 3) CMDC 用于间接模式通过 TX FIFO 向设备内存写数据 4) CMDD 用于间接模式通过 RX FIFO 从设备内存读数据 当需要使用内存映射模式时,CMDA 和 CMDB 只需要配置一次,之后的内存读写都不需要再次配置 CMD 模式。当需要使用间接模式时,每次操作 FIFO 数据或下发设备指令,都需要配置 CMD 使能。模式的选择根据设备物理特性来选择,PSRAM 适用直接存储,Flash 适用间接模式。

  • ADDR 地址阶段

地址可以是单线、双线或四线模式,长度一般 3 到 4 个字节。CMDA ~ D 提供了灵活的 CMD 配置方式。对于内存映射模式而言,即 CMDA 和 CMDB 来说,地址会由硬件自动产生。但是对于间接模式,CMDC 和 CMDD 中的1 ~ 8 字节内容,哪部分是指令,哪部分是地址,哪部分需要 Dummy,以及位宽的设置,都由 QSPI 软件使用者来根据设备的规范来配置,无法自动区分出地址所在的 CMD 字节位,并且地址的位宽由对应 CMD 字节的控制位设定。 在直接内存映射模式下,地址直接来源于总线。这个总线映射地址是固定的,0x68000000 对应设备 0 地址。

  • WAIT 等待阶段

没有任何操作,在两个 CMD 字节中间插入等待时隙,等待的时隙数由 DUMMY_CLK 位域配置。这里的两个CMD,指的不仅是指令,也可以是地址,比如 CMD1 表示指令,CMD2 ~ 4 表示地址,Dummy 加在 CMD4 之后,这样就能实现地址之后加 Dummy 的实际效果,数据内容通过 FIFO 实现读写。插入等待时隙的位置由DUMMY_MODE 位域配置。

  • 数据阶段

发送或者接收数据,内部 FIFO 最大长度 256 字节。数据阶段的线宽由寄存器 DATA_LINE 配置,长度由DATA_LEN 位域配置。 在间接模式下,通过写 TX FIFO 和读 RX FIFO 来交互数据。在内存映射模式下,数据直接来自总线或者回到总线。