STMCU小助手
发布时间:2022-8-1 22:26
|
1. 引言 PCROP 全称为 Proprietary code read out protection(专用代码保护),它提供了一种新的代码保护机制,在 PCROP 区域的内容只能为可执行,不能读取或写入。这种机制可以为 OEM 厂商提供保护,方便保护自己 IP 的代码。本文主要记录在使用 PCROP 上遇到的 Hardfault 问题。 如何使用 PCROP 呢? 参考 AN4968 中 PCROP 的描述,PCROP 的使用大致有以下几个步骤:9 ]( P, Z5 B; Z& {3 F: R, q- A0 v; j 1. 将需要保护的文件,在 IDE 中标识为仅可执行,IAR 和 KEIL,CubeIDE 都有此类标识。7 L. l2 c9 K5 \" r! H/ J 2. 需要修改 Link 文件,将受保护文件中的 rw data, ro data, ro code 进行分区存放。 3. 通过修改选项字,将受保护文件中的 ro code 中的内容进行 PCROP 保护。& {4 _, u9 e" @ K+ j) } 4. 编译工程产生保护文件的.o 文件,并把符号导出给实际应用工程使用。( ~2 ]( p' h3 R& M1 G & e4 Z- Q+ H/ U% @; W; A 2. 问题描述9 }$ _2 u2 z7 e" d( c 在我使用 IAR 进行 PCROP 的测试时,发生了如下错误。 " H: |' k+ ^ e% [. x( F5 S
# X; o5 p0 @- n) g! s; N5 r 3. 问题分析与定位: U1 ^6 B9 P3 c2 ] PCROP 调试时,会遇到一个问题,那就是由于代码已经被保护起来,无法单步调试。目前知道的只是当 PCROP 打开的时候会导致 Hard Fault,而不使用 PCROP 没有问题。那么这个问题和PCROP 强相关了。$ L" r& f8 }1 e. X 接下来,只能通过一些简单的测试来定位发生问题的大概位置了,比如在函数入口添加一些简单的汇编代码,比如 IAR 中可以添加代码往寄存器 R5 中写入特殊测试值:__ASM(" MOVS R5, #11"),通过这个简单的测试,发现函数并没有执行到这里来。所以大概在跳转之后,执行这一句代码之前就已经发生了问题。* f& h" h/ I A4 J* s- x" Y7 Z Hard Fault 的错误描述为:INVSTATE,无效状态代表的是试图切换到 ARM 状态,查看文档后有以下信息: ; ^, [, O/ k$ M$ C- ^4 U8 h
把 PCROP 取消掉以后,查看汇编代码如下图 3: # Q( Z: t* n! E1 }, C8 l) P' w: F4 Y
8 [0 p* I% o) k( l6 F0 F 0x9003 开头的是外部 flash 地址,首先会跳转到 0x9003’6fd8 去执行,如下图 4。 % C. L1 \) _1 o' Y9 } 6 t5 E) `& `9 k- b6 U0 s
2 ^8 h* s; o4 E : S! P) x( Z% N& r 完整版请查看:附件 1 P6 i' `+ S5 @4 L) i. \ % j/ M) F/ ~* g, ` 9 C8 x5 }. z' I2 p/ w8 k) o |
LAT1023_STM32H750上PCROP的使用问题.pdf
下载575.09 KB, 下载次数: 0
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版