调用了库里的读保护函数,结果,后来stlink2仿真器就连不上了,Jlink下载完就报错。
是不是只能用ISP擦了?
下载程序在RAM中擦除怎么操作?
只是听说过,具体怎么做啊?是不是要写个小程序擦全部flash?具体怎么做?有人做过吗?
你可以调用库里的函数设置读保护,同理可以调用函数解除
当然要自己写个小程序。
只擦读保护马?还是要擦除全片?
擦保护之前是不是要擦全片?
解除读保护后,芯片仍处于保护状态,但下次上电时自动擦
所以解除读保护之前不必擦除全片。
请注意,解除读保护不是擦除操作,而是写操作,即需要在读保护位写入一个特定的键才能解除读保护,擦除读保护位或写入错误的键都会施加读保护。
LS版主解释似乎不够精准:
To disable the read protection from the embedded SRAM:
● Erase the entire option byte area. As a result, the read protection code (RDP) will be
0xFF. At this stage the read protection is still enabled.
● Program the correct RDP code 0x00A5 to unprotect the memory. This operation first
forces a Mass Erase of the main Flash memory.
● Reset the device (POR Reset) to reload the option bytes (and the new RDP code) and,
to disable the read protection.
解除读保护之前,就会自动擦除全片,之后才有解除读保护的动作。
这点是很重要的,保证保护有效。
如果电路板支持boot跳线
如果电路板支持boot跳线,那么就很简单,跳到SRAM方式,然后直接用仿真器(stlink,JLink,ULink)下载都可以
哈哈,7楼的注释更加清晰
俺那句话中的“解除读保护”是一个动作,而不是一个状态。
这个例子可以看出,要清晰准确地表达想法,让他人不会误解,不是一件容易的事情。
多谢了!搞定
列一下操作,希望对后来者有帮助。
iar 4.42A下建了个工程文件,选stm32 cpu.写个简单的程序,
#include "stm32f10x_lib.h"
void main(void)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
FLASH_Lock();
while(1);
}
把这个文件和stm32的库文件都加入工程,编译找不到头文件路径的话把路径加在工程设置里。
链接配置选个用ram的xcl文件。
然后,随便用stlink或jlink.下载运行。
重新上电,这时如果用memory窗口已经可以看到flash区域是ff了,呵呵。恢复了
多谢pheavecn 和版主!
另,不需要跳boot0,仿真器可以直接下程序到0x20000000
我几天前试过的
接好USART1到电脑,用从ST网站下载的Flash Loader Demo就能解
芯片不小心被加密了,JTAG是联不上了;此时解决办法就是用ISP全芯擦除;擦除后就可以用了;
如果只是在用户程序中加了一些保护一类的,应该上电时不会进入用户程序(NXP的有相关的设置,STM的我不熟悉);直接在JTAG里面上电后擦掉FLASH应该可以的;