问题描述:
STM32G474的芯片flash可以配置双bank flash类型(64Kbyte + 64Kbyte),而客户由于使用超过64Kbyte大小,所以设定只能单bank才能正常工作,STM32G474出厂默认双Bank,工厂烧录过程中漏掉Bank配置,直接用双Bank模式进行烧录,而产品依然可以工作,正常测试流程无法测试出。在在线升级过程中,由于擦除Page大小不同,Flash读写Size不同,导致部分升级失败,所以需要重新升级。
现象如图:
诉求:
对于配置为双Bank已烧录过的芯片,使用ST utility工具,目前通过将PCROP_RDP 配置为1,Read Out Protection 修改为Level 1然后同步将PCROP_RDP配置为0,Read Out Protection 从Level 1 修改为Level 0,清除芯片保护和Flash信息然后重新配置为单Bank,然而,对于工厂端,很难保证不会出错,帮忙确认是否有简单方式重新配置Bank。如图:
解决方案:
1.对于已经烧录的双Bank配置软件,可以分成2个步骤:
- 恢复保护前的配置:
批处理文件命令如下:
st-link_CLI.exe -c ur -ob PCROP_RDP=1
st-link_CLI.exe -c ur -ob RDP=1
st-link_CLI.exe -c ur -ob PCROPA_STRT=0x7fff PCROPA_END=0x0000 PCROPB_STRT=0x7fff PCROPB_END=0x0000 RDP=0
- 烧录新的firmware:
st-link_CLI.exe -c -ob DBANK=0 -Rst
st-link_CLI.exe -c -p "D:\ST\MCU\FW\G4\en.stm32cubeg4_v1-4-0_v1.4.0\STM32Cube_FW_G4_V1.4.0\Projects\NUCLEO-G474RE\Examples\GPIO\
GPIO_IOToggle\MDK-ARM\GPIO_IOToggle\Exe\GPIO_IOToggle.hex" -v
3.批处理文件用txt编辑,再修改后缀名为*.bat即可直接运行。
一劳永逸的解决方法,拿到新的mcu,直接使用下面操作方法即可:
烧录新的firmware:
st-link_CLI.exe -c -ob DBANK=0 -Rst
st-link_CLI.exe -c -p "D:\ST\MCU\FW\G4\en.stm32cubeg4_v1-4-0_v1.4.0\STM32Cube_FW_G4_V1.4.0\Projects\NUCLEO-G474RE\Examples\GPIO\
GPIO_IOToggle\MDK-ARM\GPIO_IOToggle\Exe\GPIO_IOToggle.hex" -v
原理:
关于芯片保护机制:
当RDP的值为0xAA时,RDP level =0;这时候没有保护。
当RDP的值为0xCC时,RDP level=2;这时候禁止调试,不能再用工具烧录程序,也就是说的变砖;
当RDP的值不为上面两个值的时候,RDP level=1;
Level1和level2具体保护不同可以参考下面表格:
PCROP_RDP设置为1,是为了确保当我们从RDP level 1回退到 RDP level 0的时候,flash会进行全片擦除的动作。
关于PCROP_RDP和RDP level的详细说明,可以参考编程手册P120-P124页。
评论