利用QuadSPI外扩串行NOR Flash的实现

2017年10月09日 14:12    发布者:小融一号
前言STM32提供了灵活多样的外扩存储器的访问实现。本文将介绍如何利用QSPI(QuadSPI) 外扩串行NOR Flash存储器的实现过程。首先对QSPI接口功能特性进行介绍,然后分别介绍硬件设计和软件开发。并基于STM32CubeM提供访问MICRON N25Q128A13EF840F的实现参考。 一 实现环境开发板:STM32F469G-DISCO开发库:STM32CubeF4 v1.16.0STM32CubeMX: v4.22.0集成开发环境:IAR v7.70.1.11486实现过程在STM32F469I-DISCO板上展开,利用板上已有的串行NORFlash存储器(MICRON N25Q128A13EF840F),呈现整个开发环节。在本文中,首先根据QSPI接口,介绍QSPI与外扩串行存储器的硬件连接。另外,Cube软件包中包含QSPI实例,本文对库中实现的QSPI例不做讨论,读者可参考这些QSPI例程进行设计。本文围绕由STM32CubeMX生成的工程,介绍如何实现对外扩串行NOR Flash存储器的访问。
二 QSPI介绍在呈现QSPI访问外扩Flash的实例前, 需要对QSPI有一定的了解,在此对QSPI进行简短的介绍。更多内容请参考AN4760。QSPI(Quad-SPI)支持四线串行访问形式。同时,QSPI支持传统SPI和Dual-SPI模式,Dual-SPI模式支持两线串行访问。与FMC/FSMC比较,QSPI支持更低成本、更小封装外部串行Flash存储器,更少的IO引脚占用,有效减少PCB面积,降低PCB设计复杂度。下表是QSPI在不同系列STM32产品线的支持情况(仅部分罗列,未涵盖所有支持型号)。


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)器件引脚示意图如下所示。由两根电源引脚和六根QSPI信号线构成。


下表为存储器N25Q128A13xxx命令(未列出全部命令)。通过下表可知,存储器提供了灵活的访问实现形式,结合同样灵活可配置的QSPI接口,能够实现存储器命令全支持。本文仅提供设计思路,呈现了部分命令在QSPI上的实现。


3.2 硬件设计涉及到的信号线少,硬件设计简单,只需直接将QSPI的六根信号线与存储器连接即可。考虑到可测性,可以增加串行电阻或者测试点。硬件电路图如下所示。


QSPI接口PCB设计遵循如下几点,更多硬件设计内容请参考AN4488。a. 线阻 50Ω± 10%b. 最大线长 <120mmc. 避免在不同信号层走信号线d. 时钟线至少离其他信号线3倍线宽距离e. 数据信号线长差 ≤10mmf. 避免时钟线采用蛇形走线,同时尽量减少数据线上过孔。3.3 软件开发流程


3.4 软件实现例在环境搭建完成后,就可以利用STM32CubeMX根据硬件连接情况,进行QSPI配置,获取IAR工程。具体软件实现流程如下。


四 小结STM32的QuadSPI接口灵活可配,对于命令阶段、地址阶段、复用字节阶段、Dummy阶段和数据阶段都可以进行配置。基于这种灵活性,能够实现市面上SPI、Dual IO、Quad IO的串行Flash支持。出于简化考虑,QSPI支持的中断访问及DMA访问等更多功能没有在本文进行介绍,更多实现可以参考ST提供的Cube软件包中的QSPI例程。另外,不同厂家的串行Flash命令及操作实现略有差异,具体以采用的Flash文档描述为准。
相关文档AN4760  Quad-SPI (QSPI) interface onSTM32 microcontrollersAN4488  Getting started withSTM32F4xxxx MCU hardware developmentRM0386  STM32F469xx and STM32F479xxadvanced ARM®-based 32-bit MCUs更多有关QSPI配置及代码解读的内容细节可添加下方技术QQ群进行下载阅读。技术QQ群:258644475