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

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

[复制链接]
zero99 发布时间:2017-9-28 15:51
利用 QuadSPI外扩 串行 NOR Flash的实现
6 c0 U) B0 T) i( |) F$ q
前言  A6 s4 K6 `) A: k" W8 T0 q  |
STM32提供了灵活多样的外扩存储器访问实现。本文中,介绍如何利用QSPI (QuadSPI) 外扩串行NOR Flash存储器。首先对QSPI接口功能特性进行介绍,然后分别介绍硬件设计和软件开发。并基于STM32CubeMX,提供访问MICRON N25Q128A13EF840F的实现参考。7 D5 E0 t/ C! w! t: n, b! p# [
- o5 l! y- K: [+ \2 y) [2 T1 ]& X
一 实现环境& \3 R! J2 Z, ?8 k- v
    开发板:STM32F469G-DISCO
, j0 W3 I1 p4 A- ?# ~$ s- g    开发库:STM32CubeF4 v1.16.0, {8 B, q2 G. J2 o' ~- ~/ L" U
    STM32CubeMX: v4.22.03 |. n# Y3 X4 C1 b! k$ o, ~1 r
    集成开发环境:IAR v7.70.1.114864 i0 Y( S' ~  L/ A" m
9 Y  A* |! H* C, f/ n# M/ a: F4 V) X
    实现过程在STM32F469I-DISCO板上展开,利用板上已有的串行NOR Flash存储器(MICRON N25Q128A13EF840F)。呈现整个开发涉及环节。在本文中,首先根据QSPI接口,介绍QSPI与外扩串行存储器硬件连接。另外,Cube软件包中包含QSPI实现例,在本文对库中实现的QSPI例不做讨论,读者也可参考这些QSPI例进行设计。本文围绕由STM32CubeMX生成的工程,介绍如何实现对外扩串行NOR Flash存储器的访问。
3 f' r% M+ m: v& w) q1 `& R+ e1 R' G) C0 o- u( l
二 QSPI介绍
/ t! t$ J  z5 X: f    在呈现QSPI访问外扩Flash的实现例前, 需要对QSPI有一定的了解,在此对QSPI进行简短的介绍。更多内容请参考AN4760。
3 D  O* A+ K9 {/ C/ ~! e    QSPI(Quad-SPI)支持四线串行访问形式。同时,QSPI支持传统SPI和Dual-SPI模式,Dual-SPI模式支持两线串行访问。与FMC/FSMC比较,QSPI支持更低成本、更小封装外部串行Flash存储器,更少的IO引脚占用,有效减少PCB面积,降低PCB设计复杂度。8 s& w- z6 ?7 S: [; l
    QSPI在不同系列STM32产品线的支持情况(仅部分罗列,未涵盖所有支持型号)。

5 V6 k0 d7 c+ t 11.jpg
6 W" @, d% \# C5 J7 m        
7 \. P8 o9 u0 r5 M$ u  }" f    QSPI接口提供了灵活可配置的5个阶段,如下图所示(仅用于理解阶段构成,时序图根据配置不同存在差异)。分别是命令阶段、地址阶段、复用字节阶段、Dummy阶段和数据阶段。可以根据外扩Flash中命令时序对不同阶段进行配置。后续会以实例进行呈现。更多内容请参考AN4760。
# X8 o, Q4 f9 A) G" a1 C
12.jpg ; l3 Q9 u5 N7 y+ K8 W" a9 `
    QSPI支持三种模式,分别是:
8 t9 [: a; {6 L6 l  Z8 U+ B% t    间接模式---所有操作通过QSPI寄存器实现,类似于传统SPI,可以使用阻塞模式、中断模式或者DMA模式进行读写等访问。本文中提供的实现例为间接模式下的实现。0 s$ J& F9 N. P. U, M. T2 v
    状态轮询模式---接口自动轮询指定寄存器,直到回读寄存器内容与指定条件匹配。可应用于状态检测,从而实现忙等待等效果。本文不对此模式进行实现介绍,应用实现可参考Cube软件包中QSPI例程。
% }! ^. ]/ C, }/ E! O    存储器映射模式---外扩Flash被视为内部存储器,支持AHB主器件直接访问,CPU能够直接运行位于QSPI存储器的执行代码。内部系统架构如下图所示(以STM32F469/F479为例)。本文不对此模式进行实现介绍,应用实现可参考Cube软件包中QSPI例程QSPI_ExecuteInPlace。) g1 U5 n( \" v  a
13.jpg
& J9 l  Z% R& @" {1 G: D7 @
4 W5 W  @, C- e, Q2 F三 QSPI外扩串行Flash实现例7 W, D+ Q) Y5 W
4 T- U6 Z0 G/ Q& v

0 j/ |3 I7 f' E, G. f3 w3.1 串行Flash介绍/ }0 c  u" t  J0 W7 O
    以MICRON N25Q128A13EF840F为例,更多细节请参考存储器手册。N25Q128A13EF840F引脚图、时序图和电气参数来源于N25Q128A13 手册文档。
5 a9 C1 V. `7 L& [  G8 K    支持协议: SPI, Dual I/O(对应Dual-SPI), Quad I/O(对应Quad-SPI)
  s5 w, Z) G0 I4 \% Z. z    支持访问模式: 单线访问、双线访问、四线访问,得益于 QSPI接口的灵活可配性,三种访问模式全部支持。- j. [& o+ O2 f9 ^0 X* {
    供电电压范围: 2.7 ~ 3.6V& g/ P8 H8 W$ ?- U" d& w" F
    最大时钟频率: 108MHz
) ?! |; @" q% \! z# R- y( y    存储空间: 128Mb (16MB)
+ @* c) H: w9 P" Z  o' X    器件引脚示意图如下所示。由两根电源引脚和六根QSPI信号线构成。
% ?+ W. ?' e5 {1 V
14.jpg
, V5 `7 }/ L! S, T7 E/ Z8 c4 H    下表为存储器N25Q128A13xxx命令(未列出全部命令)。通过下表可知,存储器提供了灵活的访问实现形式,而结合同样灵活可配的QSPI接口,能够实现存储器命令全支持。而本文仅为提供设计思路,呈现了部分命令在QSPI上的实现。
2 L$ U9 V" D! K5 Q! H: m
15.jpg
4 T2 m* _' `7 T7 P  j! a; i0 R. \1 V    其中,默认读写默认3字节地址,四线快速读命令默认Dummy 周期数为8。
0 J3 n( h! ^1 E0 i( l& b7 ]4 A- i' S! s% w
3.2 硬件设计
+ u- h; E: M0 ~    涉及到的信号线少,硬件设计简单,只需直接将QSPI的六根信号线与存储器连接即可。考虑到可测性,可以增加串行电阻或者测试点。硬件电路图如下所示。
. [$ D6 ]# _* \  z0 D
16.jpg " X; N1 x% W: R) _0 s1 f
        # }+ @) G# i8 P$ `( j* W
    QSPI接口PCB设计遵循如下几点,更多硬件设计内容请参考AN4488。) @- W% ]8 c) E
    a. 线阻 50Ω ± 10%
. e0 `1 f' }+ h  c& N3 U    b. 最大线长 < 120mm- f% L! @( _" w" r! n
    c. 避免在不同信号层走信号线
$ ?, Z2 F2 K6 p    d. 时钟线至少离其他信号线3倍线宽距离
6 {, }& K7 X! a# ^. d    e. 数据信号线长差 ≤ 10mm
' e+ j6 k8 H) s5 D    f. 避免时钟线采用蛇形走线,同时尽量减少数据线上过孔。
8 V  j7 f2 u; k. X
( x' Y. z. t% Q* H  Z  T7 S$ T3.3 软件开发流程) k! w% t3 @2 e2 x" L
17.jpg 6 w1 F; N- X2 r+ S5 S7 o& R
6 r% b7 L: m# U! ~0 T
3.4 软件实现例- Y) N9 V  L: H* [# K
    在环境搭建完成后,就可以利用STM32CubeMX根据硬件连接情况,进行QSPI配置,获取IAR工程。具体软件实现流程如下。
1 V) K, c! G. m/ G, r& V$ B
18.jpg
9 e! y4 a! {5 \" p
* Z  c( m/ P  Z: {( A" F7 i    a. 利用STM32CubeMX生成IAR工程
/ |& U3 @5 G: ]    打开STM32CubeMX---点击”New project”---在”Part Number Search’中输入STM32F469NI---点击”MCUs Liast”中出现的STM32F469NIHx---点击“Start Project”  此时,基于STM32F469NIHx的STM32CubeMX工程被打开。: _7 w" A* k& c" T% q1 M: Y* U4 h
    如下,根据STM32F469I-DISCO板硬件连接情况(QSPI NCS, CLK, Q0, Q1, Q2, Q3对应PB6, PF10, PF8, PF9, PF7, PF6;外部高速晶振为8MHz无源晶振;调试接口采用SWD接口,其中SWCLK, SWDIO对应PA14, PA13):
0 ^7 d5 `7 e3 L& h" E( Y4 W; ]选择” QuadSPI”为”Bank1 with Quad SPI Lines”(注:也可在开发过程中,先用STM32CubeMX查看QSPI接口对应的IO引脚,进行硬件开发) 。
: X1 H0 {) [. ^. n( d    注: 在如上选择后,右侧引脚图中QSPI对应的引脚会呈现绿色显示。需要根据电路图中所连接的QSPI引脚,进行复用引脚确认。例如,在默认情况下,QSPI IO0对应到PC9引脚,而STM32F469I-DISCO板上的QSPI IO0与PF8连接,并非PC9。所以,需要在右侧引脚图中,按住Ctrl键,左键在PC9引脚按下,拖动至PF8处,松开左键和Ctrl键,实现IO0引脚的关联。
% b% i9 q( m: z; D" l    选择“High Speed Clock(HSE)”为“Crystal/Ceramic Resonator”。, Z7 g) W7 ^/ a' S6 K% E* f, i
    选择”Debug”为”Serial Wire”$ g7 d3 E/ ]- V8 V6 J
19.jpg $ z8 G5 M- ~+ o* l* v2 U

9 {! y9 f' I3 k7 F0 r! u7 ^    时钟配置如下图所示。设置输入时钟频率为8MHz  选择”HSE”做为PLL倍频时钟源  选择”PLLCLK”做为主频时钟源  设置 “HCLK”为180MHz (FAHB 为180MHz) 点击 Enter键,自动生成对应主频的时钟参数(仅提供时钟配置参考,并不限制一定要设置180MHz主频)。2 \$ A; S. f8 D% G! M. u% l
21.jpg # O3 ?. a- d+ I; o
    QSPI配置如下图。参数的配置需要与存储器参数匹配。
' u1 @% @1 @  d3 ]2 y    • FIFO Threshold(FIFO阈值) 配置为4,并不严格要求。
8 g$ o! L( f2 @; l" A7 Y& ?    • Smaple shift 选择“Sample shifting half cycle”。延后半个时钟,获取数据线上数据。可以使用在由于线路设计,数据信号存在较大延迟的场景。
6 v. L, E3 s3 ]: _' d6 B1 R8 f. O
22.jpg # X& m8 h, V- q% v" [
    使能QSPI中断。
7 |8 T$ T, X' o3 C) Z% n 23.png
) |2 [5 b0 z4 ~7 o    点击菜单栏”Project”---“Settings”---设置”Project Name” , “Project Location” 和 “Toolchain / IDE” 。其中“Toolchain / IDE”设置为EWARM以便生成对应IDE的工程。其他选项保持默认。
1 d  R8 f6 @- d; Y1 m- V    点击菜单栏”Project”---“Generate Code”---等待IAR工程生成,出现”Code Generation”界面---点击”Open Project”打开工程。
+ W6 o8 A3 h  I1 K/ N4 z    b. 完善工程。
+ n; G/ H) \. k  G) L     由上述步骤获得的IAR工程中,包含了时钟配置及QSPI接口的初始化。对于外扩Flash的操作,还需要 添加外扩Flash支持的命令进行操作。N25Q128A13EF840F支持的部分命令可参见本文3.1小结。
* E+ @) W. h7 Z  ?$ `$ ]    在这里出于简化考虑,仅提供了阻塞式读取ID,擦除Flash,块写和快读操作的实现。更多实现模式,可以参考Cube软件包中提供的QSPI例程。( c* I  @* ]! q# e
    在N25Q128A13EF840F手册中提供了读ID命令时序,如下图所示。
3 ?. L4 f: t3 P& Q- s1 [) L8 C 25.png , R3 b- t$ x' z( M9 A
    由时序图可知,读ID时序构成: 命令阶段 + 数据阶段。命令阶段和数据阶段线宽都为1,读ID命令码为0x9E或者0x9F,ID数据长度为17字节。
- [5 R5 u8 E3 L    在N25Q128A13EF840F手册中提供了写使能命令时序,如下图所示。
; x$ A7 s# s+ \. `3 M4 }& D- D 24.jpg : l5 y+ Q7 M- B
    由时序图可知,块擦除时序仅有命令阶段。命令阶段线宽为1,写使能命令码为0x06。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
, r* _% j) Z0 K! Y    在N25Q128A13EF840F手册中提供了扇区擦除命令时序,如下图所示。
3 c( }: u$ {- y0 G+ l 26.jpg
, T- h" G1 v2 F7 I4 V" o# n* J    由时序图可知,扇区擦除时序构成:命令阶段+地址阶段。命令阶段和地址阶段线宽为1,扇区擦除命令码为0xD8。其中地址为24-bit,任一位于需要进行擦除操作的扇区范围内地址都有效。在此简单选择扇区0进行擦除,选择地址为0。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。; J4 Y( L9 Z+ u+ H2 c) [( @  W8 q
    在N25Q128A13EF840F手册中提供了四线快速写命令时序,如下图所示。- j% N! k% Y% E5 h* |( H9 z
27.jpg 4 K1 C# R1 L4 \) ~* V
    由时序图可知,四线快速写命令时序构成:命令阶段+地址阶段+数据阶段。命令阶段和地址阶段线宽为1,数据阶段线宽为4,四线快速写命令码为0x32。其中地址为24-bit,对应写入起始地址。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。7 a6 E# P& n4 |/ s: e
    在N25Q128A13EF840F手册中提供了四线快速读命令时序,如下图所示。3 t5 H( B2 ?- P+ N* D8 j
28.jpg ! i9 D8 o9 D: O
    由时序图可知,四线快速读命令时序构成:命令阶段+地址阶段+数据阶段。命令阶段和地址阶段线宽为1,数据阶段线宽为4,四线快速读命令码为0x6B。其中地址为24-bit,对应写入起始地址。四线快速读命令默认Dummy cycles为8。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
3 F3 r9 S) K: G! M    在main.c \ main函数中,增加代码如下。
0 u8 H9 |3 i4 q9 ]6 ?& b, A 29.jpg
- u. i! x6 K* k2 ]0 ~) R 31.jpg 4 J+ s% z9 c. |" Z4 {) _8 x
32.jpg
8 p$ O. ^' R. i- ^' X# @9 n, } 33.jpg 2 i5 M4 W) o9 M
0 }5 G4 `" N: c) }3 `+ Q

& @* f2 L# {! Z四 小结
3 h" c% i. R1 B7 ]3 Z3 F! W1 k    STM32的QuadSPI接口灵活可配,对于命令阶段、地址阶段、复用字节阶段、Dummy阶段和数据阶段都可以进行配置。基于这种灵活性,能够实现市面上SPI、Dual IO、Quad IO的串行Flash支持。但出于简化考虑,QSPI支持的中断访问及DMA访问等更多功能没有在本文进行介绍,更多实现可以参考ST提供的Cube软件包中的QSPI例程。另外,不同厂家的串行Flash命令及操作实现略有差异,具体以采用的Flash文档描述为准。

3 B* @3 h# A0 A, n' ^( R
" A/ ^# b: y, i$ Z2 m
" N) O/ y1 Y! H" t3 o. d( r- u文档下载1>>         文档下载2>>       更多实战经验>>
0 ?- R4 P0 \1 }) J: v7 P& G* @
$ u  D' }- D3 [4 i1 p' V
: L8 n& n" W: s0 \8 e
收藏 2 评论5 发布时间:2017-9-28 15:51

举报

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

5 X6 k# j& u; K+ n) _3 \mark一下
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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版