OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10980|回复: 14

STM32读保护和解除读保护和在SRAM中调试程序.pdf

[复制链接]

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
发表于 2015-3-18 16:50:48 | 显示全部楼层 |阅读模式


好东西就是要来分享的:

昨天准备熟悉一下STM32内部Flash功能,不小心把flash设置了读保护,芯片不能烧写程序不能仿真调试,无奈只能想办法解除读保护。读保护也能用来程序加密,因为解除读保护的同时flash全部填充0xff别人也就拿不走你的代码。

一、      设置读保护

函数库方法:

int main(void){    FLASH_Unlock();

            FLASH_ReadOutProtection(ENABLE); 

while(1);}

就是这么简单你的片子就挂掉了。

寄存器方法:

这个麻烦一点,你要先读flash数据手册,然后了解flash寄存器,然后总之挺麻烦

大体步骤如下:擦除键值FPEC——擦除OPEKEYR键值(CR-OPTWRE自动置一又自动清零)——OPTER置位(允许写选择字节)——STRT置位(擦除选择字节)——清除OPTER——OPTPG烧写选择字节——OB->RDP写字节。然后你的片子就挂掉了

 

int main(void)

{           FLASH->KEYR = 0x45670123;

           FLASH->KEYR = 0xCDEF89AB; //擦除键值FPEC

           while(FLASH->SR&0x00000001);

           FLASH->OPTKEYR = 0x45670123;

            FLASH->OPTKEYR = 0xCDEF89AB;

            FLASH->CR |= (1<<5); //OPTER=5

            FLASH->CR |= (1<<6); //    STRT=6

            while(FLASH->SR&0x00000001);

            FLASH->CR &= ~(1<<5);

            FLASH->CR |= (1<<4); //OPTER=5

            OB->RDP = 0x0000; //

            while(FLASH->SR&0x00000001);

FLASH->CR &=~ (1<<4); //OPTER=5

二、      解除读保护

问题来了,芯片已经设置了读保护,不能下载程序,不能仿真调试。想要解除读保护就得让解除程序在芯片运行,保护知识针对flash的操作,RAM并不受影响,所以只需要把程序在RAM运行就可以了。

下面介绍MDK下RAM调试设置方法:

全部是设置options for target 里面内容

1.    选择芯片型号,我用的是device ——STM32F13C8T6

2.    Target:  IROM1: 0x20000000  0x2000

       IRAM1: 0X20002000 0X3000

我的芯片是20K容量的内部SRAM    一部分存放程序,一部分存变量

以往在flash运行程序的时候程序是放在flash内部的,这里把程序放在ram里面,另外开辟一部分ram存放变量

3.    Linker设置

主要是设置存放程序和变量位置的起始地址

下面scatter file 的文件内容要与ram的分配相匹配

下面贴上我的代码:

LR_IROM1 0x20000000 0x00002000  {    ; load region size_region

  ER_IROM1 0x20000000 0x00002000  {  ; load address = execution address

   *.o (RESET, +First)

   *(InRoot$$Sections)

   .ANY (+RO)

  }

  RW_IRAM1 0x20002000 0x00003000  {  ; RW data

   .ANY (+RW +ZI)

  }

}

4设置debug:

Load application at startup选项去掉勾选。

其中ini文件内容需要自己写主要重定向SP.PC指针

下面帖ini文件内容:

FUNC void Setup (void) {

  SP = _RDWORD(0x20000000);          // Setup Stack Pointer

  PC = _RDWORD(0x20000004);          // Setup Program Counter

  _WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register

}

 

LOAD STM32_RAM_RUN.axf INCREMENTAL      // 这个axf文件要换成自己的

 

Setup();                             // Setup for Running

 

g, main

5设置utilities

去掉Update target before debugging 勾选

点击settings

如图设置

RAM for Algorithm   开始地址是前面设置的IRAM1的起始地址,大小也是那个的大小。下面那个programming algorithm可以不选,我这里还是flash的地址呢,因为咱们是操作SRAM所以这个没有影响。

 

设置完之后可以仿真程序,不是下载,不好用也不要着急。我测试了一上午不好用总是出错,中午吃完饭回来把工程重新建立,设置一边就好了,最终也不知道是什么原因。运行之后打开反汇编窗口会发现程序停在0x20000000以后的地址上

到这里我们SRAM调试程序已经设置成功。想要解除读保护也就不难了,把解除读保护的放在main函数里运行就OK了

下面贴程序

函数库版本:

比较简单int main(void)

{          

FLASH_Unlock();

            FLASH_ReadOutProtection(ENABLE); 

while(1);

}

寄存器版本:操作与设置读保护一样,知识把OB->RDP的值改变一下变为0x00A5;

int main(void)

{

           FLASH->KEYR = 0x45670123;

           FLASH->KEYR = 0xCDEF89AB; //擦除键值FPEC

           while(FLASH->SR&0x00000001);

           FLASH->OPTKEYR = 0x45670123;

            FLASH->OPTKEYR = 0xCDEF89AB;

            FLASH->CR |= (1<<5); //OPTER=5

            FLASH->CR |= (1<<6); //    STRT=6

            while(FLASH->SR&0x00000001);

            FLASH->CR &= ~(1<<5);

            FLASH->CR |= (1<<4); //OPTER=5

            OB->RDP = 0x0000; //

            while(FLASH->SR&0x00000001);

FLASH->CR &=~ (1<<4); //OPTER=5

 

 

总结:文笔有限,SRAM看不明白可以问度娘网上很多方法,读保护和解除读保护是在看不懂就用函数库的把,简单方便,寄存器的看不明白请仔细研读flash手册。比较苦恼的就是MDK里面没有找到监测FLASH寄存器的窗口哪位大神如果知道还请告诉小弟一声。邮箱baozitai@163.com,有啥问题可以问我

STM32F10xxx闪存编程参考手册.pdf

564.92 KB, 下载次数: 1085

STM32读保护和解除读保护和在SRAM中调试程序.pdf

310.92 KB, 下载次数: 1507

人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1367
金钱
1367
注册时间
2014-2-13
在线时间
169 小时
发表于 2015-3-18 16:59:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-18 17:49:59 | 显示全部楼层
多谢分享。。。。。。
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
 楼主| 发表于 2015-3-19 08:49:36 | 显示全部楼层
回复【2楼】solo:
---------------------------------
应该是格式不对吧,下面里文件有图片
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

9

主题

121

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1611
金钱
1611
注册时间
2014-7-8
在线时间
173 小时
发表于 2015-4-1 20:14:00 | 显示全部楼层
有链两个资料,标记下!
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
 楼主| 发表于 2015-4-2 10:35:28 | 显示全部楼层
回复【5楼】xzh5508:
---------------------------------
附件吗?第一个是官方资料,第二个是我自己写的
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

9

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
426
金钱
426
注册时间
2011-7-11
在线时间
49 小时
发表于 2015-4-2 12:44:11 | 显示全部楼层
留着以后慢慢看~~~
回复 支持 反对

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-4-2 13:07:25 | 显示全部楼层
mark...
回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-8-28
在线时间
0 小时
发表于 2015-5-20 18:04:46 | 显示全部楼层
赞一个 赞一个
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
 楼主| 发表于 2015-5-21 09:11:37 | 显示全部楼层
竟然不能编辑了,在这里补充了:

最近看了一下 MDK的加载文件scatter文件的知识,当用secatter文件时候,可以不用在target上面设置ROM RAM。可以理解为secatter文件的权限最高。
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-5-21 17:29:45 | 显示全部楼层
学习一下。 mark,stm32读写保护
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

头像被屏蔽

65

主题

277

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2013-8-11
在线时间
29 小时
发表于 2015-8-16 09:08:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-4-8
在线时间
13 小时
发表于 2016-10-19 14:49:20 | 显示全部楼层
试了一下,发现依然不行。难道因为我用的是ST-Link而楼主用的是J-Link的原因?
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2015-9-29
在线时间
81 小时
发表于 2016-11-16 16:30:17 | 显示全部楼层
谢谢楼主
回复 支持 反对

使用道具 举报

4

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
265
金钱
265
注册时间
2015-5-30
在线时间
85 小时
发表于 2016-11-30 10:38:41 | 显示全部楼层
MARK!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 19:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表