请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
zero99 发布时间:2017-9-28 15:51
利用 QuadSPI外扩 串行 NOR Flash的实现

9 L* @) |. v+ G& m9 Y+ R; ^. p3 e前言1 Y- T. M! y7 z, U  h
STM32提供了灵活多样的外扩存储器访问实现。本文中,介绍如何利用QSPI (QuadSPI) 外扩串行NOR Flash存储器。首先对QSPI接口功能特性进行介绍,然后分别介绍硬件设计和软件开发。并基于STM32CubeMX,提供访问MICRON N25Q128A13EF840F的实现参考。  @. W0 C8 s* V, x/ [$ s; C
9 Z) L- Q3 f' L; E! r
一 实现环境* M2 s4 U& Q  N0 J  `2 S+ g$ l  K
    开发板:STM32F469G-DISCO2 r1 Q8 q, N5 v
    开发库:STM32CubeF4 v1.16.0
7 V$ ?3 I/ J; y" c  W    STM32CubeMX: v4.22.07 E1 c- T  q  F3 K2 Z9 K6 g7 Z/ m" i
    集成开发环境:IAR v7.70.1.11486) L) ]* x7 r, h  E& V9 Z
5 b4 O7 o/ v' z. V
    实现过程在STM32F469I-DISCO板上展开,利用板上已有的串行NOR Flash存储器(MICRON N25Q128A13EF840F)。呈现整个开发涉及环节。在本文中,首先根据QSPI接口,介绍QSPI与外扩串行存储器硬件连接。另外,Cube软件包中包含QSPI实现例,在本文对库中实现的QSPI例不做讨论,读者也可参考这些QSPI例进行设计。本文围绕由STM32CubeMX生成的工程,介绍如何实现对外扩串行NOR Flash存储器的访问。8 T# F! q# C' Z3 i( M$ ?7 P

: L2 G3 g1 P! `; |) ^二 QSPI介绍
5 @% l' F  z+ G5 U    在呈现QSPI访问外扩Flash的实现例前, 需要对QSPI有一定的了解,在此对QSPI进行简短的介绍。更多内容请参考AN4760。# F! N3 h- W' t( d- a
    QSPI(Quad-SPI)支持四线串行访问形式。同时,QSPI支持传统SPI和Dual-SPI模式,Dual-SPI模式支持两线串行访问。与FMC/FSMC比较,QSPI支持更低成本、更小封装外部串行Flash存储器,更少的IO引脚占用,有效减少PCB面积,降低PCB设计复杂度。
# p% n; ]: B% K7 {* |2 W( F    QSPI在不同系列STM32产品线的支持情况(仅部分罗列,未涵盖所有支持型号)。
$ N2 u. y$ f4 _7 ], i
11.jpg
/ b6 ]0 G' L& I) y6 K        
* c2 ^' h- K1 U, e* n    QSPI接口提供了灵活可配置的5个阶段,如下图所示(仅用于理解阶段构成,时序图根据配置不同存在差异)。分别是命令阶段、地址阶段、复用字节阶段、Dummy阶段和数据阶段。可以根据外扩Flash中命令时序对不同阶段进行配置。后续会以实例进行呈现。更多内容请参考AN4760。  Q/ j" j6 I$ c) `' a9 k
12.jpg
8 _$ \. n" l& N0 c% H    QSPI支持三种模式,分别是:2 M* v& G9 ~. O1 |7 ]" ]* z
    间接模式---所有操作通过QSPI寄存器实现,类似于传统SPI,可以使用阻塞模式、中断模式或者DMA模式进行读写等访问。本文中提供的实现例为间接模式下的实现。
: G% q" p& W6 t& s# G* F( s2 D' U/ [    状态轮询模式---接口自动轮询指定寄存器,直到回读寄存器内容与指定条件匹配。可应用于状态检测,从而实现忙等待等效果。本文不对此模式进行实现介绍,应用实现可参考Cube软件包中QSPI例程。5 p, I1 P" j2 r9 _
    存储器映射模式---外扩Flash被视为内部存储器,支持AHB主器件直接访问,CPU能够直接运行位于QSPI存储器的执行代码。内部系统架构如下图所示(以STM32F469/F479为例)。本文不对此模式进行实现介绍,应用实现可参考Cube软件包中QSPI例程QSPI_ExecuteInPlace。- c, ^& o+ X1 A% x  D5 D1 K
13.jpg 8 b' z3 E1 R2 ?( O

* e* _4 H5 G: O; a9 w# l三 QSPI外扩串行Flash实现例4 Q: ?# @5 U6 }+ f' m$ }1 G+ |1 e

/ v  R5 y' _/ C9 f5 p& i/ V! h6 ?/ ~4 T" E" n
3.1 串行Flash介绍
/ [/ P  H6 S8 v8 z: o/ K    以MICRON N25Q128A13EF840F为例,更多细节请参考存储器手册。N25Q128A13EF840F引脚图、时序图和电气参数来源于N25Q128A13 手册文档。
' L# G& B  p5 P  v5 z" ?+ r    支持协议: SPI, Dual I/O(对应Dual-SPI), Quad I/O(对应Quad-SPI)
* R1 @6 O. u3 w- J' @% e4 F- C    支持访问模式: 单线访问、双线访问、四线访问,得益于 QSPI接口的灵活可配性,三种访问模式全部支持。
5 ~0 W3 H; u: O' k    供电电压范围: 2.7 ~ 3.6V" ]! V* h  @+ q8 m
    最大时钟频率: 108MHz. |! J# p+ x' k) H& ~- z
    存储空间: 128Mb (16MB)
5 T6 [% F1 T+ N2 N3 T  W# _    器件引脚示意图如下所示。由两根电源引脚和六根QSPI信号线构成。& J! r6 b% @% b* h: t' N+ _' D
14.jpg
- c7 M9 k4 s# L* i6 z/ ~1 u* @    下表为存储器N25Q128A13xxx命令(未列出全部命令)。通过下表可知,存储器提供了灵活的访问实现形式,而结合同样灵活可配的QSPI接口,能够实现存储器命令全支持。而本文仅为提供设计思路,呈现了部分命令在QSPI上的实现。
' z) `* k) I, [9 a! [( D9 `
15.jpg ( }5 _. ^; s0 J. K9 ~4 {
    其中,默认读写默认3字节地址,四线快速读命令默认Dummy 周期数为8。
& u4 z0 r( G. p* p3 p# i! i5 N" p1 s; j
3.2 硬件设计2 I6 e8 o6 C, X. x$ R* _6 |% d
    涉及到的信号线少,硬件设计简单,只需直接将QSPI的六根信号线与存储器连接即可。考虑到可测性,可以增加串行电阻或者测试点。硬件电路图如下所示。9 g# y6 t4 `4 ^0 o# |
16.jpg 8 P' [( J* M$ Z' k/ J
        6 d. d- C/ ~, q% c* }
    QSPI接口PCB设计遵循如下几点,更多硬件设计内容请参考AN4488。
+ i2 j& _  C! q" p    a. 线阻 50Ω ± 10%( e( C' D" g2 V5 V' {% M/ b
    b. 最大线长 < 120mm* w2 ^# Y# t# b7 g1 O
    c. 避免在不同信号层走信号线
; R: ]! m7 F# g2 @0 Q2 \/ N; D    d. 时钟线至少离其他信号线3倍线宽距离
1 n* Q/ q. l( J4 |    e. 数据信号线长差 ≤ 10mm0 r# M- P3 ]8 v" E
    f. 避免时钟线采用蛇形走线,同时尽量减少数据线上过孔。9 p# c1 G& K+ ]8 M) [6 P9 w

2 P" x8 g# @! l* ]4 N3.3 软件开发流程
; s0 W9 q" Y0 C
17.jpg
, [) C5 b! r, o8 n: J6 |5 |  E3 ^1 X# B9 t. Y& z) B" x1 C) C
3.4 软件实现例
% v9 ^* O; A$ _' f4 Z9 P2 x    在环境搭建完成后,就可以利用STM32CubeMX根据硬件连接情况,进行QSPI配置,获取IAR工程。具体软件实现流程如下。* _# U- J, Y5 [. l; v
18.jpg # [! _8 K. S0 I6 u7 ~) |9 D7 Z
) @# x; N) n4 v9 f3 d
    a. 利用STM32CubeMX生成IAR工程
& q6 S- O# ^. a& Y* w' m    打开STM32CubeMX---点击”New project”---在”Part Number Search’中输入STM32F469NI---点击”MCUs Liast”中出现的STM32F469NIHx---点击“Start Project”  此时,基于STM32F469NIHx的STM32CubeMX工程被打开。
6 O) \# a8 y+ T    如下,根据STM32F469I-DISCO板硬件连接情况(QSPI NCS, CLK, Q0, Q1, Q2, Q3对应PB6, PF10, PF8, PF9, PF7, PF6;外部高速晶振为8MHz无源晶振;调试接口采用SWD接口,其中SWCLK, SWDIO对应PA14, PA13):
! }! Z) ^" T- O% M/ ?0 V6 `$ Z选择” QuadSPI”为”Bank1 with Quad SPI Lines”(注:也可在开发过程中,先用STM32CubeMX查看QSPI接口对应的IO引脚,进行硬件开发) 。
: a9 F: Y  D8 k' J* ?0 m# J- p    注: 在如上选择后,右侧引脚图中QSPI对应的引脚会呈现绿色显示。需要根据电路图中所连接的QSPI引脚,进行复用引脚确认。例如,在默认情况下,QSPI IO0对应到PC9引脚,而STM32F469I-DISCO板上的QSPI IO0与PF8连接,并非PC9。所以,需要在右侧引脚图中,按住Ctrl键,左键在PC9引脚按下,拖动至PF8处,松开左键和Ctrl键,实现IO0引脚的关联。
7 K- e% h6 D& s3 A' \1 |5 f    选择“High Speed Clock(HSE)”为“Crystal/Ceramic Resonator”。
5 n1 {- G# J; v7 w# C0 Z    选择”Debug”为”Serial Wire”) r' B/ q8 i$ I; ~) c& J
19.jpg ; A1 F7 h8 m! H, b
0 g! _+ X* l( a& \* |/ i
    时钟配置如下图所示。设置输入时钟频率为8MHz  选择”HSE”做为PLL倍频时钟源  选择”PLLCLK”做为主频时钟源  设置 “HCLK”为180MHz (FAHB 为180MHz) 点击 Enter键,自动生成对应主频的时钟参数(仅提供时钟配置参考,并不限制一定要设置180MHz主频)。
' w& m8 u( d7 O( s% u) u7 H' B7 ^/ a
21.jpg & c5 {* @; W9 Y( \! b
    QSPI配置如下图。参数的配置需要与存储器参数匹配。
" a  [$ c! i" ^( O0 w$ J- p    • FIFO Threshold(FIFO阈值) 配置为4,并不严格要求。: T+ ]; Z4 B5 z+ n$ k7 o& k7 R" E
    • Smaple shift 选择“Sample shifting half cycle”。延后半个时钟,获取数据线上数据。可以使用在由于线路设计,数据信号存在较大延迟的场景。) N5 E5 O' i# `! d4 I8 D& V. u
22.jpg
8 S% E/ T: W1 ~9 k. n, p    使能QSPI中断。
' ?3 g, {0 j* z% p9 h 23.png 4 D% b, `/ Q5 x
    点击菜单栏”Project”---“Settings”---设置”Project Name” , “Project Location” 和 “Toolchain / IDE” 。其中“Toolchain / IDE”设置为EWARM以便生成对应IDE的工程。其他选项保持默认。5 f2 A, R3 W8 h7 p" n, q- q
    点击菜单栏”Project”---“Generate Code”---等待IAR工程生成,出现”Code Generation”界面---点击”Open Project”打开工程。
* j% K% f. V; y/ i    b. 完善工程。4 P0 G0 o) y6 V7 e2 `8 E/ j
     由上述步骤获得的IAR工程中,包含了时钟配置及QSPI接口的初始化。对于外扩Flash的操作,还需要 添加外扩Flash支持的命令进行操作。N25Q128A13EF840F支持的部分命令可参见本文3.1小结。
/ A3 l* G- D. e6 q3 @: G    在这里出于简化考虑,仅提供了阻塞式读取ID,擦除Flash,块写和快读操作的实现。更多实现模式,可以参考Cube软件包中提供的QSPI例程。8 l9 b/ }. @1 D6 p. y: E* l
    在N25Q128A13EF840F手册中提供了读ID命令时序,如下图所示。
( ~) U; `& K5 X5 ]& `: R3 x) i  _ 25.png
) o9 I( ]/ w! W. }4 B' w    由时序图可知,读ID时序构成: 命令阶段 + 数据阶段。命令阶段和数据阶段线宽都为1,读ID命令码为0x9E或者0x9F,ID数据长度为17字节。, F# q( V, M! O4 j7 X  |
    在N25Q128A13EF840F手册中提供了写使能命令时序,如下图所示。
) c9 K; [9 K& x1 e 24.jpg ! P- d  ~0 ~) y; x2 H2 C
    由时序图可知,块擦除时序仅有命令阶段。命令阶段线宽为1,写使能命令码为0x06。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
/ f5 H/ S! [- x% [: N    在N25Q128A13EF840F手册中提供了扇区擦除命令时序,如下图所示。
) b% j! W) c* k6 W% e* [) _# ]" ~ 26.jpg . d! m5 n$ r3 O% ?* _% G
    由时序图可知,扇区擦除时序构成:命令阶段+地址阶段。命令阶段和地址阶段线宽为1,扇区擦除命令码为0xD8。其中地址为24-bit,任一位于需要进行擦除操作的扇区范围内地址都有效。在此简单选择扇区0进行擦除,选择地址为0。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
! @: H7 Y0 ^5 O. t6 o8 T    在N25Q128A13EF840F手册中提供了四线快速写命令时序,如下图所示。
; i) H; q1 t. U 27.jpg 8 h! H' C4 j9 h' B
    由时序图可知,四线快速写命令时序构成:命令阶段+地址阶段+数据阶段。命令阶段和地址阶段线宽为1,数据阶段线宽为4,四线快速写命令码为0x32。其中地址为24-bit,对应写入起始地址。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
* Q3 Y( S- r# [( v* U5 }! J    在N25Q128A13EF840F手册中提供了四线快速读命令时序,如下图所示。5 F! d7 M7 k. j7 X% c8 I7 b" Q
28.jpg
7 g& Q5 h3 I# A9 g6 f. {! T4 @    由时序图可知,四线快速读命令时序构成:命令阶段+地址阶段+数据阶段。命令阶段和地址阶段线宽为1,数据阶段线宽为4,四线快速读命令码为0x6B。其中地址为24-bit,对应写入起始地址。四线快速读命令默认Dummy cycles为8。(注:这里仅呈现了单线命令模式的实现。除此之外,STM32 QSPI接口和外扩存储器支持双线、四线模式)。
- L$ N# }# z6 f; R3 N2 o    在main.c \ main函数中,增加代码如下。
# X" w% V5 N. w8 h 29.jpg
. i3 d+ d/ I' i; d9 n 31.jpg
  O# U, U$ \' a2 \& `* } 32.jpg - t( `7 E6 }3 E
33.jpg
* z! p, V7 f4 J6 E3 c % T  T/ A# m0 @8 P5 O

, R5 A$ l7 V& \% N四 小结0 z% Q) n2 ?( [  N
    STM32的QuadSPI接口灵活可配,对于命令阶段、地址阶段、复用字节阶段、Dummy阶段和数据阶段都可以进行配置。基于这种灵活性,能够实现市面上SPI、Dual IO、Quad IO的串行Flash支持。但出于简化考虑,QSPI支持的中断访问及DMA访问等更多功能没有在本文进行介绍,更多实现可以参考ST提供的Cube软件包中的QSPI例程。另外,不同厂家的串行Flash命令及操作实现略有差异,具体以采用的Flash文档描述为准。
& t* K# Q$ m; ]
/ q$ F9 n* K; C9 i+ o# Z) f
* w# w9 }; g; r: D' I
文档下载1>>         文档下载2>>       更多实战经验>>
7 N6 D* w0 Z! n3 }  L6 Z" r
1 E* B0 V9 b. n/ d
- {! O9 S) w3 t
收藏 2 评论5 发布时间:2017-9-28 15:51

举报

5个回答
斜阳 回答时间:2017-9-28 16:38:42
mark一下
heweijian55 回答时间:2017-10-26 14:30:09
$ r1 F! J/ D$ c" j
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 手机版