发新帖本帖赏金 8.88元(功能说明)我要提问
返回列表
打印
[STM32F7]

NUCLEO-F722ZE+评测五 :PCROP

[复制链接]
1079|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WAMCNCN|  楼主 | 2017-3-22 12:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 WAMCNCN 于 2017-3-22 16:03 编辑

      
      软件供应商正在开发复杂的中间件解决方案(知识产权代码,或IP代码)。保护IP代码对微控制器而言是个很重要的问题。
为了应对这一重要要求,STM32F72xxx和STM32F73xxx微控制器特点:
•读保护(RDP):防止读取操作
•写保护:防止不希望的写或擦除操作
•专有代码读出保护(PCROP):防止读和写操作。
1.读保护是一个全局闪存读保护允许嵌入式软件代码被保护防止复制,逆向工程,dump使用调试工具或其他侵入性攻击的手段。这种保护必须在二进制代码装载到嵌入式闪存后由用户设置。
三个RDP等级(0、1、2)
.读保护0级0级是默认,闪存完全开放。在这种模式下,没有保护,这种模式用来开发和调试。
.读保护1级
读保护级别1被激活时,不能访问(读、擦除和程序)闪存或备份SRAM存储器可以通过调试特性,比如执行串行线或从JTAG实际上当从SRAM或系统内存bootloader 引导时。然而当从闪存引导时,访问闪存和备份存储器允许用户代码。
失能RDP一级保护通过重编程RDP选项字节到0级导致块擦除。
.读保护2级RDP二级被激活时,级别1所有提供的保护有效,且芯片完全保护。RDP选项字节和所有其他选项字节被冻结,不能再被修改。JTAG,SWV(单线查看器)、ETM,边界扫描失能。
当从闪存引导时,内存内容能访问用户代码。然而,从SRAM或引导系统内存引导装载程序不再是可能的。
RDP 二级是不可逆(JTAG保险丝),所以是不可能回到保护级别1或0。
2.写保护写保护是用来保护指定sectors 的内容防止代码更新或删除。这种保护可以被sector应用。
任何写请求生成一个写保护错误。当擦除/编程闪存保护部分的地址时,硬件设置WRPERR标志。
例如至少有一个sector在哪里写保护 的闪存的块擦除,,是不可能的和WRPERR标志被设置。为了激活每个闪存sectori的写保护,一个选项bit 位nWRPi被使用。当为sector i (选项 bit位 nWRPi = 0)设置写保护时,这个sector不能被删除或编程。
启用或禁用写保护可以管理通过嵌入式用户代码或使用STM32 ST-Link实用工具和调试接口。
3.专有代码读保护
PCROP是闪存IP代码的读和写保护。PCROP 被sector(0 – 7)应用,保护专有代码通过由终端用户代码,调试器工具或RAM木马代码可能的修改或读出。
任何通过ITCM或执行AXI总线读访问(获取)PCROP-ed sectors,触发:
•总线上给定的总线错误
•RDERR标志被设置在FLASH_SR状态寄存器。如果FLASH_CR寄存器中读错误中断使能位(RDERRIE)被设置也产生一个中断。
任何PCROP-ed sector 编程/擦除操作,触发WRPERR标志错误。受保护的ip代码可以很容易地由最终用户应用程序调用,还可以防止直接访问ip代码本身。然后PCROP并不阻止受保护的代码被执行。
警告:当读访问PCROP-ed sectors时生成一个总线错误,读错误中断可以被硬故障错误中断或总线故障错误中断屏蔽。使用读取错误中断,必须启用总线故障错误中断的优先级低于读取错误中断的优先级。

4.如何启用PCROP保护
激活PCROP保护sector ,每个sector 可以独立成为一个PCROP-ed sector和额外的保护sector是可能的(当RDP设置为0或1级水平)。
PCROP保护是通过FLASH_OPTCR2寄存器中的选项位PCROP 激活:
•PCROP= 0:PCROP保护无效sector i(i = 0 . . 7)
•PCROP= 1:PCROP保护有效sector i(i = 0 . . 7)
为了增强PCROP-ed sector安全级别,在执行PCROP-ed sector中的代码时所有的调试事件被屏蔽。
额外的选项位(PCROP_RDP = PCROP1ER[15])允许选择PCROP区域是否擦除当RDP保护被改变改变从1级到0级。
位用来激活PCROP保护(PCROPi)和其他一些用于激活写保护nWRPi是独立的,因此有可能在同一时间,一个写保护sector,另一个PCROP-ed sector。
表2显示了什么类型的保护被设置在一个sector i ,根据WRPi PCROPi位值:



新建流水灯工程。



设置选项产生仅可执行的IP代码


修改IAR icf文件,IP 代码放在 Sector 2,icf中添加代码

    define symbol __ICFEDIT_region_PCROP_start__ = 0x08008000;
    define symbol __ICFEDIT_region_PCROP_end__ = 0x0800BFFF;
    define region PCROP_region = mem:[from __ICFEDIT_region_PCROP_start__ to
    __ICFEDIT_region_PCROP_end__];
    place in PCROP_region { ro object led.o};

编译下载到开发板,
在用户代码中调用IP代码Blink();

打开STM32 ST-LINK Utility工具,未保护前IP代码区


添加代码读保护

应用后,在代码保护区的访问不可能

保护后的器件使用IAR再次调试,提示错误

解除PCROP,先应用到1级保护,再降为0级,导致块擦除。整个FLSHA被擦除了
重新Debug工程

工程里的led.o和编译的库很相似。







打赏榜单

21ic小管家 打赏了 8.88 元 2017-04-10
理由:NUCLEO-F722ZE评测领赏

沙发
WAMCNCN|  楼主 | 2017-3-22 12:55 | 只看该作者
本帖最后由 WAMCNCN 于 2017-3-23 23:21 编辑

补充一点,上面的工程分2步,第二步led.o拷贝到工程下并把led源码换成目标文件

使用特权

评论回复
发新帖 本帖赏金 8.88元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

1882

帖子

1

粉丝