本帖最后由 scu319hy 于 2024-2-7 23:16 编辑
今天想在HC32F460上跑一下Dhrystone,结果程序烧上以后,直接变砖了。
没法进调试状态,没法烧写,没法擦除...
JLink报内存不可写
pyOCD报写寄存器失败
网上搜索不到任何有效解决方案
进pyOCD控制台查看,没法中断运行,芯片一直在重启
halt几十次,有一次能停下来,reset halt可以停住
但只要执行擦除或是烧写命令就继续重启
折腾了半天,最后只想法人肉汇编擦除
弄了个脚本
fix_hc32f460.zip
(241 Bytes)
,分享给大家。
遇到类似问题的朋友可以用pyocd执行这个脚本,如下:
pyocd cmd -t hc32f460xe -x fix_hc32f460.txt
脚本可以擦除芯片所有内容。
如下为脚本内容说明
# 重启并挂起 reset halt # 准备寄存器 wr r0 0 wr pc 0x20000000 # 人肉汇编 wh 0x20000000 0x6001 wh 0x20000002 0xE7FE # 写CM_EFM寄存器,解锁FLASH,并设置为全擦除模式 ww 0x40010400 0x0123 ww 0x40010400 0x3210 ww 0x4001040C 0x51 ww 0x4001040C 0x51 # 展示CM_EFM寄存器内容 rb 0x40010400 0x100 # 运行汇编触发擦除操作 g # 等待擦除完成 sleep 500 halt # 清除擦除完成标记 ww 0x40010410 0x100 # 显示FLASH前256字节数据 rb 0x0 0x100
关于为什么会变砖,初步分析是因为在芯片初始化时,有部分代码产生了异常,芯片一直处于快速的不断重启中。
这个过程很难中断下来。而jlink和pyocd的烧写/擦除相关代码不能正常处理这种情况。
|