STM32FLASH读保护测试,片子挂了,高手帮忙请进!
int main(void)
{
....
FLASH_ReadOutProtection(ENABLE);
while(1)
{
....
}
}
现在通过J-Link下载不了程序了。Debug log如下:
Tue Apr 01 15:57:31 2008: Warning: Verify error, failed to read memory at address 0x08000150 - 0x080001BD
Tue Apr 01 15:57:31 2008: Warning:
Verify error at address 0x08000150, target byte: 0xAA, byte in file: 0x30
....................................
Tue Apr 01 15:57:31 2008: Warning: Verify error, failed to read memory at address 0x080001C0 - 0x080001E5
Tue Apr 01 15:57:31 2008: Warning:
Verify error at address 0x080001C0, target byte: 0xAA, byte in file: 0x00
..................................................
Tue Apr 01 15:57:31 2008: Warning: Verify error, failed to read memory at address 0x080001E8 - 0x0800023D
Tue Apr 01 15:57:31 2008: Warning:
Verify error at address 0x080001E8, target byte: 0xAA, byte in file: 0xF0
.......................................................
Tue Apr 01 15:57:31 2008: Warning: Too many verify errors, only the first 200 are displayed
Tue Apr 01 15:57:31 2008: Warning: Verify error, failed to read memory at address 0x08000240 - 0x080002B7
............................................
Tue Apr 01 15:57:31 2008: There were warnings during download, see Log Window
Tue Apr 01 15:57:35 2008: Loaded debugee: E:\PRO EX\U31\Project\Medium\Exe\PRO_EX(S).d79
Tue Apr 01 15:57:35 2008: Target reset
Tue Apr 01 15:57:38 2008: Could not write CPU register MSP: Written: 0xAAAAAAAA, Read 0xAAAAAAA8
Tue Apr 01 15:57:38 2008: The stack 'CSTACK' is filled to 100% (2048 bytes used out of 2048). The warning threshold is set to 90%.
Tue Apr 01 15:57:39 2008: Code still contains old breakpoints
如果在STM32上加载了Flash读保护,只有一种办法可以解
你必须写一个程序并使用JTAG在RAM中运行,这个程序的目的是清除Flash的读写保护,这样Flash的内容会自动被擦除,然后Flash就可以重新使用了。
下次做这样的操作时,请预置一段清除Flash的读写保护的程序,这段程序能够通过某种机制启动,这样就不会再发生这种事情。
这个RAM中运行的程序怎么下到RAM中?
这个RAM中运行的程序怎么下到RAM中?
程序通过JTAG在RAM中调试并执行
记得设置好BOOT0和BOOT1的状态。
弱弱的问下
在IAR中怎么设置在RAM中调试和执行?一直没有用过....
IAR设置地址,硬件BOOT 0,1 设置启动
IAR 一般生成 烧入FLASH的BIN======设置到0800
估计,RAM要设成 00
没做过相关试验,估计是这样。
以前有一个帖子介绍过在IAR环境下如何在RAM中调试程序
请参考10楼的帖子:
EK_STM32F在RAM里调试代码
哈哈,问题还没有解决。
哈哈,问题还没有解决。等有空的再玩玩这个不知道是不是挂了的片子。
如何使用STM32库函数解除读保护?
今天试了一下解除读保护,使用函数
if(FLASH_GetReadOutProtectionStatus() != RESET)
FLASH_ReadOutProtection(DISABLE);
仍不能解除读保护。
给个库例程
库例程里有写FLASH和写保护例程,唯独没有读保护例程....郁闷ing
我才剛遇到這樣的情形
我是在已經設定讀保護的情況下,用ULINK清除Flash
以下是我用來解除寫保護的程式碼
在RAM中執行後 OK!
int main (void) {
FLASH_Status status = FLASH_COMPLETE;
Chip_Init();
UnlockFlash();
status = WaitForLastOperation(10);
FLASH->OPTKEYR = FLASH_KEY1;
FLASH->OPTKEYR = FLASH_KEY2;
FLASH->CR |= CR_OPTER_Set;
FLASH->CR |= CR_STRT_Set;
status = WaitForLastOperation(10);
if(status == FLASH_COMPLETE)
{
/* if the erase operation is completed, disable the OPTER Bit */
FLASH->CR &= CR_OPTER_Reset;
/* Enable the Option Bytes Programming operation */
FLASH->CR |= CR_OPTPG_Set;
OB->RDP = RDP_Key;
}
/* Wait for last operation to be completed */
status = WaitForLastOperation(10);
if(status != FLASH_BUSY)
{
/* if the program operation is completed, disable the OPTPG Bit */
FLASH->CR &= CR_OPTPG_Reset;
}
while(1);
}
哈哈,问题解决,片子复生了!
谢谢xobd!和你的程序比较了一下,原来是我没有Flash_Unlock().哈哈
现在总结一下FLASH读保护和解除读保护的步骤:
(1)设置读保护
int main(void)
{
....
if(FLASH_GetReadOutProtectionStatus() != SET)
{
//FLASH_Unlock();不解锁FALSH也可设置读保护???
FLASH_ReadOutProtection(ENABLE);
}
......
while(1)
{
.....
}
}
(2)解除读保护:在程序中的某个操作中(如按键等)加入如下代码,执行后
代码自己杀死了自己,哈哈!!!
if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
※前面测试一直不能成功能解除读保护,原来是没有Unlock FLASH。
如果没有在程序中加入解除读保护代码,也不要紧,可以写段RAM中运行的程序
用于解除读保护,执行后,FLASH会自动全部擦除。代码如下:
int main(void)
{
Chinp_Init();
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
※对于在RAM中运行程序,说明如下:
(1)我使用IAR + J-Link,不用把Boot0和boot1脚设置成从RAM启动也可在RAM中调试(我是设置成从FLASH启动)。
(2)在IAR环境中设置Link文件为lnkarm_ram.xcl
(3)Debuger选项Download tab中勾全部去掉。
按上面设置完成后,按Debug按钮,执行上面程序,读保护可解除。
恭喜恭喜,这个结果具有普遍意义
ST芯片的保护措施(包括保护客户的利益)还是很到位的。
哈哈,楼主穿了这么多天裤子,自己还浑然不知啊
我在发出13的帖子时就送了条裤子,这可不是皇帝的新衣,谁都看得见的,哈哈~~~~~~
请看版面上的:
精华区