本帖最后由 WAMCNCN 于 2017-5-5 18:01 编辑
1.读保护(RDP)
如图,读保护的三个级别:
.写RDP选项字节0xAA为0级,无保护;
.写0xCC为2级,芯片保护;
.写其他值,1级保护。
从级别0到级别1是可逆的,级别2不可逆,是永久性的。
访问状态与保护级和执行模式的对比。
从表中可以看出在保护级别为1、2时,不能从调试或启动时SRAM或系统内存 bootloader更新Flash代码。
但是如何升级软件代码呢?可以通过用户嵌入在FLASH中的IAP代码来更新软件。IAP使用通讯协议重新编程例如UART。
现在明白了为何不能直接设置为读保护级别2了吧,如果读保护设为2级之前,写入的代码中不包括IAP代码,那么片子就报废了。
2.写保护
写保护是用来保护指定扇区的内容代码更新或删除。
3.PCROP
是FLASH存储中IP-代码的读和写的保护,可以应用到(0到7)扇区,保护专有代码不能通过终端用户代码,调试器工具或RAM木马代码可能的修改或读出。
通过ITCM或AXI总线对 PCROP保护的扇区读取,触发:
.总线错误
.RDERR和RDERRIE标志位的设置
被保护的IP-代码可以被终端用户应用调用,同时也防止对IP-代码自身的直接访问。此外PCROP并不阻止被保护的代码被执行。
4.如何启用PCROP
PCROP保护被分段激活,所以每个扇区可以独自成为PCROP保护的扇区,同时剩余的扇区也能设置被保护(当RDP设置成0或1时)。
PCROP通过FLASH_OPTCR2寄存器了的选项位PCROP激活:
•PCROP= 0: 扇区(i = 0 . . 7) PCROP保护未激活
•PCROP= 1: 扇区 i(i = 0 . . 7) PCROP保护激活
为了增强PCROP-ed 扇区的安全级别,在执行PCROP-ed扇区中的代码时所有的调试事件被屏蔽。
当RDP保护从1降到0级时,另外一个选项位(PCROP_RDP = PCROP1ER [15] )允许选择 PCROP扇区是否擦除。
一位用来激活PCROP,其它位用来激活写保护nWRPi 是独立的,这样,可能同时有一个写保护扇区和另一个是PCROP扇区。
两个要点:
.PCROP保护的扇区阻止数据总线的读取,所以此扇区只能储存仅可执行的IP-代码,不能存储数据。
.中断向量表包含每个中断处理程序的入口地址,由CPU通过D-code总线读取,通常放在第一扇区第一地址0x08000000,所以第一扇区不能激活PCROP。
使用工具
5.如何禁止PCROP
依赖于RDP的级别:
.RDP级别是1或0时,PCROP可被禁止
.RDP级别是2时,由于选项字节固定而不能修改,因此PCROP保护的扇区不能修改或擦除,保护是永久性的。
在保护的扇区禁止PCROP的唯一方式:
.清除相应扇区的PCROPi位
.RDP降级从1到0
.PCROP_RDP位被设置,主FLSAH存储的块擦除被执行依赖于PCROPi的值,PCROP保持启用或禁止相应的扇区
PCROP_RDP位被清除,除了被PCROP保护的页外,全块擦除。
PCROPi
|