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

通过 KEIL 制作 QSPI 接口的外部 Flash 下载算法

[复制链接]
STMCU小助手 发布时间:2023-2-19 18:00
1. 引言3 e6 j  I! @) g1 o) D

7 ~+ ?: D5 Y" J* G/ j/ r随着用户的应用越来越复杂以及 GUI 等需要大存储空间的需求越来越多,很多时候我们需要将代码或数据放在外扩的 Flash 存储空间。但是这样存在一个外部 Flash 烧写的问题,尤其是在应用调试时,需要将代码或数据烧录到外部 Flash。如果调试工具不能够一键烧录,势必会给调试带来诸多的麻烦。本文以 STM32H750 芯片为例,介绍通过 KEIL制作 QSPI 接口的外部 Flash 下载算法的方法。
) V% L+ s' O# L4 O( K0 {2 [1 e- z% o2 l9 G2 U- S
3 v; a8 ?9 J1 P" u+ ^% ]" P, o: r
2. MDK 下载算法基础知识/ x) d/ m0 g* s$ m* T% V+ d2 J
FLASH 编程算法是一种用于擦除应用程序或将应用程序下载到 Flash 的程序代码。MDK 本身支持的各种器件都自带下载算法,存放在 MDK 各种器件的软件包里面,以STM32H7 为例,算法存在于 Keil\STM32H7xx_DFP\2.6.0\CMSIS\Flash(软件包版本不同,数字 2.6.0 会不同)。但是,只有 STM32 官方部分开发板提供了算法工程,大多数用户开发板都需要自己编写下载算法。不同的 QSPI-FLASH 的驱动略有差别,因此下载算法也不同。所以,掌握通用的下载算法制作步骤很重要。. x0 f4 R, w" {- j+ u
MDK 通过创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后在 MDK 调试下载阶段,会将算法文件加载到芯片的内部 RAM 里面(加载地址可以通过 MDK 设置),然后 MDK 通过与这个算法文件的交互,实现程序下载,调试阶段数据读取等操作。
/ I4 C- K8 Y; Y- i
4 R; `' E: F% i. o

7 `4 L+ |( ^7 `* x3. 程序擦除操作执行流程6 {6 n: e' k2 J1 z4 E+ X
如图 1所示,可以看出 Flash 的擦除过程包括以下几个步骤:# R/ e/ A, Y% z$ t; t/ C
a) 加载算法到 RAM(一般指片内 SRAM)/ t- N: n+ w, V, ]
b) 执行初始化函数 Init
  k0 S  n4 L9 I2 a! Ac) 执行擦除操作,根据用户的 MDK 配置,这里可以选择整个芯片擦除或者扇区擦除。9 Y, I; p2 y. e" n/ E8 q  j
d) 擦除操作结束后执行 Uninit 函数
. O- P% N( G* R4 V8 R5 p' {- E+ z
) b' Y  j, h2 E; I9 D% e: I

# K' \5 t0 ?$ G* U0 X3 B9 q XCJEENEDBQY6B8TF)IX}F00.png 1 q/ F3 [8 |- h" n7 y) a& K

# C# ]9 e9 j1 Q( i( B5 [

2 @: c: {, ^& l# \  X2 S( R4. 程序烧录操作执行流程' C7 g# `& U8 {
如图 2所示,程序烧录执行流程包括以下步骤:, ~: F) z4 T% M$ ?) ~( [5 I
a)对所有的 AXF 文件做 init 初始化(AXF 是 MDK 生成的可执行文件,也就是需要烧录和调试的代码)
" I2 n' h2 ]* ~b)查看烧写算法 FLM 文件是否存在,如果不存在,则操作结束;如果存在,则继续
' F& N* q5 c; F8 r3 S( Ic)加载算法文件到 RAM 中
5 G" Z, o) r' m7 u9 c3 o% f& Xd)执行初始化函数 Init
3 H( t# I" q; K3 r% v/ e6 O6 [* pe)加载用户程序代码至 RAM 中) K" Y$ F# o5 G6 U9 A! Z$ I
f)执行写入编程函数 Program Page: g9 s$ J4 C/ T2 n$ B. S% h
g)执行 Uninit 函数2 Q3 t1 Z8 R, u5 w1 ~! @
h)操作结束
% R1 q& |5 [6 `0 J0 H  m! b4 F0 \& _  v* q' |) q9 Q+ o' M  O1 |& u6 L
0 o3 @0 v& i. b% E" n
SSJ2A0W(RPPS$R}$PN]K6$K.png
+ X9 g& Q1 q9 @' F6 P  K; S% N
* J; e- t: S. ?, N7 ~, x
9 b& v( ~( R# o# s, p/ V" m4 h: x
从以上操作过程中可以看出,我们的用户代码是先放在 RAM 中缓存的,然后 IDE 通过调用 RAM 中的 FLASH 写入函数 Program Page 将代码写入到 Flash 中,完成代码的烧录3 j5 L9 O8 o' U4 Q) T$ f

2 _& v; x) A0 Y" \: `
7 `; Y1 m6 e* P0 I+ ]

7 h. n: X) ?' X- Y8 ]8 @完整版请查看:附件 通过KEIL制作QSPI接口的外部Flash下载算法.pdf (1.75 MB, 下载次数: 68)
收藏 评论0 发布时间:2023-2-19 18:00

举报

0个回答

所属标签

相似分享

官网相关资源

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