STM32的Flash写了保护怎么办?

发布时间:2024-08-26  

关于STM32对内部Flash的保护

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


如果对Flash设置了写保护,那就无法对Flash进行编程和擦除。在开发STM32的时候,如果出现这种情况,通常仿真器都支持对Flash进行解锁,像jlink,stlink等仿真器都支持这个功能。


在使用MDK进行调试的时候,可能会遇到如下图所示的报错信息,这时候就要排查Flash是不是被保护起来了。

f4b3f78e-b019-11ec-aa7f-dac502259ad0.png

读保护即大家通常说的“加密”,是作用于整个Flash存储区域,相关文章:STM32等单片机程序加密的方法。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:

  • 通过调试器(JTAG或SWD)

  • 从RAM中启动并执行的程序

写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志,读与写设置的效果见下表:

f4c95912-b019-11ec-aa7f-dac502259ad0.png

当Flash读保护生效时,CPU执行程序可以读受保护的Flash区,但存在两个例外情况:


调试执行程序时


从RAM启动并执行程序时


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

Flash保护的相关函数


FLASH_Unlock();   //Flash解锁 

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

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

STM32如何设置读保护和解除读保护?


读保护设置后将不能读出Flash中的内容。


如何设置读保护


在程序的开头加入“设置读保护”的代码即可,每次运行代码时都检查一下,如果没有开就打开,如果打开了就跳过。其中,设置读保护的代码如下:


int main(void)

{

  ...

if (FLASH_GetReadOutProtectionStatus()!=SET)//检查设置读保护与否

  {

    FLASH_Unlock();         //写保护时可以不用这句话,可用可不用

    FLASH_ReadOutProtection(ENABLE);     //设置读保护

  }

  ...

while(1)

  {

    ...

  }

}


上面的代码执行后,使用j-link就不能读出程序了,实现了代码读保护。需要注意的是,芯片读保护后无法再次烧写新的程序到Flash中,必须要解除读保护才可以。但是当解除读保护的时候STM32会自动擦除整个Flash,起到保护数据的作用。


通过代码解除Flash保护


解除读保护可以设置在按键里面,方便实现解锁,也可以设置在命令中。如下是解除读保护代码:

f4dd8cb6-b019-11ec-aa7f-dac502259ad0.png


程序中设置一个按键或者命令,可以随时解除Flash的读保护,让芯片又可以重新烧录程序。如果没有留,还可以专门写一个程序,下载到RAM中去运行,用来解除读保护。

注意:执行后,Flash会自动全部擦除。


int main(void)

{

Chip_Init();

  FLASH_Unlock(); //不解锁FALSH也可设置读保护,可用可不用

  FLASH_ReadOutProtection(DISABLE);

}


通过ST-LinkUtility来解除Flash保护

在STLink连接目标板的情况下打开程序烧写软件ST-Link Utility,在菜单栏的Target下选择connect,因为这时候Flash已经被锁住了,能看到如下图所示的错误提示。

f4ef2930-b019-11ec-aa7f-dac502259ad0.png

下面来操作如何解除Flash保护。

请确保当前已经正确连接了STLink和目标板,在菜单栏Target里打开Option Bytes...选项,发现在这里Read Out Protection选项是Enable,这个表示无法通过SWD读取STM32内部Flash的程序。

f5093122-b019-11ec-aa7f-dac502259ad0.png

将Read Out Protection选项设置为Disable,并点击Apply。

这时候Flash已经成功解锁了,跟上文提到的解除Flash保护的结果一样,内部Flash已经被擦除了,如下图红框中所示。

f51b3f8e-b019-11ec-aa7f-dac502259ad0.png

完成以上步骤之后,在菜单栏Target下选择Disconnect断开与目标板连接。

重新进入MDK,可以正常对目标板烧写程序了。

通过ST-LinkUtility来设置Flash保护

f536c650-b019-11ec-aa7f-dac502259ad0.png

在菜单栏Target里打开Option Bytes...选项,可以看到下面有Flash sector protection选项。选择Select all之后,发现所有Page的Protection项都已经变成Write Protection了,只要选择Apply选项就可以对Flash进行写保护,如上图所示。

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>