本帖最后由 小恩GG 于 2024-2-22 09:30 编辑
MCXA153读保护 Ⅰ、概述 MCXA153支持读出保护(ROP),以保护代码从设备内部闪存读取。这种读出保护是一种允许用户在系统中启用不同级别保护的机制。本文详细解释了四个ROP级别的配置,以及不同级别与相应生命周期之间的关系。 Ⅱ、四级读出保护(ROP) ROP由ROP_STATE位控制,它是一个32位的字段,存储在IFR0中,可按用户要求编程。 以下是四个ROP级别的介绍: 1.ROP_LEVEL0 l ROP_STATE = 0xFFFF_FFFF(erased FLASH value), l NoROP. Default for blank state. 2. ROP_LEVEL1 l ROP_STATE = 0x0000_0003 l Debug is disabled andunlocked, however it can be modified by customer, only limited debug mailboxcommands are available. 3 .ROP_LEVEL2 l ROP_STATE = 0x0000_0001 l Debug is disabled and locked,it cannot be modified by customer, only limited debug mailbox commands areavailable. 4. ROP_LEVEL3 l ROP_STATE = 0x0000_0000 l Debug is disabled and locked,it cannot be modified by customer, no debug mailbox commands are available
注意:任何其他行为= ROP3的行为(调试禁用/锁定,ISP禁用)。
当ROP级别为0时,通过修改IFR0中的ROP_STATE值,可以将ROP级别更改为1、2、3。当ROP级别为1或2时,可以通过ISP或DM-AP命令将ROP级别更改为0。ROP级别3是单程行程,所以要小心。以下是四个层次之间的关系示意图: Ⅲ、生命周期和ROP 当芯片从NXP交付给客户时,生命周期为“NXPProvisioned”,我们也可以称之为“OEM Open”、“OEMField return”、“NXP Field return”。因为此时,芯片是完全空白的,而ISP和调试功能是允许的。当然,这一点的ROP水平是0。在这个生命周期中,客户可以进行开发和调试。
在客户生产过程中,客户可以根据自己的需要,通过ROP对ISP进行一定的限制和调试。客户可以选择ROP等级1或ROP等级2。此时的生命周期是“OEM关闭”。在此生命周期中,当出现一些质量问题时,客户可以使用ISP或DM-AP命令擦除整个芯片,或使用DM-AP命令“setFA”将芯片生命周期转移到初始状态,并返回NXP工厂进行分析,而不存储任何IP资产。
在某些场景下,客户可能需要完全关闭ISP和调试功能。在这种情况下,客户可以将ROP级别设置为3,芯片的生命周期为“OEMNo Return”。请注意,此时,即使恩智浦也无法恢复芯片。所以一旦出现CQC问题,我们工厂无法进行进一步的分析。
此外,我们可以在任何生命周期中将芯片转移到“砖”状态。在“砖”生命周期中,芯片将不被引导,并将成为砖。生命周期与ROP的关系如下表所示:
Ⅳ. 不同ROP水平对SWD及ISP的影响 不同ROP级别支持的SWD和ISP命令不同。从ROP0到ROP3,支持的命令更少。不同ROP级别下,社署和服务提供商支持的命令如下图所示。
l ISPcommands supported in ROP0-ROP3:
l SWDDM-AP commands supported in ROP0-ROP3:
Ⅴ、使用SEC工具配置ROP 我们可以通过mcxpresso安全配置(SEC)工具配置ROP。mcxpresso安全配置工具是一个基于gui的应用程序,用于简化恩智浦MCU设备上可启动可执行文件的生成和配置。
硬件需求: FRDM-MCXA153 board、Type-CUSB cable
配置步骤:
步骤1.创建一个新工作区 打开软件后,点击文件-新建工作区,选择“MCXA14x/A15x”->MCXA15->单击“创建”。参考下图: 步骤2.与目标处理器的连接 进入ISP模式:长按SW3(ISP键)=>按下并释放SW1(RESET键)=>释放SW3 转到您的工作区,单击“目标”->“连接”,显示“与目标处理器的连接”窗口。这里,我们通过UART进行连接,并选择端口和波特率。参考下图: 我们可以点击“Testconnection”来检查连接是否成功。如果连接成功,结果将显示“OK”。我们还可以看到当前板的生命周期:OEMOpen。参考下图: 步骤3. 选择“生命周期设置” 点击工具栏“OEMOpen” 根据需求选择合适的ROP,本例中为ROP2。注意:谨慎使用ROP3。 参考如下图:
步骤4.构建镜像文件 完成上述操作后,我们需要将MCUXpressoIDE生成的.s19或.hex文件加载到Source可执行镜像中。
加载完成后,系统自动识别起始地址。如果起始地址不为0x00000000,则不能“buildimage”。然后点击“build image”。参考下图: 完成构建镜像后,将显示“SUCCECC: built image”。单击“关闭”。参考下图: 步骤5.写入镜像文件 我们可以看到,在“writeimage”中已经自动生成了所需的.bin文件,或者我们可以通过“import”导入我们编写的相应的.bin文件,镜像路径文件将自动加载。 点击“writeimage”弹出确认,点击“ok”自动运行脚本。文件写入成功后,系统提示SUCCESS:write image。参考下图:
步骤6.检查 当我们完成ROP2的配置后,我们可以通过“PFR配置”检查寄存器的状态。所使用的寄存器无法读出,显示unknown,如下图所示:
最后,按下单板上的RESET键,退出ISP模式。此时,电路板已进入ROP2,调试被禁用。进入其他ROP级别的方法是相同的。 那么我们如何回到其他ROP水平呢? ROP2状态调试关闭,连IDE都无法操作,只能使用ISP命令和SWD命令进行操作。SEC工具集成了SWD批量擦除命令,以返回ROP0。但是,我们也可以使用Blhost软件使用ISP命令,进入ISP模式,输入“Blhost-p comxx --flash-erase-all”返回到ROP 0。 接下来,我们将了解如何使用SWD批量擦除命令。 点击工具栏“Dbg”: 弹出“SelectDebug Probe”窗口。参考下图:
选择“Probe:”,点击“erase”。擦除成功后,显示如下提示:Flashmass erase succeeded!最终,我们成功地回到了ROP 0。 Ⅵ、总结 ROP功能保护了芯片的安全性,用户可以根据自己应用的要求设置不同级别的ROP。使用MCUXpresso安全配置简化了ROP配置过程。配置不同的rop需要修改CMPA中ROP_STAT和ROP_STAT_DP的状态位。SEC工具通过GUI界面帮助我们自动化这项工作。
|