HC32F460救砖...
本帖最后由 scu319hy 于 2024-2-7 23:16 编辑今天想在HC32F460上跑一下Dhrystone,结果程序烧上以后,直接变砖了。
没法进调试状态,没法烧写,没法擦除...
JLink报内存不可写
pyOCD报写寄存器失败
网上搜索不到任何有效解决方案
进pyOCD控制台查看,没法中断运行,芯片一直在重启
halt几十次,有一次能停下来,reset halt可以停住
但只要执行擦除或是烧写命令就继续重启
折腾了半天,最后只想法人肉汇编擦除
弄了个脚本 ,分享给大家。
遇到类似问题的朋友可以用pyocd执行这个脚本,如下:
pyocd cmd -t hc32f460xe -x fix_hc32f460.txt
脚本可以擦除芯片所有内容。
如下为脚本内容说明
# 重启并挂起reset halt# 准备寄存器wr r0 0wr pc 0x20000000# 人肉汇编wh 0x20000000 0x6001wh 0x20000002 0xE7FE# 写CM_EFM寄存器,解锁FLASH,并设置为全擦除模式ww 0x40010400 0x0123ww 0x40010400 0x3210ww 0x4001040C 0x51ww 0x4001040C 0x51# 展示CM_EFM寄存器内容rb 0x40010400 0x100# 运行汇编触发擦除操作g# 等待擦除完成sleep 500halt# 清除擦除完成标记ww 0x40010410 0x100# 显示FLASH前256字节数据rb 0x0 0x100
关于为什么会变砖,初步分析是因为在芯片初始化时,有部分代码产生了异常,芯片一直处于快速的不断重启中。
这个过程很难中断下来。而jlink和pyocd的烧写/擦除相关代码不能正常处理这种情况。
这个办法挺好的啊,可以救活芯片了 楼主这个文档非常适合救砖 其实一般使用jlink的Jflash的话一般是可以解决的 话说这芯片有没有boot?可以用boot来解决吧 用ISP烧录呗,也许就救活了 救砖的这事儿确实比较麻烦哦,很难找到这个技巧 其实重新擦除内部数据,再download一个其他正常固件就好了 我觉得你要是接个rst线给JLINK应该也能正常擦除 PyOCD还没玩过,以后有时间玩一玩 你这个提示写保护?是这个意思吗? 一般遇到这种情况都是换芯片了,你这还给救活了,还挺好 楼主这个脚本还挺好的,值得借鉴 lamanius 发表于 2024-3-26 21:55
我觉得你要是接个rst线给JLINK应该也能正常擦除
我在stm32上有遇到过一个问题,程序有问题导致芯片卡死,swd无法正常识别设备,所以也无法重启设备。
在上电的瞬间进调试器有概率连接成功,这种情况连接reset应该可以解决
但在hc32f460芯片本身就自己在不停的重启了,通过swd可以识别设备,可以重启设备,只是单纯不能烧写而已。这个问题应该通过reset无法解决。我在网上有看到过官方对这个问题方案是让开发者在初始化过程中加延迟。 l1uyn9b 发表于 2024-3-27 10:07
你这个提示写保护?是这个意思吗?
不是写保护,单纯是初始化代码有BUG,芯片在不停重启。jlink/pyocd的烧写/擦除逻辑处理不了这种情况,我手工处理了一下而已。 小华单片机技术1对1服务,15955131314 串口ISP重新烧写程序 插眼记录 进pyOCD控制台查看,没法中断运行,芯片一直在重启 为什么会变砖,初步分析是因为在芯片初始化时,有部分代码产生了异常,芯片一直处于快速的不断重启中。
页:
[1]
2