如何保护stm32f10x的读取闪存

如何保护stm32f10x的读取闪存,stm32,Stm32,我正在使用STM32F103进行一个项目,我已经完成了固件的开发。我使用ST-Link实用程序将内容下载到微控制器。当我激活芯片上的读取保护时,它停止工作。我需要保护我的固件。有什么问题吗?您必须先解锁闪光灯。STM32 StdPeriph库中应该有一个调用。我的代码如下所示: /* Read protect the flash. NEVER EVER set this to level 2. You can't * write to the chip ever again after t

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

您必须先解锁闪光灯。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();

对于公认的答案,只需提供多一点信息:

从,章节“2.4.1读取保护”:

通过设置RDP选项字节和 然后,通过应用系统重置来重新加载新的RDP选项字节

注意:如果在调试器仍处于运行状态时设置了读取保护 通过JTAG/SWD连接,应用POR(上电复位)而不是 系统重置(无调试器连接)

一旦保护字节 已编程:

  • 不允许主闪存读取访问 用户代码除外(从主闪存本身启动时 调试模式未激活时)
  • 第0-3页(适用于低端和低端) 中等密度设备),或第0-1页(适用于高密度和 连接线设备)是自动写保护的。其余的 可通过从主存储器执行的代码对存储器进行编程 闪存(用于IAP、恒定存储等),但受到保护 在调试模式下或 从嵌入式SRAM引导
  • 链接到将代码加载到嵌入式SRAM并从中执行代码的所有功能 仍然处于活动状态(JTAG/SWD和从嵌入式SRAM引导),这可用于 禁用读取保护。当读取保护选项字节更改为 内存取消保护值,执行大规模擦除
  • 从嵌入式SRAM引导时,闪存通过代码进行访问 不允许使用DMA1和DMA2读取直通数据
  • 通过使用JTAG、SWV(串行线查看器)、SWD读取数据访问闪存 (串行线调试)、ETM和边界扫描是不允许的
解除保护

要禁用嵌入式SRAM的读取保护,请执行以下操作:

  • 擦除整个选项字节区域。因此,读取保护代码(RDP)将被删除 0xFF。在此阶段,读取保护仍处于启用状态
  • 编程正确的RDP代码0x00A5以取消对内存的保护。这次行动是第一次 强制对主闪存进行大规模擦除
  • 重置设备(POR Reset)以重新加载选项字节(和新的RDP代码),然后, 禁用读取保护
注意:可以使用引导加载程序禁用读取保护(在这种情况下,只有系统复位) 需要重新加载选项(字节)。有关更多详细信息,请参阅AN2606

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


添加:STM32读出保护有问题:请注意。

您能提供更多细节吗?例如:当您必须从用户固件调用此功能时?