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

STM32L476 DUAL BANK做IAP(Field upgrade)功能遇到无法启动问题

[复制链接]
PaulRambo 提问时间:2018-1-24 16:14 /
本帖最后由 PaulRambo 于 2018-1-24 16:51 编辑

大家好!我最近在调试STM32L476RG的IAP功能,参考了官方《AN4767-STM32L_Dualbank_flash_memory_fieldupgrade》,并将代码烧录到了BANK1中。我想要做的效果是,BANK1中使用选项1载入另外一段程序(APP),烧写到BANK2中运行。目前已经测试通过官方代码的内容。现遇到的问题如下:
目前已经通过选项1载入了代码,烧写成功,但是无法启动BANK2中的代码。配置及实验过程如下:
运行官方代码,(稍作修改,不影响原有功能)
1.png
选项1烧写代码

3.png
烧写成功
4.png
选项6切换bank,卡死,重启无响应(猜测应该是卡在了BANK2启动入口)
5.png
以下是我代码的配置:首地址设置为0x8080000,代码长度为0x80000,在主函数加入了中断向量表偏移程序段。

6.png 7.png

以上是我现在的实验结果。请大家帮我看下哪里出了问题?为何无法启动?





收藏 评论3 发布时间:2018-1-24 16:14

举报

3个回答
PaulRambo 回答时间:2018-1-24 23:49:21
我自己解决了,看到AN4767中有一句
If the code in both banks is not identical (or at least the section prior to the bank switch point
is not identical) then the execution is most likely to crash.
将跳转放到工程最前端,保证BANK1的跳转与BANK2跳转之前的语句相同identical,后面代码可以差异化,这样就可以进行两个bank1之间的跳转了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结帖奖励

查看全部评分

PaulRambo 回答时间:2018-1-24 23:50:50
我自己找到问题了,AN4767中有一句
If the code in both banks is not identical (or at least the section prior to the bank switch point
is not identical) then the execution is most likely to crash.
将BANK1与BANK2跳转语句之前的代码写成相同的,就可以正常运行了。
七哥 回答时间:2018-1-25 01:11:40
问题找到就好,可以结贴了

没这么玩过,学习一下,下次遇到了能省点弯路
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版