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

关于STM32G474 双BANK的测试问题

[复制链接]
AdvanceMotorCon 提问时间:2025-4-25 11:31 / 未解决

工程师朋友,您好 有一个关于STM32G474 双BANK的测试问题请教各位: 一个LED 闪烁的测试程序已经在IAR环境构建成功, 使用STM32CubeProgrammer 加载到0X800 0000开始的BANK1,DBANK=1,BFB2=0,程序运行OK 当加载到0X804 0000开始的BANK2,DBANK=1,BFB2=1,程序不能运行 请教各位工程师,看看我的应用设置有什么问题

收藏 评论11 发布时间:2025-4-25 11:31

举报

11个回答
butterflyspring 回答时间:2025-4-25 11:59:27
HAL庫中有示例程序可以參考對比一下
AdvanceMotorCon 回答时间:2025-4-25 12:07:23

butterflyspring 发表于 2025-4-25 11:59
HAL庫中有示例程序可以參考對比一下

已经参考了,这个只是验证双bank运行模式,还不知道问题所在!

我直接将固件下载到0X8040000,并更改了对应的OPT,上电运行,还是不行!

butterflyspring 回答时间:2025-4-25 15:07:52
将 icf 文件的起始地址改为 0X0804 0000


同时将 VECT_TAB_OFFSET  定义成 0x40000UL

我这边测试可以了。
AdvanceMotorCon 回答时间:2025-4-25 15:48:22

butterflyspring 发表于 2025-4-25 15:07
将 icf 文件的起始地址改为 0X0804 0000</p>
<p>

谢谢您的回复,谢谢

其实我测试双BANK的目的是为了在数字电源中的固件升级,G474在启动时在双BANK模式下会自动定位到固件,而不应该在开发时定位固件地址;

早先用F103做IAP时是这样,G4用双BANK方式就简单、直接多了。

但遗憾的是现在还没有找到第一步的验证确定:手动将固件放在BANK2,Opt定位从BANK2启动!

butterflyspring 回答时间:2025-4-25 16:56:00
还有一种方式,就是设定寄存器位,
理论上不需要复位,但是这个逻辑会比较复杂。
个人觉得类似与IAP的方式逻辑简单些。

STM32G474 duBAL BANK BOOT.PNG
AdvanceMotorCon 回答时间:2025-4-25 18:24:40

butterflyspring 发表于 2025-4-25 16:56

谢谢你

AN4767 的即时固件更新也描述得很详细了,那个可以满足电源的“不停机固件升级”

我现在将目标降低了些:应用在固件更新后,热复位重新启动。

已经验证了 Cube库中的参考例子:FLASH_FastProgram

的确非常快!

现在就差双BANK指定启动这一项了,也就是本问题!

尊敬的工程师朋友,麻烦您用例子:FLASH_DualBoot直接手动放在bank2,手动配置OPT,帮忙试试看。麻烦您了!

我将测试固件放在BANK2,如下:

微信图片_20250425193045.png

微信图片_20250425193143.png

微信图片_20250425193211.png

微信图片_20250425193232.png

微信图片_20250425193255.png

微信图片_20250425193314.png

微信图片_20250425193350.png

可见,下载都是OK的,只是运行不了;重新上电也不能运行

谢谢!

xmshao 回答时间:6 天前
你在完成2个BANK的工程代码烧录之前,先保证DBANK=1,BFB2=0.


假设你先烧录了放在BANK1的第一个工程代码,地址位于0x800,0000开始的空间。然后在准备第二个将放到BANK2的工程时,请使用跟第1个工
程完全相同的链接配置,也保持 VTOR的0偏移。


第二个工程的调试OK后,将它的 BIN文件 烧写到0x804,0000开始的空间。 两个工程代码都写进芯片后。 此时复位,我们发现代码始终运行的都是BANK1的。


当我们将BFB2改为1时,此时系统就始终运行BANK2的代码了。 当然,如果BFB2=1而BANK2并未写进有效代码时,系统复位后依然会运行BANK1的代码。


这些我这边都做了实际验证的,可以参考。
AdvanceMotorCon 回答时间:5 天前

xmshao 发表于 2025-4-27 10:24
你在完成2个BANK的工程代码烧录之前,先保证DBANK=1,BFB2=0.</p>
<p>

谢谢

其实要实现的是:同样一个固件,将他分别放置在BANK1和BANK2,然后通过适当的配置来实现选定运行目标。

这就是实时升级/IAP的意义(RWW的真实意义)

希望您有进一步的信息分享

谢谢!

xmshao 回答时间:5 天前

AdvanceMotorCon 发表于 2025-4-28 07:55
谢谢</p>
<p>其实要实现的是:同样一个固件,将他分别放置在BANK1和BANK2,然后通过适当的配置来实现选定运 ...

[md]我这里主要针对你描述的问题做了验证,具体就是你说的当代码烧到0x8040000开始的空间后并配置BFB2=1而不运行的问题。

至于其它做法,等机会有更具体的需求时可以再探讨。谢谢!

butterflyspring 回答时间:5 天前
楼主说的方式符合应用笔记所描述的。

目前楼主验证不成功,可以检查一下bootloader 的版本,如果是早期的 V13.3(0XD3)是可能的。
建议换一个最新版更新过的芯片。
我的测试板上的芯片就是 V13.3的,比较旧的版本,不能实现这个功能。

STM32G474 dual bank limitation.PNG
AdvanceMotorCon 回答时间:昨天 21:47

butterflyspring 发表于 2025-4-28 15:06
楼主说的方式符合应用笔记所描述的。</p>
<p>目前楼主验证不成功,可以检查一下bootloader 的版本,如果是早期的  ...

谢谢您

通过0x1FFF6FFE地址,得到版本是D5(13.5),还是不能验证,已经有电邮到ST了。

我现在先不用双BANK的IAP方式,还是用单bank的IAP先!

谢谢各位朋友的帮助

谢谢!

所属标签

相似问题

官网相关资源

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