首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保护stm32f10x的读flash

如何保护stm32f10x的读flash
EN

Stack Overflow用户
提问于 2014-09-11 00:22:50
回答 2查看 18.8K关注 0票数 4

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-13 07:20:51

对于被接受的答案,只需要更多的信息:

ST32F10XXX docs"2.4.1 Read protection"一节

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

注:如果在调试器仍通过JTAG/SWD连接时设置了读保护,请应用POR (开机重置),而不是系统重置(没有调试器连接)。

一旦保护字节被编程:

除用户代码外,不允许对

  • 主闪存进行读访问(在调试模式未激活的情况下从主闪存本身启动时)。
  • 第0-3页(适用于低密度和中密度设备)或第0-1页(适用于高密度和连接线设备)会自动受到写保护。存储器的其余部分可通过从主闪存执行的代码进行编程(用于IAP、常量存储等),但在调试模式下或从嵌入式静态随机存取存储器启动时,可防止写入/擦除(但不防止大量擦除)。
  • 所有与加载代码到嵌入式静态随机存取存储器和从嵌入式静态随机存取存储器执行代码相关的功能仍然有效,这可用于禁用读取保护。当读取保护选项字节改变为存储器非保护值时,批量擦除是从嵌入式静态随机存取存储器的performed.
  • When引导,通过代码和通过使用DMA1和DMA2读取的数据的闪存访问不是通过使用JTAG的数据读取的allowed.
  • Flash存储器访问,不允许使用DMA1、SWV (串行线查看器)、SWD (串行线调试)、ETM和边界扫描访问

要禁用嵌入式静态随机存取存储器的读取保护,请执行Unprotection

操作:

  • 擦除整个选项字节区域。因此,读保护码(RDP)将为0xFF。在此阶段,读保护仍为enabled.
  • Program正确的RDP码0x00A5,以取消对存储器的保护。此操作首先强制对设备的主闪存进行批量擦除(POR memory.
  • Reset ),以重新加载选项字节(和新的RDP码),并禁用读取保护。

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

芯片上还有写保护功能,请看文档。

补充道: STM32读出保护存在问题:https://blog.zapb.de/stm32f1-exceptional-failure/,因此请注意。

票数 4
EN

Stack Overflow用户

发布于 2014-11-14 06:50:55

你得先解锁闪存。在STM32 StdPeriph库中应该有一个调用。我的代码看起来像这样:

代码语言:javascript
复制
/* 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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25770483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档