你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H750 上使用 PCROP 后导致 Hard Fault

[复制链接]
STMCU小助手 发布时间:2022-8-1 22:26
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 的测试时,发生了如下错误。


2J4`BV9(XZUGG6{NQU%7)H6.png

3. 问题分析与定位
PCROP 调试时,会遇到一个问题,那就是由于代码已经被保护起来,无法单步调试。目前知道的只是当 PCROP 打开的时候会导致 Hard Fault,而不使用 PCROP 没有问题。那么这个问题和PCROP 强相关了。
接下来,只能通过一些简单的测试来定位发生问题的大概位置了,比如在函数入口添加一些简单的汇编代码,比如 IAR 中可以添加代码往寄存器 R5 中写入特殊测试值:__ASM(" MOVS R5,  #11"),通过这个简单的测试,发现函数并没有执行到这里来。所以大概在跳转之后,执行这一句代码之前就已经发生了问题。
Hard Fault 的错误描述为:INVSTATE,无效状态代表的是试图切换到 ARM 状态,查看文档后有以下信息:


Q2E6~5`]M6~W2]4XGEAJ534.png

把 PCROP 取消掉以后,查看汇编代码如下图 3:


$EXLP3AUTFH}_H`RGHELXBL.png

0x9003 开头的是外部 flash 地址,首先会跳转到 0x9003’6fd8 去执行,如下图 4。


@)H`8B}G%[{S~J]Z[WZE_S3.png



完整版请查看:附件



LAT1023_STM32H750上PCROP的使用问题.pdf

下载

575.09 KB, 下载次数: 0

收藏 评论0 发布时间:2022-8-1 22:26

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版