0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用debug authentication功能实现调试接口的禁用保护

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2022-09-29 08:59 次阅读

说在前面:站长在恩智浦技术社区看到了这篇文章,特分享给大家,但有些话还是要说在前面,本文介绍的方法也许适合在LPC55系列不带S的产品中,但对于型号中具有S的产品,强烈建议使用debug authentication功能实现调试接口的禁用保护。
本文介绍的方法,不能防止通过其他手段(例如通信接口注入)借助代码从内部再次打开调试接口,只有debug authentication功能才能阻止这种情况。

在LPC早期发布的一些产品中,如LPC11xx、LPC17xx、LPC18xx、LPC40xx、LPC43xx、LPC8xx等,使用 CRP 实现代码保护,CRP有三种不同的安全级别:CRP1、CRP2和CRP3,各自的安全级别大体如图1所示。

de4b24c2-3f8e-11ed-9e49-dac502259ad0.png 图1

LPC55系列 (LPC55(S)0x, 1x,2x,6x) 不再使用CRP机制进行安全保护,而是用Secure boot,配置PFR(Protected Flash Region)等方式实现。其中,所有带S (LPC55S) 的芯片支持Secure boot,如LPC55S28,LPC55S06等等。而非S系列产品,如LPC5506,LPC5528等等,只能通过配置FPR相关字段来实现代码保护。

在CRP的三个安全等级中,CRP2最为常用。在使用CRP2时,SWD的访问将被阻止,所以SWD没有办法对Flash进行读写或者擦除操作,ISP也无法对Flash内容进行读取。此外,未经授权的用户并不能通过擦除部分Flash方式修改现有代码,一旦设置为CRP2, 只有Mass Erase Flash后才能继续正常使用,这样便有效地阻止了他人读取和修改代码。

遗憾的是LPC55系列(LPC55(S)0x, 1x,2x,6x) 没有和CRP2完全一样的功能机制,这也是很多初识LPC55的用户感到不适应的地方。不过,若想实现与CRP2相似的功能我们可以通过配置CMPA实现,即禁用ISP和关闭SWD调试口

1.禁用ISP

客户制造编程区域 (CMPA) 属于PFR的一部分,通过配置BOOT_CFG来选择ISP模式的启用情况。 表1为CMPA中9E40字地址开始的字段表,ISP控制域已用红色标识(如表1),表2为ISP域的模式选择,111为ISP禁用。若禁用ISP模式,设置BOOT_CFG=0b1110000。 de7756a0-3f8e-11ed-9e49-dac502259ad0.png 表1 df0343ae-3f8e-11ed-9e49-dac502259ad0.png 表2  

2. 关闭SWD调试接口

搭配使用 CC_SOCU_PIN 以及 CC_SOCU_DFLT 寄存器,用于定义模块的SWD调试访问权限。其中,CC_SOCU_PIN寄存器将调试域细分,不同位代表不同的调试域,对该位置1表示可操作。CC_SOCU_DFLT 寄存器设置可操作调试域的最终访问级别,置1表示禁用。也就是说,将CC_SOCU_PIN及CC_SOCU_DFLT寄存器相对应的位同时置1,便能禁用该模块。如图2。

df2a9f12-3f8e-11ed-9e49-dac502259ad0.png

图2

两寄存器低8位的每一位都代表某一子域,将两寄存器的低8位全部置1,即可关闭全部子域的SWD访问权限。

3.代码中实现关闭/开启ISP和SWD

以LPC5506为例,配置CMPA字段:

关闭ISP和SWD:

df7ea18e-3f8e-11ed-9e49-dac502259ad0.png

除上图被标红的三处外,其余皆保持CMPA默认值。

设置BOOT_CFG为0x70,禁用通过ISP 引脚进入ISP 模式功能。

其余两处0xFF分别为寄存器CC_SOCU_PIN和CC_SOCU_DFLT所在地址,即将调试访问的子域全部关闭。

开启ISP及SWD: dfbfc1f0-3f8e-11ed-9e49-dac502259ad0.png 除上图被标红的三处外,其余皆保持CMPA默认值。

设置BOOT_CFG为0x00,开启自动ISP模式。

其余两处0x00分别为寄存器CC_SOCU_PIN和CC_SOCU_DFLT所在地址,对调试访问的子域不做修改。

通过串口命令(1或0)开启或关闭SWD及ISP功能:

e11591a6-3f8e-11ed-9e49-dac502259ad0.png

注意

1. CMPA的设置在Reset或重启生效,一旦在CMPA里关闭了ISP和SWD, 在断电前不要擦除或下载其他程序!否则开发板的ISP和SWD口将永远锁死无法使用。
2. 从系统安全的角度考虑,客户必须了解NXP不承诺可以防范所有的攻击,客户需对产品的安全性在系统级别进行详细评估并采取相应安全措施。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    7639

    浏览量

    148481
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66764
  • CMPA
    +关注

    关注

    0

    文章

    1

    浏览量

    1263

原文标题:禁用ISP和SWD实现代码保护

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问TC1782的调试接口可以禁用吗?如果禁用了怎么开启?

    如题,TC1782的调试接口可以禁用吗?如果禁用了怎么开启?
    发表于 02-20 06:20

    如何使用OPT_FLM文件实现解除读保护功能

    MDK工程里debug选项选择烧录的FLM文件就可以下载调试代码,那OPT_FLM文件该怎么在工程里使用实现解除读保护功能呢?直接在
    发表于 03-28 07:11

    调试选项已禁用

    我创建了一个基于CG3加密狗项目的项目,然后我不能开始调试。有人说我需要禁用BooTooLable,我试图禁用它,然后我得到以下建筑错误错误:CDF.M005:CyDSFIT因错误而中止,请处理所有
    发表于 10-26 15:59

    keil debug调试导出数组数据的实现方法是什么?

    keil debug调试导出数组数据的实现方法是什么?
    发表于 11-22 06:51

    如何解决STM32禁用SWD调试接口后不能下载程序的问题?

    如何解决STM32禁用SWD调试接口后不能下载程序的问题?
    发表于 01-27 07:53

    LPC55如何禁用ISP和SWD以利用代码保护

    功能机制,这受到许多用户的质疑。但是,如果我们需要实现与 CRP2 相同的功能,我们可以配置 CMPA 以禁用 ISP 和 SWD 调试
    发表于 05-22 08:02

    保护设备的调试接口介绍

    。如果TrustZone安全技术实现,有时,存储在设备中的程序代码。没有适当的保护调试接口的适当位置,第三方可能会执行各种攻击,如: •复制固件并窃取有价值的软件评估,例如算法 •访
    发表于 08-02 08:21

    STM32F1系列DEBUG调试功能需要配置吗?

    STM32F1系列的DEBUG调试功能需要配置吗?
    的头像 发表于 03-01 13:57 3020次阅读

    浅谈STM32调试DEBUG相关知识

    说说STM32调试DEBUG相关知识
    的头像 发表于 03-06 15:23 3637次阅读

    配置VScode编译、调试STM32(二)Cortex-Debug插件

    配置VScode编译、调试STM32(二)Cortex-Debug插件
    发表于 12-01 12:21 16次下载
    配置VScode编译、<b class='flag-5'>调试</b>STM32(二)Cortex-<b class='flag-5'>Debug</b>插件

    调试STM32时能下载程序但调试模式(debug)无法进入main函数问题

    调试STM32时能下载程序但调试模式(debug)无法进入main函数问题 今天调试程序时,突然发现程序不正常,然后给板子插上JTAG调试
    发表于 12-01 13:36 17次下载
    <b class='flag-5'>调试</b>STM32时能下载程序但<b class='flag-5'>调试</b>模式(<b class='flag-5'>debug</b>)无法进入main函数问题

    STM8-Debug 调试器使用

    STM8-Debug 是一个 Vscode 上的 STM8 调试器,通过使用 GDB 连接 STLink 设备完成对 STM8 的调试1. vscode:launch.json 配置2. F5 启动
    发表于 12-27 18:30 10次下载
    STM8-<b class='flag-5'>Debug</b> <b class='flag-5'>调试</b>器使用

    STM32(Cortex-M)内核DEBUG调试接口知识

    学习STM32开发,肯定少不了debug调试这一步骤。那么,本文带你了解一下这个调试相关的知识。
    发表于 02-08 16:02 9次下载
    STM32(Cortex-M)内核<b class='flag-5'>DEBUG</b><b class='flag-5'>调试</b><b class='flag-5'>接口</b>知识

    这些Debug调试方法你知道多少?(上篇)

    在工作日里,如果你问验证工程师在干嘛,多半时间他/她会告诉你在Debug。换句话说,一般在验证周期内,工程师有超过一半的时间都消耗在了功能调试上,尽管这里面包含了验证工程师跟自己“作对”的时间,即验证环境或者测试用例本身存在bu
    的头像 发表于 01-21 17:18 1182次阅读
    这些<b class='flag-5'>Debug</b><b class='flag-5'>调试</b>方法你知道多少?(上篇)

    瑞芯微RK3588开发板评测Ⅱ——DEBUG&amp;amp;接口调试方法

    上期分享了RK3588开发板的固件烧录教程,引起了广大发烧友的关注,本期技术干货内容分享开发板的DEBUG接口功能调试方法,继续以英码嵌入式开发板EVM3588为例,该发板搭载
    的头像 发表于 11-02 15:46 2805次阅读
    瑞芯微RK3588开发板评测Ⅱ——<b class='flag-5'>DEBUG</b>&amp;amp;<b class='flag-5'>接口</b><b class='flag-5'>调试</b>方法