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

关于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,程序不能运行 请教各位工程师,看看我的应用设置有什么问题

点评

https://blog.csdn.net/weixin_42550185/article/details/148448708?spm=1001.2014.3001.5501 是双BANK.  发表于 2025-6-5 13:49
收藏 评论13 发布时间:2025-4-25 11:31

举报

13个回答
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 回答时间:2025-4-27 10:24:02
你在完成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 回答时间:2025-4-28 07:55:08

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

谢谢

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

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

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

谢谢!

xmshao 回答时间:2025-4-28 09:57:40

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

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

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

butterflyspring 回答时间:2025-4-28 15:06:50
楼主说的方式符合应用笔记所描述的。

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

STM32G474 dual bank limitation.PNG
AdvanceMotorCon 回答时间:2025-5-2 21:47:38

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

谢谢您

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

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

谢谢各位朋友的帮助

谢谢!

暗流、 回答时间:7 天前

AdvanceMotorCon 发表于 2025-5-2 21:47
谢谢您</p>
<p>通过0x1FFF6FFE地址,得到版本是D5(13.5),还是不能验证,已经有电邮到ST了。

[md]你好,后续的过程中,这个问题还有解决掉吗,我也卡在了这个问题上。查看了以上的描述内容也是类似题主遇到的情况

所属标签

相似问题

官网相关资源

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