打印
[STM32L4]

做stm32L476RG的IAP功能遇到了问题

[复制链接]
2360|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
金光|  楼主 | 2017-9-9 16:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 金光 于 2017-9-9 16:09 编辑

  问题描述:最近做stm32L476RG的IAP功能,设计思路是初始程序运行在BANK1,用串口接收更新程序,存储在BANK2,再置位选项字节中的BFB2,程序跳转到BANK2运行;如果串口又收到更新程序,则存储在BANK1,清零选项字节中的BFB2,程序跳转到BANK1运行;如此反复。
  但是实际做的过程中遇到了问题,调试了几天都没有进展。实现上述的第一步是成功的,BANK1中的程序收到更新程序存储在BANK2并能够正确运行。BANK2中的程序又收到更新程序,先擦除BANK1也是OK的,但是将新程序写入BANK1时就会产生错误。通过ST-LINK utility能够观察到,新程序存储在BANK2,地址为0x08080000起始,BANK1已经擦除,但是没有写入数据。
  开始使用的是快速写FLASH,即FLASH_TYPEPROGRAM_FAST,出错时错误标志位有PGSERR、PGAERR、PROGERR;又尝试了FLASH_TYPEPROGRAM_DOUBLEWORD,出错时的标志位是PGAERR、PROGERR、OPERR。
  调试过程中还遇到一个很奇怪的问题,当更新程序运行在BANK2时,程序地址空间应该是从0x08080000起始,但是我读一个函数的地址却是0x08002861,属于BANK1的地址空间。
  以上是我遇到的一些问题,欢迎大家一起讨论,更欢迎同行的高手和ST的专家指教。在此先谢谢大家!

IAP.png (141.46 KB )

BANK2

BANK2
沙发
金光|  楼主 | 2017-9-11 15:24 | 只看该作者
刚刚测试了ST的IAP例程“AN4767-STM32L_Dualbank_flash_memory_fieldupgrade”,也是有同样的问题。
程序运行在BANK2,只能擦除BANK1,不能写入BANK1。
请大家一起讨论一下原因哈!

IAPeg.png (21.23 KB )

IAP例程

IAP例程

使用特权

评论回复
板凳
eefas| | 2017-9-11 17:13 | 只看该作者
http://blog.csdn.net/yx_l128125/article/details/12992773

使用特权

评论回复
地板
eefas| | 2017-9-11 17:16 | 只看该作者
升级方式应该是相通的,没有做过,这个还真不会。参考一下别人的吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝