10919|18

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32FLASH读保护测试,片子挂了,高手帮忙请进! [复制链接]

你必须写一个程序并使用JTAG在RAM中运行,这个程序的目的是清除Flash的读写保护,这样Flash的内容会自动被擦除,然后Flash就可以重新使用了。

下次做这样的操作时,请预置一段清除Flash的读写保护的程序,这段程序能够通过某种机制启动,这样就不会再发生这种事情。
此帖出自stm32/stm8论坛

最新回复

                                  LS是ST官方人士么!呵呵. 当然可以,我可不会说谎话. 是通过SWD.  详情 回复 发表于 2009-11-28 00:46
点赞 关注
 

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

这个RAM中运行的程序怎么下到RAM中?

                                 这个RAM中运行的程序怎么下到RAM中?
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

程序通过JTAG在RAM中调试并执行

                                 记得设置好BOOT0和BOOT1的状态。
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 

弱弱的问下

                                 在IAR中怎么设置在RAM中调试和执行?一直没有用过....
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 

IAR设置地址,硬件BOOT 0,1 设置启动

IAR 一般生成 烧入FLASH的BIN======设置到0800

估计,RAM要设成 00



没做过相关试验,估计是这样。
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 

以前有一个帖子介绍过在IAR环境下如何在RAM中调试程序

请参考10楼的帖子:EK_STM32F在RAM里调试代码
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 

哈哈,问题还没有解决。

哈哈,问题还没有解决。等有空的再玩玩这个不知道是不是挂了的片子。

此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 

如何使用STM32库函数解除读保护?

今天试了一下解除读保护,使用函数
if(FLASH_GetReadOutProtectionStatus() != RESET)
   FLASH_ReadOutProtection(DISABLE);

仍不能解除读保护。
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

9
 

给个库例程

                                 库例程里有写FLASH和写保护例程,唯独没有读保护例程....郁闷ing
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 

我才剛遇到這樣的情形

我是在已經設定讀保護的情況下,用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);

}
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 

哈哈,问题解决,片子复生了!

谢谢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按钮,执行上面程序,读保护可解除。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

12
 

恭喜恭喜,这个结果具有普遍意义

                                 ST芯片的保护措施(包括保护客户的利益)还是很到位的。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 

这个结果能给裤子不?

                                 这个结果能给裤子不?哈哈
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

14
 

re楼上

                                 给穿裤子
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

15
 

哈哈,楼主穿了这么多天裤子,自己还浑然不知啊

我在发出13的帖子时就送了条裤子,这可不是皇帝的新衣,谁都看得见的,哈哈~~~~~~

请看版面上的:精华区
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

16
 


请问 Chinp_Init();这个函数是什么函数?好像不是库函数啊~~
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

17
 
其实以我做STM32的SWD的经验来看,是无需控制BOOT0、BOOT1来进行JTAG擦除RDP动作的。
我的EP868就可以保证在不引出BOOT0/BOOT1的情况下,可任意擦写STM32.包括RDP读保护、JTAG/SWD被代码重映射为GPIO而锁死的情况。
Jlink也做不到这种境界,呵呵
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

18
 
>> 我的EP868就可以保证在不引出BOOT0/BOOT1的情况下

就是无论 BOOT0/BOOT1 的那种组合, ep868 都可以无限制的操作 ?

通过SWD两线接口, 还是JTAG接口 ?
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

19
 


LS是ST官方人士么!呵呵.
当然可以,我可不会说谎话.
是通过SWD.
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表