
1、问题如标题 2、描述:通过双bank来实现远程升级,当程序在bank1运行时可以擦除bank2的内容,并重新写入代码。但是当程序在bank2运行时却不能擦除bank1的内容,写入失败。 3、步骤和现象:使用代码对bank1进行批量或页擦除,提示是擦除成功了,用JFLASH读擦除区域显示是FF,但是在代码里面读flash再打印到串口却显示非FF,然后写入flash失败。查看寄存器提示写入时非FF。这说明确实是擦除失败了。尝试了官方的代码库也依然如此。 这个问题困扰了我大半个月了,项目一点进展也没有。也向代理商反应过,看看原厂能否提供帮助,却没有得到回应。有没有哪位小伙伴遇到同样的问题? |
LIS2MDL X轴数据读取问题
motor profiler参数识别卡在7%是什么原因啊,电机只响不动,手动旋转有阻力,顿感
STEVAL-PTOOL4A开发板资料求助
STSPIN32G4的AN5432文档资料去哪里找?
开发逆变器进行STM32学习,路径如何规划?
STM32G474如何实现Buck变换器的COT控制模式
关于使用cubemx配置stm32g473re的opamp工作模式:Programmable gain amplifier mode with external filtering
++和--运算时数据在正数时计算是正确的,负数时有时候会溜掉计数。
stm32G4的SPI通信问题
关于STM32G474 双BANK的测试问题
用官方例程测试了一下,没问题。
这里需要注意: 1.设置bank2 启动
2. 修改好加载的地址(0x0804000)开始程序加载到bank2
楼主用烧录器看过是FF,但实际操作是又不是,这的确太奇怪了。通常烧录器看到的是比较准确的。
建议:1 验证一下,代码配置只执行一次BANK1部分擦除,避免复位或上电反复擦除写坏FLASH.
2. 在烧录界面和调试界面检查一下是否擦除成功。
如是有bootloader的时候应该可以实现的 如果是没有的话是不是有可能是因为在运行bank2的时候是不能够擦除或写入从0x8000000到到bank2首地址之间的数据的(猜的)。
[md]如果不能擦除或写bank1,岂不是有违设计者的初衷,那跟普通芯片也就没区别了,我猜大概率不应该
我也很奇怪,但现象确实如此,反复验证了好几次都是这样。
芯片被锁会不会引起这个现象,因为实验过程中我可能误操作了读写保护,打算换一颗芯片再试。
感谢大佬回复,我现在有一点没有搞明白,就是关于BANK1和BANK2到底对应哪个地址的问题。看过网上文章如下描述。
问题:结合官方例程,对于擦除时确实交换了bank1和bank2的地址,例程中没有明确说明写flash的时候也要交换地址。我做了实验尝试,却出现了另一个问题。在修改OPTR选项字节中BFB2时,强制跳转后却死机了,为此我不知道是程序写失败了,还是选项字节强制载入失败。导致我的实验也没有进展。我现在打算先写一个测试程序用JFLASH分别烧录到bank1和bank2中,让他们互相跳转,然后再实验当运行到bank2中擦除bank1的操作。
请问大佬,你用的官方例程具体是哪一个?我这边看到软件库里面有好几个,他们之间都有差异,搞得我很迷茫。
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。
经过多方努力,终于解决问题。感谢代理商的FAE提供支持,感谢各位大佬帮助。对比了FAE提供的代码,目前我也没看出来差别在哪儿。我也是同样的的操作就是不行,FAE的代码就可以。搞不懂,难道是人品问题。