历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2018年12月17日 | STM32-读保护功能和清除读保护功能设置

2018-12-17 来源:eefocus

1、STM32对内部Flash的保护措施 


   所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。

   1)、读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:通过调试器(JTAG或SWD);从RAM中启动并执行的程序;
  

 2)、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。  

读与写设置的效果见下表:
   

读保护写保护      对Flash的操作功能
    

有效有效 CPU只能读,禁止调试和非法访问。
    

有效无效 CPU可以读写,禁止调试和非法访问,页0~3为写保护。
    

无效有效 CPU可读,允许调试和非法访问。
    

无效无效 CPU可以读写,允许调试和非法访问。

2、当Flash读保护生效时,CPU执行程序可以读受保护的Flash区,但存在两个例外情况:1)、调试执行程序时;2)、从RAM启动并执行程序时

   

STM32还提供了一个特别的保护,即对Flash存储区施加读保护后,即使没有启用写保护,Flash的第 0 ~ 3 页也将处于写保护状态,这是为了防止修改复位或中断向量而跳转到RAM区执行非法程序代码。

3、Flash保护相关函数
   

FLASH_Unlock();   //Flash解锁
   

FLASH_ReadOutProtection(DISABLE);  //Flash读保护禁止  
   

FLASH_ReadOutProtection(ENABLE);   //Flash读保护允许


4、stm32置读保护跟清读保护操作

  

功能:读保护设置后将不能读出flash 的内容;当解除读保护的时候stm32 会自动擦出整篇flash;
  

读保护设置:在程序的开头加入“读保护”代码,即实现了读保护功能;(每次程序运行先开保护)
 

 解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也不可不设按键在RAM中执行程序再清除读保护;
 

 (1)设置读保护:


 int main(void)
{
    ....

      
    if(FLASH_GetReadOutProtectionStatus() != SET)
    {
        //FLASH_Unlock();不解锁FALSH也可设置读保护???
        FLASH_ReadOutProtection(ENABLE);   
    }
    ......
    while(1)
    {
       .....
     }
}

    

这个写到程序当中并执行过后,使用j-link就不能‘读出’程序了,就是‘读保护’了!没有使用此程序可以读出下载到芯片中的程序,但是如果使用了此程序就无法读出程序了。但是也无法再次烧写新的程序到芯片中了(要测试请慎重!!!!!!)

  

可以在主程序当中设置一按键专门清除“读保护”,一旦按下按键则清除“读保护”时芯片可以重新被烧写。

  

(2)解除读保护:在程序中的某个操作中(如按键等)加入如下代码,执行后代码自己杀死了自己!


if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
   

这些函数在stm32f10x_flash 里面,注意:调用上面这个库的时候需在#include "stm32f10x_flash.h"前加#define _FLASH_PROG;否则报(没有定义)错。

   

如果你没有做按键清除读保护这一步还有方法二补救:专门写一个清除“读保护”程序,使用RAM中运行程序的方法,运行此程序解锁“读保护”,执行后,FLASH会自动全部擦除。代码如下:


int main(void)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE); 

  while (1)
  {
  };
}

※对于在RAM中运行程序,说明如下:

(1)我使用IAR + J-Link,不用把Boot0和boot1脚设置成从RAM启动也可在RAM中调试(我使用IAR没有RAM中运行选项)。

(2)在IAR环境中设置Link文件为lnkarm_ram.xcl或者自己修改STM32F10x_FLASH.icf文件


//define symbol __ICFEDIT_region_ROM_start__ = 0x080000F0;  //修改为如下:
define symbol __ICFEDIT_region_ROM_start__ = 0x200000F0;

//define symbol __ICFEDIT_region_ROM_end__   = 0x0803FFFF;  //修改为如下
define symbol __ICFEDIT_region_ROM_end__   = 0x20001FFF;


//define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; //修改为如下
define symbol __ICFEDIT_region_RAM_start__ = 0x20002000;


(3)Debuger选项Download tab中勾全部去掉。

按上面设置完成后,按Debug按钮,执行上面程序,读保护可解除。


(4)点击下载运行时。可能会提示错误(有时不提示)

当下载时,提示 CRC校验失败,选择 NO(右边)。

当下载时,提示无法擦除 sector 0,选择NO(右边)


(5)运行前使用J-Flash ARM"工具,Target->unsercure chip 解除了芯片的读保护。不然会出现上述各种报错。


if (FLASH_GetReadOutProtectionStatus() == RESET) 
{
FLASH_Unlock();
FLASH_ReadOutProtection(ENABLE); 
}

if (FLASH_GetReadOutProtectionStatus() == SET) 


FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE); 
}

CPU Flash读保护使能后,仿真器调试会失败。J-LINK有个解锁菜单,需要解锁才能正常再次烧写程序。当然解锁会导致Flash内容被全部擦出。 运行启动"J-Flash ARM"工具,Target->unsercure chip 就解除了芯片的读保护。Target->unsercure chip 后一定要上电复位,系统不复位是不行的。


推荐阅读

史海拾趣

DSP Group Inc公司的发展小趣事

在智能语音领域,DSP Group凭借其深厚的技术积累和创新能力,取得了显著的突破。公司推出了一系列智能语音处理技术和产品,如SmartVoice系列语音处理芯片和算法套件等。这些技术和产品不仅为用户提供了更加自然、智能的语音交互体验,还为智能家居、汽车电子等领域的发展提供了有力支持。

ETA-USA公司的发展小趣事

ETA-USA一直注重技术创新和研发实力的提升。公司拥有一支高素质的研发团队和先进的研发设施,不断推出具有竞争力的新产品和解决方案。同时,ETA-USA还积极与高校、科研机构等合作,共同推动电子技术的创新和发展。

世纪金光(CENGOL)公司的发展小趣事

随着新能源汽车市场的快速发展,世纪金光敏锐地捕捉到了这一领域的巨大潜力。公司迅速组建专项研发团队,基于碳化硅技术开展新能源汽车电机驱动系统的研发工作。经过不懈努力,世纪金光成功开发出基于碳化硅技术的新能源汽车电机驱动系统,并在技术上取得了重要进展。这一成果不仅提升了新能源汽车的性能和效率,也为公司打开了新的市场空间。

CSB公司的发展小趣事

随着技术的不断发展和市场的日益成熟,CSB公司意识到单纯依靠技术创新已无法满足企业长远发展的需求。于是,公司开始加强市场拓展和品牌建设。通过积极参加行业展会、加大广告宣传力度、优化销售渠道等方式,CSB公司成功提升了品牌知名度和美誉度。同时,公司还注重与合作伙伴建立长期稳定的合作关系,共同开拓市场,实现互利共赢。

Grand Halo Technology Co Ltd公司的发展小趣事

CSB公司深知人才是企业发展的核心竞争力。因此,公司一直注重人才培养和团队建设。通过建立完善的培训体系、提供丰富的职业发展机会、营造积极向上的企业文化等方式,CSB公司吸引了一批批优秀的人才加入。这些人才为公司的发展注入了新的活力,推动了公司在技术、市场、管理等方面的不断进步。

Fagor Electrónica公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Fagor Electrónica开始将其业务范围扩展到更广泛的电子和数字领域。公司不断推出新的产品和服务,以满足不同客户的需求。同时,Fagor Electrónica还积极拓展国际市场,将其产品销往世界各地。这一时期的多元化发展和市场拓展为公司带来了更大的商业机会和更广阔的市场前景。

问答坊 | AI 解惑

请教一下,充电电路中开关管发热的问题

最近做了个充电器,BUCK电路中的开关管发热严重,输入是12V的电源。 第一种情况:当充电电压输出为4.2V,电流为500MA的时候开关管发热严重,恒压充电的时候电压恒定4.2v电流慢慢减小这时候开管发热现象减轻。 第二种情况:当充电电压输出为8.4 ...…

查看全部问答>

LM317电源制作

[ 本帖最后由 yuandayuan6999 于 2010-5-14 22:09 编辑 ]…

查看全部问答>

msp430 SPI通信

有没有人做过msp430单片机的SPI通信   望大侠帮帮…

查看全部问答>

新手提问,请教单片机硬件该怎么设计呢

大家好,我刚刚学单片机一个月了,用买来的学习机做好了许多试验,现在我想自己买元件,从硬件开始设计,我知道该买些元件啊,板子啊,来焊接,但我不懂具体怎么操作,请问有没有讲这方面的书呢,电子方面的啊,谢谢大家推荐…

查看全部问答>

最牛的无线数传资料

无线数传模组: a.通用数传模组    WAP200B、EM200D、GW200B,最大100mW,64个频道,传输距离800米左右,内置前向纠错,最高速度19200(接口可达115200); b.高灵敏度数传模组   WAP200C、GW200KB,最大20mW,64个频道,传 ...…

查看全部问答>

MSP430中 timer_B和ADC12中断的矛盾

我现在遇到的问题是 ADC12IE = 0x01; 会影响timer_B定时的精度 但是 我查过手册,上面说timer_B高于ADC12中断优先级(先是用的timer_A,发现现象不对) 只要屏蔽ADC12IE = 0x01; 定时就精确了! 求解,求赐教!…

查看全部问答>

STM32现在有没有带总线和USBHOST或者OTG的片子?

                                  …

查看全部问答>

请问哪儿有Jlink-ob_stm32的原理图?

                                 看了网上的,觉得不错,想做个玩玩,只不过网上的图不清楚,不知哪儿有清楚的,说是IAR提供的开发板图上面的一部分 ...…

查看全部问答>

mma7455 加速度传感器怎么校正?

请教一下,mma7455 加速度传感器怎么校正,x,y,z校正值是多少?谢谢 [ 本帖最后由 sanxin126 于 2011-7-27 21:09 编辑 ]…

查看全部问答>

24C02第一次读取问题

自己写了个小程序,把51开发板上的键盘,LCD,串口通信,24C02存储都整合到了一起。程序大致分为两块,一个是串口通信,一个是数据存储、查询。PC可以向单片机发送数据,单片机接受并显示,同时可以将其存储进24C02中。查询模块可以读取24C02中的数 ...…

查看全部问答>