你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战经验】利用QuadSPI外扩串行NOR Flash的实现

[复制链接]
zero99 发布时间:2017-9-28 15:51
利用 QuadSPI外扩 串行 NOR Flash的实现
8 o+ b6 Y3 J+ _
前言1 U9 I' r( Y& A% S1 W
STM32提供了灵活多样的外扩存储器访问实现。本文中,介绍如何利用QSPI (QuadSPI) 外扩串行NOR Flash存储器。首先对QSPI接口功能特性进行介绍,然后分别介绍硬件设计和软件开发。并基于STM32CubeMX,提供访问MICRON N25Q128A13EF840F的实现参考。
. T  @- P+ x- t4 @+ |4 A( g- {" m5 ]' i8 F/ {/ |
一 实现环境
* J! H! f- h8 O: j: j    开发板:STM32F469G-DISCO
% H1 f7 [& o/ Q5 W' }, |    开发库:STM32CubeF4 v1.16.0
+ y- C. N# b  e% ]! {6 R8 U) W    STM32CubeMX: v4.22.0
9 K' n4 t3 c4 Y    集成开发环境:IAR v7.70.1.11486' d& {5 N3 X. O0 E( @

2 C- t/ a# o4 I    实现过程在STM32F469I-DISCO板上展开,利用板上已有的串行NOR Flash存储器(MICRON N25Q128A13EF840F)。呈现整个开发涉及环节。在本文中,首先根据QSPI接口,介绍QSPI与外扩串行存储器硬件连接。另外,Cube软件包中包含QSPI实现例,在本文对库中实现的QSPI例不做讨论,读者也可参考这些QSPI例进行设计。本文围绕由STM32CubeMX生成的工程,介绍如何实现对外扩串行NOR Flash存储器的访问。4 {- l* \. h& h6 v# v6 C& Y4 Q
1 u0 N( r5 ^( s6 x! a
二 QSPI介绍) t7 C7 K9 {# h9 U( s( J3 U4 }
    在呈现QSPI访问外扩Flash的实现例前, 需要对QSPI有一定的了解,在此对QSPI进行简短的介绍。更多内容请参考AN4760。
# F/ {0 |- K+ N+ p3 a) a; P: o6 c    QSPI(Quad-SPI)支持四线串行访问形式。同时,QSPI支持传统SPI和Dual-SPI模式,Dual-SPI模式支持两线串行访问。与FMC/FSMC比较,QSPI支持更低成本、更小封装外部串行Flash存储器,更少的IO引脚占用,有效减少PCB面积,降低PCB设计复杂度。1 f6 j9 @! h4 J* x. X; F
    QSPI在不同系列STM32产品线的支持情况(仅部分罗列,未涵盖所有支持型号)。
9 F9 [, ?) g) R: `  x1 X
11.jpg , i0 u. _+ m6 m7 F, @
        ! E) k/ M( u- {
    QSPI接口提供了灵活可配置的5个阶段,如下图所示(仅用于理解阶段构成,时序图根据配置不同存在差异)。分别是命令阶段、地址阶段、复用字节阶段、Dummy阶段和数据阶段。可以根据外扩Flash中命令时序对不同阶段进行配置。后续会以实例进行呈现。更多内容请参考AN4760。+ g# C2 }1 A$ B* @6 q) g- _6 j
12.jpg
$ h" d0 z+ v- L0 p8 D. t    QSPI支持三种模式,分别是:0 B* L1 j& U4 X
    间接模式---所有操作通过QSPI寄存器实现,类似于传统SPI,可以使用阻塞模式、中断模式或者DMA模式进行读写等访问。本文中提供的实现例为间接模式下的实现。
2 X8 H* h8 @! v3 f% ~    状态轮询模式---接口自动轮询指定寄存器,直到回读寄存器内容与指定条件匹配。可应用于状态检测,从而实现忙等待等效果。本文不对此模式进行实现介绍,应用实现可参考Cube软件包中QSPI例程。( I( C# Y4 O3 c1 z1 \
    存储器映射模式---外扩Flash被视为内部存储器,支持AHB主器件直接访问,CPU能够直接运行位于QSPI存储器的执行代码。内部系统架构如下图所示(以STM32F469/F479为例)。本文不对此模式进行实现介绍,应用实现可参考Cube软件包中QSPI例程QSPI_ExecuteInPlace。
) f# k# v" `2 p
13.jpg ! T6 w! ?/ ?: r* t- X+ I

9 W0 z7 s" y+ v1 [( K9 ]三 QSPI外扩串行Flash实现例) D# m% {5 O4 l0 }, v: k

: C4 l% S# N( c& S# @. S! C( x& m0 C& e% h- [0 _
3.1 串行Flash介绍2 ?8 e- b% A" R
    以MICRON N25Q128A13EF840F为例,更多细节请参考存储器手册。N25Q128A13EF840F引脚图、时序图和电气参数来源于N25Q128A13 手册文档。
7 L2 G* b, k, a9 ?5 M3 `    支持协议: SPI, Dual I/O(对应Dual-SPI), Quad I/O(对应Quad-SPI)
1 P& X, f! H+ u* u; U    支持访问模式: 单线访问、双线访问、四线访问,得益于 QSPI接口的灵活可配性,三种访问模式全部支持。
% X& {0 _/ l' l2 i+ s2 A5 ^    供电电压范围: 2.7 ~ 3.6V
5 [6 S. C3 V2 u  L* ^5 C; X    最大时钟频率: 108MHz# [. I3 L- b8 ~6 c) t
    存储空间: 128Mb (16MB)
! V8 c2 m. ]# Y3 C2 _; r0 I! K    器件引脚示意图如下所示。由两根电源引脚和六根QSPI信号线构成。
, D3 m* Q% y( I
14.jpg 7 V+ ~& E8 @1 f- \) S3 i3 s9 r
    下表为存储器N25Q128A13xxx命令(未列出全部命令)。通过下表可知,存储器提供了灵活的访问实现形式,而结合同样灵活可配的QSPI接口,能够实现存储器命令全支持。而本文仅为提供设计思路,呈现了部分命令在QSPI上的实现。
7 @+ E" B- L6 H" i4 Q
15.jpg
/ h; w0 V" z( R, G3 b) R, @    其中,默认读写默认3字节地址,四线快速读命令默认Dummy 周期数为8。8 Q+ M: N1 M( C# f1 V
9 W( W5 i6 I/ Y6 K. e) y
3.2 硬件设计
( r: {* |9 T5 a2 T    涉及到的信号线少,硬件设计简单,只需直接将QSPI的六根信号线与存储器连接即可。考虑到可测性,可以增加串行电阻或者测试点。硬件电路图如下所示。) p; A+ w; C  L" c7 @! v
16.jpg ! O& f5 I, i3 S- C4 n! O
        , N6 q- {& p7 p# N1 U* {9 p# z. s
    QSPI接口PCB设计遵循如下几点,更多硬件设计内容请参考AN4488。
4 `1 {5 z3 i5 u' J9 M    a. 线阻 50Ω ± 10%
6 o8 g2 `7 }, t7 S3 @$ _% _! v    b. 最大线长 < 120mm! l2 N: F9 ?+ h- s# ?" S- R
    c. 避免在不同信号层走信号线# l& ~  T% W3 F- v
    d. 时钟线至少离其他信号线3倍线宽距离  m$ ?8 X) R. o7 D  M
    e. 数据信号线长差 ≤ 10mm
+ K$ y/ Z- E5 n8 [2 w- Y    f. 避免时钟线采用蛇形走线,同时尽量减少数据线上过孔。3 c2 a$ W, M' y" Y4 A
3 t  B0 w0 F' t& b
3.3 软件开发流程
8 N! l$ O$ a0 z0 ^5 d
17.jpg 8 U/ C& H5 T- x1 f* c
* o7 t; N% `% Z
3.4 软件实现例
) I" h- t, M8 X2 F4 ^    在环境搭建完成后,就可以利用STM32CubeMX根据硬件连接情况,进行QSPI配置,获取IAR工程。具体软件实现流程如下。
0 M- ~8 n  X- S# A  {
18.jpg # V0 a" A% Z# Q/ g
; L. ~% R% E9 ]8 i
    a. 利用STM32CubeMX生成IAR工程2 e; V$ N( n/ k- }
    打开STM32CubeMX---点击”New project”---在”Part Number Search’中输入STM32F469NI---点击”MCUs Liast”中出现的STM32F469NIHx---点击“Start Project”  此时,基于STM32F469NIHx的STM32CubeMX工程被打开。
- b: N/ A  b: K& C3 i( c8 ~; v* U    如下,根据STM32F469I-DISCO板硬件连接情况(QSPI NCS, CLK, Q0, Q1, Q2, Q3对应PB6, PF10, PF8, PF9, PF7, PF6;外部高速晶振为8MHz无源晶振;调试接口采用SWD接口,其中SWCLK, SWDIO对应PA14, PA13):! T& K- H0 ?" l
选择” QuadSPI”为”Bank1 with Quad SPI Lines”(注:也可在开发过程中,先用STM32CubeMX查看QSPI接口对应的IO引脚,进行硬件开发) 。" g5 D' z) X' Z5 s
    注: 在如上选择后,右侧引脚图中QSPI对应的引脚会呈现绿色显示。需要根据电路图中所连接的QSPI引脚,进行复用引脚确认。例如,在默认情况下,QSPI IO0对应到PC9引脚,而STM32F469I-DISCO板上的QSPI IO0与PF8连接,并非PC9。所以,需要在右侧引脚图中,按住Ctrl键,左键在PC9引脚按下,拖动至PF8处,松开左键和Ctrl键,实现IO0引脚的关联。
$ \6 J' ~& e7 e  b; r    选择“High Speed Clock(HSE)”为“Crystal/Ceramic Resonator”。
* J$ E) X. H: X/ p9 [! n    选择”Debug”为”Serial Wire”
2 Y& A" u+ y% |( f
19.jpg
9 |: W0 X& T# x# I
& I: V. h* _7 e* f    时钟配置如下图所示。设置输入时钟频率为8MHz  选择”HSE”做为PLL倍频时钟源  选择”PLLCLK”做为主频时钟源  设置 “HCLK”为180MHz (FAHB 为180MHz) 点击 Enter键,自动生成对应主频的时钟参数(仅提供时钟配置参考,并不限制一定要设置180MHz主频)。
7 w; v0 a& f1 s: d2 Y3 h/ ^9 _
21.jpg
" B9 {0 @% N# {- N5 [' G  E- e% F    QSPI配置如下图。参数的配置需要与存储器参数匹配。
( }# x, l1 F4 j    • FIFO Threshold(FIFO阈值) 配置为4,并不严格要求。
+ c$ m! T* H8 a    • Smaple shift 选择“Sample shifting half cycle”。延后半个时钟,获取数据线上数据。可以使用在由于线路设计,数据信号存在较大延迟的场景。" x$ {+ z% [% P4 L2 G* C
22.jpg
, T6 z- [; `4 U' I6 b    使能QSPI中断。3 v- L4 o6 j' o+ b' W; r
23.png
/ y) ^2 A$ ^5 e" r    点击菜单栏”Project”---“Settings”---设置”Project Name” , “Project Location” 和 “Toolchain / IDE” 。其中“Toolchain / IDE”设置为EWARM以便生成对应IDE的工程。其他选项保持默认。
6 Y/ K  I+ n+ [    点击菜单栏”Project”---“Generate Code”---等待IAR工程生成,出现”Code Generation”界面---点击”Open Project”打开工程。
: G4 ^* U: M6 h: `! o  w    b. 完善工程。9 Z$ g0 O8 a$ s
     由上述步骤获得的IAR工程中,包含了时钟配置及QSPI接口的初始化。对于外扩Flash的操作,还需要 添加外扩Flash支持的命令进行操作。N25Q128A13EF840F支持的部分命令可参见本文3.1小结。
# H3 Z( A& }' a& }    在这里出于简化考虑,仅提供了阻塞式读取ID,擦除Flash,块写和快读操作的实现。更多实现模式,可以参考Cube软件包中提供的QSPI例程。
+ l) Z& M  ~, F& v* L% e5 O- f' Z    在N25Q128A13EF840F手册中提供了读ID命令时序,如下图所示。
  _) R$ C! X& E+ E& X( F2 q 25.png - D% Q+ j  s% L: W
    由时序图可知,读ID时序构成: 命令阶段 + 数据阶段。命令阶段和数据阶段线宽都为1,读ID命令码为0x9E或者0x9F,ID数据长度为17字节。
( L  o: r3 W& t" O- _6 V* j* D9 r    在N25Q128A13EF840F手册中提供了写使能命令时序,如下图所示。1 }2 o8 X5 ?, q
24.jpg
" ?8 C  o: o2 V    由时序图可知,块擦除时序仅有命令阶段。命令阶段线宽为1,写使能命令码为0x06。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
: P' x- C) e4 n4 K. x; v2 Y" i    在N25Q128A13EF840F手册中提供了扇区擦除命令时序,如下图所示。5 R: @% _. D6 t( A! C  k# Z
26.jpg & G6 K+ Z( E; ^; F
    由时序图可知,扇区擦除时序构成:命令阶段+地址阶段。命令阶段和地址阶段线宽为1,扇区擦除命令码为0xD8。其中地址为24-bit,任一位于需要进行擦除操作的扇区范围内地址都有效。在此简单选择扇区0进行擦除,选择地址为0。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。' p& u7 Q$ D( @& C, s
    在N25Q128A13EF840F手册中提供了四线快速写命令时序,如下图所示。% B+ S  t1 p- Q2 C; E$ ]
27.jpg
1 e: D" U+ Y! q  F( w/ f8 X    由时序图可知,四线快速写命令时序构成:命令阶段+地址阶段+数据阶段。命令阶段和地址阶段线宽为1,数据阶段线宽为4,四线快速写命令码为0x32。其中地址为24-bit,对应写入起始地址。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
7 M& S# t, @5 X/ E: e) G    在N25Q128A13EF840F手册中提供了四线快速读命令时序,如下图所示。
- [1 U* I6 ?. a. _+ E; A" E9 J 28.jpg $ I0 s' ~. Q6 ^; N) i- M$ v
    由时序图可知,四线快速读命令时序构成:命令阶段+地址阶段+数据阶段。命令阶段和地址阶段线宽为1,数据阶段线宽为4,四线快速读命令码为0x6B。其中地址为24-bit,对应写入起始地址。四线快速读命令默认Dummy cycles为8。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
4 `9 j1 g) m5 q: ~8 v    在main.c \ main函数中,增加代码如下。
4 o0 m- W! j8 V! o( C/ I- A 29.jpg
5 M5 Y4 ]9 r8 N+ a& [ 31.jpg
$ \4 `5 N/ C9 _- N% `" C9 U 32.jpg   r0 r+ K8 y4 O1 P- z$ {
33.jpg ( e! M) A6 v+ ?4 o4 {2 {
) m" X. x% z8 b3 G0 l0 m( ^( g
% _) ^" A: \  t$ n6 f" ^: a. Y
四 小结
: a3 [; H* u8 e/ J/ R    STM32的QuadSPI接口灵活可配,对于命令阶段、地址阶段、复用字节阶段、Dummy阶段和数据阶段都可以进行配置。基于这种灵活性,能够实现市面上SPI、Dual IO、Quad IO的串行Flash支持。但出于简化考虑,QSPI支持的中断访问及DMA访问等更多功能没有在本文进行介绍,更多实现可以参考ST提供的Cube软件包中的QSPI例程。另外,不同厂家的串行Flash命令及操作实现略有差异,具体以采用的Flash文档描述为准。

% R$ `1 m: q" e& _  ~) T( X, n6 o9 M5 b

( ?8 {2 _: e- U6 P1 p文档下载1>>         文档下载2>>       更多实战经验>>
2 V* k1 [' Y( X9 Y" b  k; |# K8 n& x' i4 W% Z

( {5 G8 Z% m4 \. O. H- P# F* {3 g
收藏 2 评论5 发布时间:2017-9-28 15:51

举报

5个回答
斜阳 回答时间:2017-9-28 16:38:42
mark一下
heweijian55 回答时间:2017-10-26 14:30:09

4 @. j. j: u6 J1 c# O  |8 Zmark一下
joneing 回答时间:2018-6-4 15:41:44
感谢分享
蓝夜 回答时间:2018-6-8 20:51:15
QSPI 4线通信, 为什么说会减少pcb面积呢?
Onesdfa 回答时间:2019-1-25 18:00:35
用W25Q128进行内存映射操作总是读失败,楼主能否分享一下经验

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版