如何保护stm32f10x的读取闪存

时间:2014-09-10 16:22:50

标签: stm32

我正在使用STM32F103开展项目,我已经完成了固件的开发。我使用ST-Link Utility将内容下载到微控制器。当我在芯片上激活读出保护时,它会停止工作。我需要保护我的固件。有什么问题?

3 个答案:

答案 0 :(得分:2)

接受答案的信息多了一点:

来自ST32F10XXX docs" 2.4.1阅读保护"

  

通过设置RDP选项字节和来激活读保护   然后,通过应用系统复位来重新加载新的RDP选项字节。

     

注意:如果在调试器静止时设置了读保护   通过JTAG / SWD连接,应用POR(上电复位)而不是a   系统重置(无调试器连接)。

     

一旦保护字节   已被编程:

     
      
  • 不允许进行主闪存读取访问   除了用户代码(从主闪存本身启动时)   调试模式未激活)。
  •   
  • 第0-3页(低和 -   中等密度设备),或0-1页(高密度和高密度设备)   连接线设备)自动写保护。其余的部分   可以通过从main执行的代码对存储器进行编程   闪存(用于IAP,恒定存储等),但它受到保护   在调试模式下或何时反对写入/擦除(但不反对大量擦除)   从嵌入式SRAM启动。
  •   
  • 所有功能都与将代码加载到嵌入式SRAM中并执行代码相关联   仍然是活动的(JTAG / SWD和从嵌入式SRAM启动),这可以用来   禁用读保护。当读保护选项字节更改为a时   memory-unprotect value,执行批量擦除。
  •   
  • 从嵌入式SRAM启动时,Flash存储器通过代码访问   并且不允许使用DMA1和DMA2读取数据。
  •   
  • 通过使用JTAG,SWV(串行线查看器),SWD读取数据进行闪存访问   (串行线调试),不允许ETM和边界扫描
  •   
     

<强>解除保护

     

禁用嵌入式SRAM的读保护:

     
      
  • 删除整个选项字节区域。结果,读保护代码(RDP)将是   0xFF的。在此阶段,仍然启用了读保护。
  •   
  • 编程正确的RDP代码0x00A5以取消保护内存。这个操作首先   强制主闪存的质量擦除。
  •   
  • 重置设备(POR重置)以重新加载选项字节(和新的RDP代码),   禁用读保护。
  •   
     

注意:可以使用引导加载程序禁用读保护(在这种情况下只能进行系统复位)   必须重新加载选项字节)。有关更多详细信息,请参阅AN2606。

芯片上还有写保护,请参阅文档。

答案 1 :(得分:1)

我发布这个问题已经有一段时间了,因为它有一些新的活动,我会发布我找到的答案。

在对控制器进行编程之后,转到ST-Link Utility的Option Bytes部分并启用Read Out保护。请记住,启用后,核心将停止工作,您应该自己重置微控制器。要重新编程,您应该禁用读出保护,实用程序将自动执行此操作。

答案 2 :(得分:0)

您必须先解锁闪光灯。应该在STM32 StdPeriph库中调用。我的代码看起来像这样:

/* Read protect the flash.  NEVER EVER set this to level 2.  You can't
 * write to the chip ever again after that. */
FLASH_OB_Unlock();
FLASH_OB_RDPConfig( OB_RDP_Level_1 );
if (FLASH_OB_Launch() != FLASH_COMPLETE)
{
    err_printf("Error enabling RDP\n");
}
FLASH_OB_Lock();