打印
[其他]

HC32F460救砖...

[复制链接]
1539|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
scu319hy|  楼主 | 2024-2-7 23:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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的烧写/擦除相关代码不能正常处理这种情况。


使用特权

评论回复
沙发
suw12q| | 2024-3-26 14:57 | 只看该作者
这个办法挺好的啊,可以救活芯片了

使用特权

评论回复
板凳
小夏天的大西瓜| | 2024-3-26 15:05 | 只看该作者
楼主这个文档非常适合救砖

使用特权

评论回复
地板
zhizia4f| | 2024-3-26 16:07 | 只看该作者
其实一般使用jlink的Jflash的话一般是可以解决的

使用特权

评论回复
5
g0d5xs| | 2024-3-26 16:15 | 只看该作者
话说这芯片有没有boot?可以用boot来解决吧

使用特权

评论回复
6
q1ngt12| | 2024-3-26 18:20 | 只看该作者
用ISP烧录呗,也许就救活了

使用特权

评论回复
7
p0gon9y| | 2024-3-26 19:33 | 只看该作者
救砖的这事儿确实比较麻烦哦,很难找到这个技巧

使用特权

评论回复
8
lix1yr| | 2024-3-26 20:45 | 只看该作者
其实重新擦除内部数据,再download一个其他正常固件就好了

使用特权

评论回复
9
lamanius| | 2024-3-26 21:55 | 只看该作者
我觉得你要是接个rst线给JLINK应该也能正常擦除

使用特权

评论回复
10
ex7s4| | 2024-3-27 08:20 | 只看该作者
PyOCD还没玩过,以后有时间玩一玩

使用特权

评论回复
11
l1uyn9b| | 2024-3-27 10:07 | 只看该作者
你这个提示写保护?是这个意思吗?

使用特权

评论回复
12
w2nme1ai7| | 2024-3-27 12:04 | 只看该作者
一般遇到这种情况都是换芯片了,你这还给救活了,还挺好

使用特权

评论回复
13
LOVEEVER| | 2024-3-27 12:44 | 只看该作者
楼主这个脚本还挺好的,值得借鉴

使用特权

评论回复
14
scu319hy|  楼主 | 2024-3-27 17:35 | 只看该作者
lamanius 发表于 2024-3-26 21:55
我觉得你要是接个rst线给JLINK应该也能正常擦除

我在stm32上有遇到过一个问题,程序有问题导致芯片卡死,swd无法正常识别设备,所以也无法重启设备。
在上电的瞬间进调试器有概率连接成功,这种情况连接reset应该可以解决

但在hc32f460芯片本身就自己在不停的重启了,通过swd可以识别设备,可以重启设备,只是单纯不能烧写而已。这个问题应该通过reset无法解决。我在网上有看到过官方对这个问题方案是让开发者在初始化过程中加延迟。

使用特权

评论回复
15
scu319hy|  楼主 | 2024-3-27 17:37 | 只看该作者
l1uyn9b 发表于 2024-3-27 10:07
你这个提示写保护?是这个意思吗?

不是写保护,单纯是初始化代码有BUG,芯片在不停重启。jlink/pyocd的烧写/擦除逻辑处理不了这种情况,我手工处理了一下而已。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

24

帖子

1

粉丝