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

STM32G47x 双 Bank 模式下在线升级

[复制链接]
STMCU小助手 发布时间:2022-9-18 22:33
1、前言
STM32G47x 的 Flash 可以工作在双 bank 模式下,在该模式下对 FLASH 的操作支持RWW(Read-While-Write),在 Bank1 中可以对 Bank2 进行操作而不影响当前 Bank1 中的应用程序的运行,反之亦然。本文对双 Bank 模式下程序在线升级进行介绍,指出操作中的注意事项。

5 [* s* o4 G( B+ D3 }$ y
2 u; b7 R: M; `1 t, H
2、双 Bank 工作原理
STM32G47x 系列 MCU 支持 Flash 双 Bank 功能,且芯片出厂默认配置即使能了双 Bank功能。基于两个独立的 Bank,用户可以选择将应用程序放在任意一个 Bank 中运行,通过设置标志位 BFB2 来决定从哪一个 Bank 启动:
BFB2 = 0,MCU 双 Bank 启动禁用,从 Bank1 启动运行;
BFB2 = 1,MCU 双 Bank 启动使能,从 Bank2 启动运行,若是 Bank2 中无正常程序,则检测 Bank1 中是否有正常程序,若有则运行 Bank1 中的程序,若无则跳转到系统 Bootloader 运行(详见 AN2606 对应说明)。FB_MODE 反映了 Bank 的地址映射,双 Bank 的地址映射方式如下:
! k, r) o; i% i0 L+ R: C
FB_MODE= 0 时,Bank1 的起始地址为 0x08000000,Bank2 的起始地址为
0x08040000;FB_MODE= 1 时,Bank1 的起始地址为 0x08040000,Bank2 的起始地址为0x08000000;

5 |. K- f! o# f6 W1 Q
微信图片_20220918223326.png

# W% d/ D7 w* z1 _
在 STM32G47x 系列 MCU 中,MCU 启动时始终是从 0x08000000 这个地址开始运行。通过地址重映射的方式,将不同的 Bank 起始地址指定到 0x08000000,所以当从 Bank2 启动运行时,千万不要认为 MCU 是从 0x08040000 开始运行的,MCU 依旧是从 0x08000000 这个地址开始运行,认清这点对程序在线升级时对 Flash 的擦除与烧写特别重要。

" Y$ k. o5 \8 [% }- C( G
另外基于以上地址重映射操作,在程序设计过程中,用户也不需要对地址空间做偏移处理,完全按照单 Bank 的思路进行设计即可,但程序不能超过单 Bank 大小。

$ u; C% b4 c* G5 \  L! j2 \5 F. p* o" u! k2 O$ {

  a1 r1 x- s- v9 b" d
3、在线升级实现
ST 的固件库中给出了完整单 Bank MCU 的 IAP 升级方案,基于 UART 和 Y-Modem 协议。在双 Bank 模式下,数据传输层面与单 Bank 是完全一样的,所以本文不再对 IAP 的数据传输方式与协议进行描述,具体可以参考 AN4045 与 Y-Modem 协议内容。

2 F& q$ {, g  Q
G4 系列的开发包中目前还没有专门的 IAP 例程,直接从其他系列移植即可,比如 F3 或是L4 系列。这些例程中存在两个工程,即 IAP 工程与APP程序工程。在 G47x 双 Bank 模式下,是在当前 Bank 中对另一 Bank 进行操作,且由于 Flash 支持 RWW,所以不需要再将 IAP 与应用程序分开,可以合并到一起。
$ _. \' o2 r. O/ t
以 L4 的 IAP 例程为基础,在原 IAP 例程的基础上,为了双 Bank,需要修改的点如下(本文只讨论程序下载,其他暂不讨论):

* V5 Z0 C. ?5 |5 w$ n7 X+ E
微信图片_20220918223323.png
微信图片_20220918223320.png
9 V& \& ?: x6 L& J9 t  V
将修改后的代码编译生成 bin 文件,通过 CubeProgrammer 烧录到 0x08000000。
, Z8 d& d! n% Y" [2 }. W, X- {, Z
9 z) t2 g& }8 `/ Y, I0 g
3 {( `# O& _' C$ J  `2 w
4、结果验证
MCU 运行后的通过终端串口工具(Tera Term)打印调试信息,烧录完程序后,第一次上电的信息如下,BFB2 禁用,程序在 Bank1 中启动。在终端中输入 1 可以启动程序下载,输入 3 触发Bank 切换,“2”忽略。

! x, @2 T0 X, {8 J
微信图片_20220918223313.png

* ^$ P8 Y2 d) y# M5 g# j% V
此时 MCU 将进入等待数据传输,并显示“Waiting for the file to be sent ... (press 'a' to abort)”,用户在 Tera Term 通过以下的菜单选择目标 bin 文件,并启动传输。
0 c7 Y' X' W1 e9 k! S0 l
微信图片_20220918223310.png
微信图片_20220918223301.png
/ s# a. P* Y+ ]1 C9 K6 d3 E5 C" c5 b  e

1 `9 ^7 h' n; ^% n  F) B# y9 x! J- n6 A  P
5、小结
本文简单介绍了双 Bank 的工作原理与双 Bank 进行在线 IAP 时应该注意的问题和需要添加的代码,并对最终运行的结果进行了验证。
& [" d) p3 u0 H9 o% K  j
微信图片_20220918223317.png
赞 收藏 评论1 发布时间:2022-9-18 22:33

举报

1个回答
y369369 回答时间:2022-9-19 13:01:28
G4是很好的系列,去年G0B1有没有开发板申请
! `' S4 D( J) {' t. }# M, U+ u

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版