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

【经验分享】STM32H7代码运行在外置flash的部分总结

[复制链接]
STMCU小助手 发布时间:2021-12-28 23:00
场景
" E- G8 t2 L. ^1 q* Y2 F项目中需要用到STM32H750这款ARM cortex-M7内核的单片机,它作为H743的阉割版,它的内置flash只剩下128K。但是对于我们需要有IAP升级的项目来说,这128K(一个扇区)完全不够用,所以需要外置QSPI Flash。但是使用外置QSPI Flash又引入了新的问题。
, N0 m0 O- x/ D+ p# D- b( O+ O7 _- B1 \& v6 i% z7 f+ W, X) I3 c* Y
问题一:需要自己写分散加载文件

: e) p/ z. {  `6 c3 \7 S首先介绍一下什么是分散加载文件:我们的代码在编译以后,需要由编译器链接到指定内存地址上,平时我们在STM32内置的flash上可以直接使用keil生成的分散加载文件就可以,但是keil并不知道我们外置的flash,所以需要我们自己来完成这部分工作。
) B* {/ f3 X* I& b; e
3 ^; M: ~3 W  }2 l" a3 ~' Vkeil中的配置如下图所示:" ]. R0 q  N/ V8 i  Y, w, C
8 a4 f# I- ~( e1 }
20210601102703723.png
" S9 L) _6 O0 K8 Q3 g% ^$ C
4 J# `) G7 f4 A1 a1 i" m
分散加载文件如下图所示(了解了ro、rw、zi代表了什么,就可以自己定义下面的各个地址空间):) K+ A, d2 C5 v5 r/ c
* c. n! U  i" Q' v7 I
20210601102901962.png
$ h  x' u9 e; j5 C0 l8 y* ~- v2 _

6 ^1 Z: `  n2 h0 x
/ z. r$ _; C2 T6 B4 {1 p- p问题二:运行在STM32片内flash速度比QSPI Flash要快多少

" Y2 r2 s* a. l% y6 m运行速度的差异是很重要的,不能因为外置flash就让我的高性能芯片效率变低,所以我测试了两种代码运行方式的运行速度进行对比,如下图:4 Q+ \, R8 B  z  F9 @+ z7 V) z

& I$ Q" _5 v9 r
20210601102922170.png
5 n5 _3 K) \! H5 H

7 s8 C0 S" s1 s: e) F  g​ 左图为QSPI Flash的运行时间,右图为片内flash的运行时间,由此我们可以看出,两种运行方式的速度差距不大。
" s+ U% q+ T- O6 N; l9 ]" [/ b. u8 i5 Q: P+ w( N
既然一种是外置的一种是内置的,而且外置的QSPI 芯片时钟频率最高才100多M,为什么速度差距不大呢?
, ]% u/ Z: G. f1 @% ?  Q: ?; V$ I- ], g& }7 ~2 D
我的分析是:因为我们使用的是H750芯片,这款芯片带了一个一级缓存,由于这个缓存的存在,让两者的速度差距不是那么大。
5 b, W. z! o  ?! ]# P5 U问题三:MDK对应的下载算法怎么写?3 A! H2 B( @: s% I2 g! U: ~
首先我们来说一下什么是下载算法:我们在配置keil工程时,会在魔法棒里面的debug选项处选择我们的下载方式(一般为jlink),然后再setting里面我们会选择flash download来add一个选项,这个选项就是下载算法。如下图中②所示,那些选项就是我们要的下载算法。
2 U  r: v5 f+ k) i2 t# G( s0 }
, F$ B9 J; j0 n- k, O
2021060110302059.png
2 Z/ _2 ]! {: O1 O  W4 u
  y; U) h5 n$ m: f" V2 i% g
下载算法的本质:下载算法其实就是一段加载到sram里面运行的STM32程序,这段程序的作用就是和keil通信,接收keil发过来的数据,然后把它写到对应的flash中。上图①所示就是这段程序的加载地址以及它的大小。因为每款芯片的外设不一样,外挂的flash型号不一样,所以没有一款算法可以兼容所有的芯片,我们得学会根据自己的硬件环境来写对应的下载算法。
* I9 w' V4 k. R- X
+ s/ y4 z& V; b; d如何写下载算法:
' M8 B# A' z0 R& {, A2 o" ]1 X3 S4 v
首先我们找到我们的keil安装目录下(比如D\keil5\ARM\Flash\ _Template),这是keil官方给的一个模板工程,我们按照这个模板工程把需要的驱动加入其中。
: {" v1 D! {1 A+ G& v" v
1 \5 Q; F( ^& i/ O如下图所示,我们自己添加一个HARDWARE文件夹,把需要用到的驱动放入工程中。上面三个文件是标准接口文件,不能动。% t/ y7 Q- R. T2 D8 p
  c9 k0 [4 m, l9 b- C, h+ Z! W- U
20210601103107860.png
# k3 H2 n/ t/ X! G+ l8 h4 n6 o
6 U4 P% ]2 }! x
模板工程FlashPrg.c文件接口函数如下图所示,我们只需要在他们给定的函数接口中实现自己的逻辑即可。
4 v8 d: T! O; d$ X7 }% q
8 T: D* _* B6 _/ |! o' \
20210601103205494.png
% W5 M% v* T8 U/ h0 n. @

+ ^* w: B# p' q4 ?: t/ k7 s9 h模板工程FlashDev.c文件接口函数如下图所示,它是给keil进行识别的文件,对照进行修改就行。4 \0 U) F% E; R# t8 A3 v6 H% r
: q. j' J  k5 E6 s9 Q
20210601103234589.png
- T  ~* H6 g  O+ o& i

% U  N: E% H) z9 A0 |  b: H" ]6 \在全部修改完成后,进行编译,会在根目录下生成一个.FLM的文件,这个就是我们上面所选的下载算法,我们把它复制到D\keil5\ARM\Flash目录下,然后我们就可以在keil中选择到我们自己写的下载算法了,如下图所示:5 C6 D; l# z; C9 x
" P( \! I/ u  K! B( K$ x& O
20210601103307396.png

% \1 W1 B9 x4 {7 F) Z( h6 O7 h" Q' |9 A

, _0 Y* r7 u4 Z; K
收藏 评论0 发布时间:2021-12-28 23:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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