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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 23:00
场景& y/ }# p: T+ a; @
项目中需要用到STM32H750这款ARM cortex-M7内核的单片机,它作为H743的阉割版,它的内置flash只剩下128K。但是对于我们需要有IAP升级的项目来说,这128K(一个扇区)完全不够用,所以需要外置QSPI Flash。但是使用外置QSPI Flash又引入了新的问题。  }' k9 S2 I: S% m
- z; ^# A" A+ }3 k
问题一:需要自己写分散加载文件
8 [+ i4 a; c& v5 B' y+ Z
首先介绍一下什么是分散加载文件:我们的代码在编译以后,需要由编译器链接到指定内存地址上,平时我们在STM32内置的flash上可以直接使用keil生成的分散加载文件就可以,但是keil并不知道我们外置的flash,所以需要我们自己来完成这部分工作。) ]0 ?7 c. D# c" d, [
0 I! N/ X# O! M' Q6 A1 G" P
keil中的配置如下图所示:# F! r# H1 f) Q6 \- i+ [2 Z

# s2 J7 O8 }) \6 y8 F2 e
20210601102703723.png

/ Y0 k  u" v0 w7 v, y" }7 F' E" f; G" J1 ^
分散加载文件如下图所示(了解了ro、rw、zi代表了什么,就可以自己定义下面的各个地址空间):! s+ ~4 W2 n1 [( ^9 f4 s' u8 F; [

2 O( q' N! A" ]4 K
20210601102901962.png

  C+ j0 s: {; ]" z% p' d8 v) a4 ?" [0 S  K1 `$ z* T9 H

/ H% ^' Y* g1 n5 d8 e7 ^$ T问题二:运行在STM32片内flash速度比QSPI Flash要快多少
: B" {+ j. S+ g5 L
运行速度的差异是很重要的,不能因为外置flash就让我的高性能芯片效率变低,所以我测试了两种代码运行方式的运行速度进行对比,如下图:! g) _7 q% p5 c3 N( k4 C" w2 G

  ]$ z' w) Q* z9 E! e4 Y
20210601102922170.png
0 m( i+ x# _. X6 }( L9 f
; _3 P; T! d6 q9 v
​ 左图为QSPI Flash的运行时间,右图为片内flash的运行时间,由此我们可以看出,两种运行方式的速度差距不大。
0 i  C0 O& a" y) ^2 S1 ~( ?8 F4 |4 |
) G0 E& o2 l2 \" z* V! F既然一种是外置的一种是内置的,而且外置的QSPI 芯片时钟频率最高才100多M,为什么速度差距不大呢?
! T% c" X3 F0 F& n; |: h7 G* d- G5 X- G3 P! p& k
我的分析是:因为我们使用的是H750芯片,这款芯片带了一个一级缓存,由于这个缓存的存在,让两者的速度差距不是那么大。
, A' l8 |; u5 ~: i% l' \2 r问题三:MDK对应的下载算法怎么写?/ J; l! N% q  R* S
首先我们来说一下什么是下载算法:我们在配置keil工程时,会在魔法棒里面的debug选项处选择我们的下载方式(一般为jlink),然后再setting里面我们会选择flash download来add一个选项,这个选项就是下载算法。如下图中②所示,那些选项就是我们要的下载算法。
5 A) y5 X3 A# ]9 e4 g, y. p
6 ^# g( K. i) }; J0 _5 _7 q7 L
2021060110302059.png

3 G( z1 W9 P/ s* p, C
) G- N; a; n' ^. P4 \下载算法的本质:下载算法其实就是一段加载到sram里面运行的STM32程序,这段程序的作用就是和keil通信,接收keil发过来的数据,然后把它写到对应的flash中。上图①所示就是这段程序的加载地址以及它的大小。因为每款芯片的外设不一样,外挂的flash型号不一样,所以没有一款算法可以兼容所有的芯片,我们得学会根据自己的硬件环境来写对应的下载算法。
! k4 J% B/ F$ L2 ^/ T9 g2 ]* V, k. Y, ?" V
如何写下载算法:
3 `) N5 p* w7 J6 X# X4 r9 [# c
4 c) q1 @1 ?& F首先我们找到我们的keil安装目录下(比如D\keil5\ARM\Flash\ _Template),这是keil官方给的一个模板工程,我们按照这个模板工程把需要的驱动加入其中。' d, D" ^! \5 Z+ }

* ~! d5 U$ f& x! z- x* {如下图所示,我们自己添加一个HARDWARE文件夹,把需要用到的驱动放入工程中。上面三个文件是标准接口文件,不能动。
: J3 V9 v* Q0 J; q
0 t' ~4 F3 ]/ _3 @% |
20210601103107860.png
" N0 e- k# m. B4 m
! F5 P4 f4 N: U! S
模板工程FlashPrg.c文件接口函数如下图所示,我们只需要在他们给定的函数接口中实现自己的逻辑即可。" L5 q" R4 S* k5 z/ i* D
3 T% b5 d2 S7 L5 Q9 t' h* B
20210601103205494.png
% {/ F' D) m9 d7 H
* A2 c' K# D0 @& ~: f9 R  k
模板工程FlashDev.c文件接口函数如下图所示,它是给keil进行识别的文件,对照进行修改就行。
+ W; s% T! P9 r. X3 b1 |2 `+ ]5 n, J- r# a" Q
20210601103234589.png

; \4 U; X, R7 S! x1 I5 |; z; K  P0 l' R
( f$ L# b7 I! N9 L, z6 A& X在全部修改完成后,进行编译,会在根目录下生成一个.FLM的文件,这个就是我们上面所选的下载算法,我们把它复制到D\keil5\ARM\Flash目录下,然后我们就可以在keil中选择到我们自己写的下载算法了,如下图所示:+ a3 G. u5 C9 k7 b, [+ b, |
6 A* X+ ^# [' l& o
20210601103307396.png
- g% ~* t) s9 _3 i1 U
0 H' j/ Q. U1 ^

' c- F+ W$ U4 v. j& p
收藏 评论0 发布时间:2021-12-28 23:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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