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

关于STM32G473双bank做OTA,flash不能擦除的问题,请官方或大神帮助?

[复制链接]
梦灭 提问时间:2023-8-23 08:44 / 未解决

1、问题如标题

2、描述:通过双bank来实现远程升级,当程序在bank1运行时可以擦除bank2的内容,并重新写入代码。但是当程序在bank2运行时却不能擦除bank1的内容,写入失败。

3、步骤和现象:使用代码对bank1进行批量或页擦除,提示是擦除成功了,用JFLASH读擦除区域显示是FF,但是在代码里面读flash再打印到串口却显示非FF,然后写入flash失败。查看寄存器提示写入时非FF。这说明确实是擦除失败了。尝试了官方的代码库也依然如此。

这个问题困扰了我大半个月了,项目一点进展也没有。也向代理商反应过,看看原厂能否提供帮助,却没有得到回应。有没有哪位小伙伴遇到同样的问题?

收藏 评论8 发布时间:2023-8-23 08:44

举报

8个回答
butterflyspring 回答时间:2023-8-23 17:07:57
肯定可以,双BANK的目的就是可以互相备份擦除软件的。
用官方例程测试了一下,没问题。
这里需要注意: 1.设置bank2 启动
                       2. 修改好加载的地址(0x0804000)开始程序加载到bank2

STM32G474 BANK2 ERASE BANK1.PNG
butterflyspring 回答时间:2023-8-23 09:50:11
"用JFLASH读擦除区域显示是FF"  
楼主用烧录器看过是FF,但实际操作是又不是,这的确太奇怪了。通常烧录器看到的是比较准确的。

建议:1 验证一下,代码配置只执行一次BANK1部分擦除,避免复位或上电反复擦除写坏FLASH.
         2. 在烧录界面和调试界面检查一下是否擦除成功。
xiyu_dang 回答时间:2023-8-23 10:55:21

如是有bootloader的时候应该可以实现的 如果是没有的话是不是有可能是因为在运行bank2的时候是不能够擦除或写入从0x8000000到到bank2首地址之间的数据的(猜的)。

梦灭 回答时间:2023-8-23 13:33:07

xiyu_dang 发表于 2023-8-23 10:55
如是有bootloader的时候应该可以实现的
如果是没有的话是不是有可能是因为在运行bank2的时候是不能够擦 ...

[md]如果不能擦除或写bank1,岂不是有违设计者的初衷,那跟普通芯片也就没区别了,我猜大概率不应该

梦灭 回答时间:2023-8-23 13:44:31

butterflyspring 发表于 2023-8-23 09:50
"用JFLASH读擦除区域显示是FF"<br />
楼主用烧录器看过是FF,但实际操作是又不是,这的确太奇怪了。通常烧录器 ...

我也很奇怪,但现象确实如此,反复验证了好几次都是这样。

芯片被锁会不会引起这个现象,因为实验过程中我可能误操作了读写保护,打算换一颗芯片再试。

梦灭 回答时间:2023-8-24 09:55:48

butterflyspring 发表于 2023-8-23 17:07
肯定可以,双BANK的目的就是可以互相备份擦除软件的。
用官方例程测试了一下,没问题。
这里需要注意: 1. ...

感谢大佬回复,我现在有一点没有搞明白,就是关于BANK1和BANK2到底对应哪个地址的问题。看过网上文章如下描述。

image.png

问题:结合官方例程,对于擦除时确实交换了bank1和bank2的地址,例程中没有明确说明写flash的时候也要交换地址。我做了实验尝试,却出现了另一个问题。在修改OPTR选项字节中BFB2时,强制跳转后却死机了,为此我不知道是程序写失败了,还是选项字节强制载入失败。导致我的实验也没有进展。我现在打算先写一个测试程序用JFLASH分别烧录到bank1和bank2中,让他们互相跳转,然后再实验当运行到bank2中擦除bank1的操作。

请问大佬,你用的官方例程具体是哪一个?我这边看到软件库里面有好几个,他们之间都有差异,搞得我很迷茫。

22BFA8E1.png
image.png
butterflyspring 回答时间:2023-8-24 17:55:03
首先需要理解双bank的结构:
1. 两块可以独立的区域,独立启动,单独boot(通过option byte 配置)。 具体参考产品参考手册
2. 独立区开是对应APP的向量表。
3. 另外软件不能擦除当前使用的向量表,如果有中断就跑飞了~~

我参考的例程是下面这个,根据上面的基本原则改了一下配置和地址,改成从BANK2 启动擦除BANK1
STM32Cube_FW_G4_V1.5.0\Projects\NUCLEO-G474RE\Examples\FLASH\FLASH_EraseProgram

另外DUAL BANK的启动也有一个例程,就是更改optionbyte 再加载一下,这样复位后运行另一BANK的完整的APP。
梦灭 回答时间:2023-8-31 16:43:14

经过多方努力,终于解决问题。感谢代理商的FAE提供支持,感谢各位大佬帮助。对比了FAE提供的代码,目前我也没看出来差别在哪儿。我也是同样的的操作就是不行,FAE的代码就可以。搞不懂,难道是人品问题。

所属标签

相似问题

官网相关资源

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