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

话说STM32的PCROP代码保护功能

[复制链接]
STMCU小助手 发布时间:2021-1-27 11:10
话说STM32的PCROP代码保护功能
2.1.jpg
软件供应商们在致力于开发属于自己的知识产权的软件产品,尤其是那些中间件产品的同时,如何保护这些知识产权[IP]实际上也是他们非常关心和重视的问题。基于各类微处理器的嵌入式产品对IP保护的要求也日益明显和迫切。
/ V& c. I7 ?4 Z. F
为了满足对产品IP保护的需求,STM32的各系列MCU都提供芯片读保护写保护。除此之外,目前STM32家族10个产品线中,除了STM32F1等个别早期产品线外,还增加了专有代码读保护功能,即Proprietary Code Read Out Protection (PCROP)。
2 m1 ], \! y7 r  Q
• Read Protection(RDP): 对整个芯片实施读出保护;
• Write Protection: 防止意外的对存储器的擦、写操作;
• PCROP: 针对指定扇区进行读写保护;
# {( r& _1 D* X" l! D3 L  ^
PCROP为Proprietarycode readout protection 的缩写,是一个专有代码读出保护的功能。与RDP 对整片Flash读保护不同的是,它只是针对Flash 的某些特定区域进行代码的读写保护。它可以被用来保护一些IP代码,方便进行二次开发。ST公司的多个STM32产品系列,比如STM32L1、STM32F4、STM32L4、STM32F7、STM32H7等都支持PCROP功能。
- X$ b2 q( K9 c5 Y  S: E5 i
2.2.jpg
$ u2 d3 l0 m* i" d+ |( }' L
**受PCROP保护的IP代码可以随意地被用户应用程序调用运行,同时又防止外界对IP代码的直接读写访问。一咋看这句话理解起来可能有点别扭,稍微琢磨下应可反应过来。相信不少软件工程师在开发中有时会用到第三方库代码,有些库代码是编译过的lib库,看不到source code,但你能使用调用它,有点类似。
9 q" U9 A/ e  W. o- b
**写保护和PRROP保护都可以针对指定的扇区配置,但是在同一存储器内要么针对扇区实施写保护,要么针对扇区进行PCROP保护。不可以一部分扇区配置写保护,另一部分扇区配置PCROP保护。
2.3.jpg
, W, V  W1 c  @6 p
**PCROP区的代码也可以调用PCROP区外的处于固定地址的函数。
2.4.jpg

: {; X. h# j! }' c9 T
**受PCROP保护的区域是无法使用D-Code 总线进行读访问的,所以在这片区域中只允许执行指令代码(通过I-Code 总线取指令),数据读取是被禁止的。因此,受保护的IP代码不能访问存储于同一块区域内的关联数据,比如文字池(literal pools)、分支表(branch tables)以及在执行过程中需要通过D-code总线进行读取的常量数据。

$ M$ J' \0 R1 ~- D0 n+ @8 ~
换言之,受PCROP 保护的代码只能是只执行的指令代码,而不包含任何数据。因此,我们在编译受PCROP保护的IP代码时,必须对其进行相应配置,以避免在PRROP区域生成文字池、常量数据等。
# X. j' l# o) S! L/ N
我们知道STM32的中断向量表里都是些常量数据,所以包含中断向量表的扇区不可进行PCROP。一般来讲向量表放在第一个扇区,所以该扇区不可进行PCROP。

# m2 ]3 _( W0 B! d; J
不同的编译工具链有其自己的配置方式去阻止编译器生成文字池和分支表。我们来看一下基于MDKKeil中和IAR 开发环境的设置操作。

( @5 i  Q6 Y) S* Z. P9 M
·Keil:使用Execute-only命令
1) 右击项目中的IP代码文件组(比如ST 官方应用笔记AN4701例子中的FIR-Filter),选择“Options for Group‘FIR-Filter’”
2.5.jpg

+ x& v5 l, s3 l# X
在对话框中选择“C/C++”页面,选中“Execute-onlycode”,点“OK”。
2.6.jpg

! @/ U. Z+ e% P. S
2) 另外,还需修改Keilscatter file(.sct文件),设置IP 代码为只可执行代码:
2.7.jpg

% e8 V) |/ L: o: M
· IAR:No data readsincode memory
9 s- L, L1 w4 i" |. {. W
1) 右击项目中的IP 代码文件组(比如例子中的FIR-Filter),选择“Options”
2) 另外,还需修改IAR ICF 文件(.icf 文件)。假如我们将IP 代码放在Sector 2,那么,我们需要在.icf 中加入以下内容,如下:
2.8.jpg
- k' {# q) V/ w+ w
最后以一个基于STM32F4的PCROP实际应用案例分享结尾。
某客户使用了STM32F446ZET6,开启PCROP 的功能,对他们的算法代码进行保护。在使用过程中,他发现位于PCROP 区的函数无法被用户程序调用。
0 X+ E$ U+ G$ f& r
经了解,客户使用Keil  MDK 进行项目的开发。检查客户的代码,看是否在项目中的IP代码的Options 中使能了“ExecuteonlyCode”选项,发现并没有将之使能。于是将此选项使能后,并编辑.sct 文件,再编译,运行代码。问题解决。

* D) _+ _( [) J! ?3 V! l1 Y
原因就在于客户未对IP 代码部分进行相应的配置处理,从而导致编译器未在PCROP区域避免生成文字池和分支表等数据。故而在调用PCROP内部的函数时触发了D-code 总线去访问PCROP 区域,导致错误发生。

+ v4 Q2 ~# [  S# G( r
对于PCROP 功能的详细使用说明,请参考应用笔记AN4701《Proprietary code read-out protectionon microcontrollers of theSTM32F4 series》及其相应的参考代码X-CUBE-PCROP.zip。
. L5 _3 i& Y- e, i
文章出处: 茶话MCU
5 x8 l+ w! I9 U( g3 j; E' ?
收藏 评论0 发布时间:2021-1-27 11:10

举报

0个回答

所属标签

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