
工程师朋友,您好 有一个关于STM32G474 双BANK的测试问题请教各位: 一个LED 闪烁的测试程序已经在IAR环境构建成功, 使用STM32CubeProgrammer 加载到0X800 0000开始的BANK1,DBANK=1,BFB2=0,程序运行OK 当加载到0X804 0000开始的BANK2,DBANK=1,BFB2=1,程序不能运行 请教各位工程师,看看我的应用设置有什么问题 |
STM32G474CBT6上电瞬间用示波器测得io口产生较大电压(浪涌电压)
STM432G4单片机IAP程序+上位机
STM32G473 flash擦除时程序卡死
STSPIN32G4内部驱动电压输出问题
comp输出用于tim1刹车,消隐源和pwm输出是不是得是同一个TIM?
STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?
workbench6.3.2生成的代码,无法用pilot电机参数识别,无法通讯
stm32G474的flash模式如何判定?single bank 和dual bank
STM32G474高精度定时器HRTIM配置死区互补PWM极端输出问题
hrtim里update reset和reset update同时打开不会互相激励吗,另外为什么现在定时器周期值不用-1了
已经参考了,这个只是验证双bank运行模式,还不知道问题所在!
我直接将固件下载到0X8040000,并更改了对应的OPT,上电运行,还是不行!
同时将 VECT_TAB_OFFSET 定义成 0x40000UL
我这边测试可以了。
谢谢您的回复,谢谢
其实我测试双BANK的目的是为了在数字电源中的固件升级,G474在启动时在双BANK模式下会自动定位到固件,而不应该在开发时定位固件地址;
早先用F103做IAP时是这样,G4用双BANK方式就简单、直接多了。
但遗憾的是现在还没有找到第一步的验证确定:手动将固件放在BANK2,Opt定位从BANK2启动!
理论上不需要复位,但是这个逻辑会比较复杂。
个人觉得类似与IAP的方式逻辑简单些。
谢谢你
AN4767 的即时固件更新也描述得很详细了,那个可以满足电源的“不停机固件升级”
我现在将目标降低了些:应用在固件更新后,热复位重新启动。
已经验证了 Cube库中的参考例子:FLASH_FastProgram
的确非常快!
现在就差双BANK指定启动这一项了,也就是本问题!
尊敬的工程师朋友,麻烦您用例子:FLASH_DualBoot直接手动放在bank2,手动配置OPT,帮忙试试看。麻烦您了!
我将测试固件放在BANK2,如下:
可见,下载都是OK的,只是运行不了;重新上电也不能运行
谢谢!
假设你先烧录了放在BANK1的第一个工程代码,地址位于0x800,0000开始的空间。然后在准备第二个将放到BANK2的工程时,请使用跟第1个工
程完全相同的链接配置,也保持 VTOR的0偏移。
第二个工程的调试OK后,将它的 BIN文件 烧写到0x804,0000开始的空间。 两个工程代码都写进芯片后。 此时复位,我们发现代码始终运行的都是BANK1的。
当我们将BFB2改为1时,此时系统就始终运行BANK2的代码了。 当然,如果BFB2=1而BANK2并未写进有效代码时,系统复位后依然会运行BANK1的代码。
这些我这边都做了实际验证的,可以参考。
谢谢
其实要实现的是:同样一个固件,将他分别放置在BANK1和BANK2,然后通过适当的配置来实现选定运行目标。
这就是实时升级/IAP的意义(RWW的真实意义)
希望您有进一步的信息分享
谢谢!
[md]我这里主要针对你描述的问题做了验证,具体就是你说的当代码烧到0x8040000开始的空间后并配置BFB2=1而不运行的问题。
至于其它做法,等机会有更具体的需求时可以再探讨。谢谢!
目前楼主验证不成功,可以检查一下bootloader 的版本,如果是早期的 V13.3(0XD3)是可能的。
建议换一个最新版更新过的芯片。
我的测试板上的芯片就是 V13.3的,比较旧的版本,不能实现这个功能。
谢谢您
通过0x1FFF6FFE地址,得到版本是D5(13.5),还是不能验证,已经有电邮到ST了。
我现在先不用双BANK的IAP方式,还是用单bank的IAP先!
谢谢各位朋友的帮助
谢谢!