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