请教一下大家,我想测试STLINK UTILITY的Automatic Mode功能(芯片是STM32G474的开发板自带的STM32G474RET6U),来测试一下量产刷程序(配合设置读保护),设置好以后然后就是用STLINK连接的开发板来插拔STLINK,模拟量产更换芯片的操作,但是总操作次数不过30多次(我印象当中),这其中就是将读保护从level0设置为level1,当然也会将level调整为level0(无读保护),因为知道level2是不可逆的,所以一直都没设置过level2.就这样后面发现falsh的内容都是0x00了,然后我尝试了: 1.full chip erease; 2.page erease; 3.blank erease; 4.重新烧写程序 5.将读保护从level0改为level1再改为level0,然后执行执行上述任意操作; 但是无论如何,上述的操作都是无用的,flash的内容都是0x00,这是不是说片内flash已经出问题了,只能换芯片了? 想咨询一下各位是否有遇到过flash出现这类问题的,stm32的falsh这么不经折腾吗? 附图: STLINK UTILITY Automatic Mode configure设置automode的读保护为level1 无论何种操作,flash一直是0x00; 编程或者擦除都无法进行 |
对比了它的option byte,发现与正常的另一个芯片的区别在于bank RDP的配置:
经过尝试要解除bank 的RDP操作如下:
1.将勾选bank RDP的配置选项PCROP_RDP(Checked CROP zone is erased when RDP is decreased),同时将RDP的保护等级从level0(0xAA)调整为level1(0xBB),(这里调整RDP的目的根据在于Checked CROP zone is erased when RDP is decreased),点击应用改写option byte;
2.再次将RDP的保护等级从从level1(0xBB)调整为level0(0xAA),点击应用改写option byte;
经过上述两个步骤后bank RDP的配置会复原,falsh的读取内容将会变为0xFF,我们就能正常读写和擦除了;
https://community.st.com/s/quest ... s-it-can-be-recover
具体可以参考这里