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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 23:00
场景$ z+ K- B+ g- P, f7 P$ e
项目中需要用到STM32H750这款ARM cortex-M7内核的单片机,它作为H743的阉割版,它的内置flash只剩下128K。但是对于我们需要有IAP升级的项目来说,这128K(一个扇区)完全不够用,所以需要外置QSPI Flash。但是使用外置QSPI Flash又引入了新的问题。8 I1 [' ^1 ~! c/ @5 e' o

! e- s& S  H( C3 o0 I0 H* C问题一:需要自己写分散加载文件
1 g) ]' Y$ E, Q; d, W( G
首先介绍一下什么是分散加载文件:我们的代码在编译以后,需要由编译器链接到指定内存地址上,平时我们在STM32内置的flash上可以直接使用keil生成的分散加载文件就可以,但是keil并不知道我们外置的flash,所以需要我们自己来完成这部分工作。
) G  d, _2 H& k4 M9 e
# N' `  I( C+ k: ~' |7 skeil中的配置如下图所示:% p% X; J6 v  q, E0 R) T: H$ R& ~
) N# {# W% V/ ~8 n3 h7 Q" Y! n+ ?
20210601102703723.png

, W  v% v; ?- J5 j) G, t3 D* A, c+ L
分散加载文件如下图所示(了解了ro、rw、zi代表了什么,就可以自己定义下面的各个地址空间):
+ N: A; f5 {5 c( i) |' S0 \7 h: Z3 x& v: E! _5 t; }
20210601102901962.png

/ ]6 O6 j9 O6 m$ m; _- H
$ c  F- g  Z0 g" {4 W# w9 j6 v1 I( U1 o" V' t  O) d1 {' |
问题二:运行在STM32片内flash速度比QSPI Flash要快多少

! z! Z4 L3 p8 J! o$ C& x& q) G运行速度的差异是很重要的,不能因为外置flash就让我的高性能芯片效率变低,所以我测试了两种代码运行方式的运行速度进行对比,如下图:, h& ]; J6 U9 w) o- }- U' Z

* {* ~/ |& d8 @1 d* W
20210601102922170.png

, O# J' A8 r$ C; m# R
" c( q; ^0 V5 i​ 左图为QSPI Flash的运行时间,右图为片内flash的运行时间,由此我们可以看出,两种运行方式的速度差距不大。
6 M# c1 ^+ v9 ~6 u4 u- l6 ^+ D% p( ~' r# i. o
既然一种是外置的一种是内置的,而且外置的QSPI 芯片时钟频率最高才100多M,为什么速度差距不大呢?
% C0 x! z- R! @' V. l* R: k! k
4 Y* F& I4 p1 q' m" c& _我的分析是:因为我们使用的是H750芯片,这款芯片带了一个一级缓存,由于这个缓存的存在,让两者的速度差距不是那么大。
5 _: z( [3 g3 d: ]问题三:MDK对应的下载算法怎么写?% p$ j) }: `* S
首先我们来说一下什么是下载算法:我们在配置keil工程时,会在魔法棒里面的debug选项处选择我们的下载方式(一般为jlink),然后再setting里面我们会选择flash download来add一个选项,这个选项就是下载算法。如下图中②所示,那些选项就是我们要的下载算法。8 y! \4 H( ]9 ^; Y

9 u: P( z" _/ u; Q; T& O# E
2021060110302059.png
) |  ~1 [1 {, e; e6 p6 Q# E

- z( Y  L1 w( {- H, o5 H: p: j' f3 k下载算法的本质:下载算法其实就是一段加载到sram里面运行的STM32程序,这段程序的作用就是和keil通信,接收keil发过来的数据,然后把它写到对应的flash中。上图①所示就是这段程序的加载地址以及它的大小。因为每款芯片的外设不一样,外挂的flash型号不一样,所以没有一款算法可以兼容所有的芯片,我们得学会根据自己的硬件环境来写对应的下载算法。
! q  B7 |5 Q. i: Y) @3 {' D( h/ l+ N* ~) t
如何写下载算法:% O( u  W& [' z
' H" T( M+ ?  [( e8 s" V
首先我们找到我们的keil安装目录下(比如D\keil5\ARM\Flash\ _Template),这是keil官方给的一个模板工程,我们按照这个模板工程把需要的驱动加入其中。
* ^6 J5 f6 U5 |0 `' ?9 L/ ]
4 O/ u( i5 F; Z1 g如下图所示,我们自己添加一个HARDWARE文件夹,把需要用到的驱动放入工程中。上面三个文件是标准接口文件,不能动。
5 }+ G; Y; u, D' U* R
, e; E) b$ ^. ~0 _3 ^; d
20210601103107860.png
/ |+ e8 E0 Q. `
* o5 c' p8 o5 r3 R3 W  ?3 {) j
模板工程FlashPrg.c文件接口函数如下图所示,我们只需要在他们给定的函数接口中实现自己的逻辑即可。8 k* k: n/ ]5 R9 E& y
1 F0 c( e+ r2 m; R8 W- k
20210601103205494.png

3 u( Y( [; G! y  `
, ^% h& J+ K: K; ~' c" l# F模板工程FlashDev.c文件接口函数如下图所示,它是给keil进行识别的文件,对照进行修改就行。
% l! `4 _4 I! c5 u) w& y: i0 u! d- O. O& {) ^, R
20210601103234589.png
# }3 w! C/ m5 X4 s! ~

/ O6 {  _( P1 a; g) }* U在全部修改完成后,进行编译,会在根目录下生成一个.FLM的文件,这个就是我们上面所选的下载算法,我们把它复制到D\keil5\ARM\Flash目录下,然后我们就可以在keil中选择到我们自己写的下载算法了,如下图所示:: F5 Y  C4 G6 Z% `! k5 E* K

$ B( }1 g: k5 l% [
20210601103307396.png
# j7 U# l3 @7 q9 J0 J& z4 E8 g

! w& X, }3 w( _0 g
  e% A4 y9 ?2 D- N3 [0 v1 |% x
收藏 评论0 发布时间:2021-12-28 23:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版