LAT1023
Local Application Tips
LAT1023 – Rev 1.0 – Oct. 2021
STM32H750 上使用 PCROP 后导致 Hard Fault
关键字:PCROP,Hard Fault,
STM32H750
1. 引言
PCROP 全称为 Proprietary code read out protection(专用代码保护),它提供了一种新的代码
保护机制,在 PCROP 区域的内容只能为可执行,不能读取或写入。这种机制可以为 OEM 厂商
提供保护,方便保护自己 IP 的代码。本文主要记录在使用 PCROP 上遇到的 Hardfault 问题。
如何使用 PCROP 呢?
参考 AN4968 中 PCROP 的描述,PCROP 的使用大致有以下几个步骤:
1. 将需要保护的文件,在 IDE 中标识为仅可执行,IAR 和 KEIL,CubeIDE 都有此类标识。
2. 需要修改 Link 文件,将受保护文件中的 rw data, ro data, ro code 进行分区存放。
3. 通过修改选项字,将受保护文件中的 ro code 中的内容进行 PCROP 保护。
4. 编译工程产生保护文件的.o 文件,并把符号导出给实际应用工程使用。
2. 问题描述
在我使用 IAR 进行 PCROP 的测试时,发生了如下错误。
图 1. IAR 中的 Hard Fault 提示窗口
3. 问题分析与定位
PCROP 调试时,会遇到一个问题,那就是由于代码已经被保护起来,无法单步调试。目前知道
的只是当 PCROP 打开的时候会导致 Hard Fault,而不使用 PCROP 没有问题。那么这个问题和
PCROP 强相关了。
接下来,只能通过一些简单的测试来定位发生问题的大概位置了,比如在函数入口添加一些简单
的汇编代码,比如 IAR 中可以添加代码往寄存器 R5 中写入特殊测试值:__ASM(" MOVS R5,