读保护现象

  开启读保护后,jflash 可成功连接,但是什么也做不了。
在这里插入图片描述

但是通过 Jlink Commander 是可以读写其寄存器的:
在这里插入图片描述
最开始两个字节不是A5 5A,表示读保护开启。

读保护解除

通过 ?字符,可查看Jlink Commander 支持的命令及其语法:
在这里插入图片描述

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

通过 Jlink Commander 可以读写单片机寄存器,那么修改OB相关寄存器即可解除读保护,过程如下:

// 查看当前 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      //

在这里插入图片描述
最开始两个字节变为A5 5A,表示读保护关闭。


版权声明:本文为qlexcel原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qlexcel/article/details/128117552