利用 QuadSPI 外扩串行 NOR Flash 的实现
前言
STM32 提供了灵活多样的外扩存储器访问实现。本文中,介绍如何利用 QSPI (QuadSPI) 外扩串
NOR Flash 存储器。首先对 QSPI 接口功能特性进行介绍,然后分别介绍硬件设计和软件开发。并
STM32CubeMX提供访问 MICRON N25Q128A13EF840F 的实现参考
实现环境
开发板:STM32F469G-DISCO
开发库:STM32CubeF4 v1.16.0
STM32CubeMX: v4.22.0
集成开发环境:IAR v7.70.1.11486
实现过程在 STM32F469I-DISCO 板上展开,利用板上已有的串行 NOR Flash 存储器(MICRON
N25Q128A13EF840F)。呈现整个开发涉及环节。在本文中,首先根据 QSPI 接口,介绍 QSPI 与外扩串行存储器硬件连接。
另外,Cube 软件包中包含 QSPI 实现例,在本文对库中实现的 QSPI 例不做讨论,读者也可参考这些 QSPI 例进行设计。本
文围绕由 STM32CubeMX 生成的工程,介绍如何实现对外扩串行 NOR Flash 存储器的访问。
QSPI 介绍
在呈现 QSPI 访问外扩 Flash 的实现例前, 需要对 QSPI 一定的了解,在此对 QSPI 进行简短的介绍。更多内容请参考
AN4760
QSPIQuad-SPI)支持四线串行访问形式。同时,QSPI 支持传统 SPI Dual-SPI 模式,Dual-SPI 模式支持两线串行
访问。与 FMC/FSMC 比较,QSPI 支持更低成本、更小封装外部串行 Flash 存储器,更少的 IO 引脚占用,有效减少 PCB
积,降低 PCB 设计复杂度。
QSPI 在不同系列 STM32 产品线的支持情况(仅部分罗列,未涵盖所有支持型号)。
QSPI 特性
最大时钟速度(MHz
Flash 访问
支持情况
最大地址空间
SDR
DDR
存储器映射
间接模式
STM32L4x6
60
48
不支持
256MB
4GB
STM32F446
90
60
支持
STM32F469/F479
90
80
支持
STM32F7x5/F7x6
108
80
支持
QSPI 接口提供了灵活可配置的 5个阶段,如下图所示(仅用于理解阶段构成,时序图根据配置不同存在差异)。分别是
命令阶段、地址阶段、复用字节阶段、Dummy 阶段和数据阶段。可以根据外扩 Flash 中命令时序对不同阶段进行配置。后续
会以实例进行呈现。更多内容请参考 AN4760
QSPI 支持三种模式,分别是:
间接模式 所有操作通过 QSPI 寄存器实现,类似于传统 SPI,可以使用阻塞模式、中断模式或者 DMA 模式进行读写
等访问。本文中提供的实现例为间接模式下的实现。
状态轮询模式 接口自动轮询指定寄存器,直到回读寄存器内容与指定条件匹配。可应用于状态检测,从而实现忙等待
等效果。本文不对此模式进行实现介绍,应用实现可参考 Cube 软件包中 QSPI 例程。
存储器映射模式 外扩 Flash 被视为内部存储器,支持 AHB 主器件直接访问,CPU 能够直接运行位于 QSPI 存储器的
执行代码。内部系统架构如下图所示(以 STM32F469/F479 为例)。本文不对此模式进行实现介绍,应用实现可参考 Cube
软件包中 QSPI 例程 QSPI_ExecuteInPlace
QSPI 外扩串行 Flash 实现例
3.1 串行 Flash 介绍
MICRON N25Q128A13EF840F 为例,更多细节请参考存储器手册。N25Q128A13EF840F 引脚图、时序图和电气参
数来源于 N25Q128A13 手册文档
支持协议: SPI, Dual I/O(对应 Dual-SPI, Quad I/O(对Quad-SPI
支持访问模式: 单线访问、双线访问、四线访问,得益于 QSPI 接口的灵活可配性,三种访问模式全部支持。
供电电压范围: 2.7 ~ 3.6V
最大时钟频率: 108MHz
存储空间: 128Mb 16MB