嵌入式

您所在的位置:网站首页 verfication怎么读 嵌入式

嵌入式

2023-11-03 03:17| 来源: 网络整理| 查看: 265

GD32读保护解除 引言 解除读保护 可以通信的情况下 现象描述 jlinkCommander 结果 无法通信的情况下 核心代码 辅助脚本代码 执行结果 总结

更新历史

20220303: 首次编辑并发布,添加在 jlink-commander 可读写寄存器的情况下,接触都保护的方式; 20220304 添加在 jlinkcommander 中手工无法通信的情况下,解除读保护的操作; 引言

由于产品安全的要求,在产品量产后通常会对固件开启保护功能,如此篇文章 嵌入式 -GD32代码读保护 中提到的一样,读保护就是常见的方式之一;

解除读保护

这里 MCU 以 GD32F303 为例:

可以通信的情况下 现象描述

读保护是开启了防反读的功能,并没有停止调试接口的功能;但是存在一些情况,触发了读保护本身的防护机制并擦除了桩端代码后,读保护功能依然开启,此时发现可通过 JlinkCommander 进行读写寄存器。

jflash 编程闪存会执行先擦除的动作,但是 303 都保护开启后会对前 4kB 的闪存空间开启页擦除保护,所以呈现出来的现象就是,jflash 可成功连接,但是什么也做不了。 在这里插入图片描述

点击 回读之后,显示下方提示,会弹出以下提示: 在这里插入图片描述 进度条无新增,直到尝试超时: 在这里插入图片描述 如果在尝试擦除的时候直接点击“取消”按钮,会提示 : 在这里插入图片描述

jlinkCommander

通过 JlinkCommander 是可以读写其寄存器的: 在这里插入图片描述 通过 ?字符,可查看支持的命令及其语法: 在这里插入图片描述 这里我们主要使用的是:

w4 // 写 32 bit 数据至指定地址内存,语法为 w4 , 均为 hex 格式 mem // 读取指定内存的制定字节数据,语法为 mem , 均为 hex 格式 mem32 // 读取指定内存的多组 4Bytes(item) 数据,语法为 mem , 均为 hex 格式

代码为:

// 查看当前 SPC 字节 mem 0x1fffF800 0x10 // 解锁 FMC_Bank0 w4 0x40022004 0x45670123 //FMC_KEY = UNLOCK_KEY0; W4 0x40022004 0xcdef89ab // FMC_KEY = UNLOCK_KEY1; // 查看寄存器 mem32 0x40022000 0x10 w4 0x40022008 0x45670123 //FMC_OBKEY = UNLOCK_KEY0; w4 0x40022008 0xcdef89ab //FMC_OBKEY = UNLOCK_KEY1; mem32 0x40022000 0x10 // 清楚可能存在的错误标志位 w4 0x4002200C 0x00000034 //fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END); // OB 字节擦除指令使能 w4 0x40022010 0x0220 // OBER // 执行擦除 w4 0x40022010 0x0260 //STAR // 使能 OB 字节编程 w4 0x40022010 0x0270 //OBPG // 恢复默认值,退回未保护态 w2 0x1ffff800 0x5aa5 // 开启寄存器锁保护 w4 0x40022010 0x80 // 可再次查看 SPC 字节 mem 0x1fffF800 0x10 // 结果 通过 JlinkCommander 操作并查看结果


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3