PCROP为Proprietary code readout protection 的缩写,是一个专有代码读出保护的功能。与RDP 对整片Flash读保护不同的是,它只
是针对Flash 的某些特定区域进行代码的读写保护。它可以被用来保护一些IP代码,方便进行二次开发。ST公司的多个STM32产品系列
,比如STM32L1、STM32F4、STM32L4、STM32F7、STM32H7等都支持PCROP功能。
受PCROP保护的IP代码可以随意地被用户应用程序调用运行,同时又防止外界对IP代码的直接读写访问。
写保护和PRROP保护都可以针对指定的扇区配置,但是在同一存储器内要么针对扇区实施写保护,要么针对扇区进行PCROP保护。不可
以一部分扇区配置写保护,另一部分扇区配置PCROP保护。
PCROP区的代码也可以调用PCROP区外的处于固定地址的函数。受PCROP保护的区域是无法使用D-Code 总线进行读访问的,所以在这片区域中只允许执行指令代码(通过I-Code 总线取指令),数据读取是被禁止的。因此,受保护的IP代码不能访问存储于同一块区域内的关联数据,比如文字池(literal pools)、分支表
(branch tables)以及在执行过程中需要通过D-code总线进行读取的常量数据。
换言之,受PCROP 保护的代码只能是只执行的指令代码,而不包含任何数据。因此,我们在编译受PCROP保护的IP代码时,必须对其进
行相应配置,以避免在PRROP区域生成文字池、常量数据等。
我们知道STM32的中断向量表里都是些常量数据,所以包含中断向量表的扇区不可进行PCROP。一般来讲向量表放在第一个扇区,所以该
扇区不可进行PCROP。
对PCROP简单的介绍了,下面介绍下使用cube 配置工程(原本是打算让代码在SRAM里运行,PCROP保护和解保护程序的。但是STM32F722 上实现不了,具体原因就是配置的SRAM下载不进去了。但是同样的配置在F767的板子就没问题。。搞不懂了。。希望有高人再指点下。。)
这个演示帖子,目前可以使用软件开启PCROP 所选取的区域设置保护,还无法通过程序解保护。。。不过可以使用STM32 ST-LINK Utility工具来接除保护。。。
好了,接下来就演示下,过程。。
用cube 配置工程,串口3输出信息,PC13板载按键用于启动 程序的执行。。还有PB0用于显示运行结果。。
好了先用STM32 ST-LINK Utility 查看下F722 上各个区块的PCROP的保护情况。
这里再简单的说下:
PCROP 可以选择不同的sector保护,只需要设置对应的寄存器开启保护就可以。但是 要解除
PCROP保护就需要把RDP 读保护的等级设置1 后再降级到0 才可以再进行对应的解除PCROP的保护。。
这个PCROP的保护程序截图。。编译后我们把他下载开发板上。。
好了,现在可以在串口看到调试的信息了。。
然后我们再到STM32 ST-LINK Utility下查看被PCROP 保护的Sector 6-7
现在我们用STM32 ST-LINK Utility 把 RDP的读保护等级设置成1
然后再降级到0 就可以解除PCROP的sector保护了
解保护后的截图
整个工程文件:
STM32F722ZE_PCROP.rar
(4.33 MB)
好了,演示贴就先到这。。。
|