调试

在IAR Embedded Workbench for Arm中实现Infineon TRAVEO™ T2G安全调试

  • IAR
  • 16分钟阅读
<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >在IAR Embedded Workbench for Arm中实现Infineon TRAVEO™ T2G安全调试</span>

作者:
郑文灏,IAR中国现场应用工程师
陈光爱,英飞凌汽车电子事业部大中华区首席现场应用工程师

本文得到了英飞凌中国区的大力支持,特别感谢英飞凌汽车电子事业部大中华区首席现场应用工程师陈光爱在技术指导和专业意见方面给予的宝贵帮助。


随着汽车电子系统变得越来越智能,对功能安全(Safety)的要求越来越高,同时信息安全(Security)也越来越被关注,安全调试(Secure  Debug)机制已成为一个重要的信息安全特性。Infineon TRAVEO™ T2G系列MCU在满足高性能需求的同时,集成了完整的硬件安全特性,包括生命周期管理、安全启动(Secure Boot)、硬件加密引擎以及调试端口访问控制(安全调试)等。这些机制协同作用,可有效防止未经授权的访问与代码数据篡改。

本文主要介绍如何在IAR Embedded Workbench for Arm中实现Infineon TRAVEO™ T2G的安全调试。

Infineon TRAVEO™ T2G生命周期管理

设备生命周期是 TRAVEO™ T2G MCU 安全机制中的核心环节。其各个阶段按照严格的、不可逆的流程推进,并通过电子保险丝(eFuse)实现状态切换(将保险丝位从“1”永久熔断为“0”)。这种机制确保了生命周期一旦进入新的阶段便无法回退,从而能够根据客户需求,可靠地对设备内部的数据与代码实施不同层级的保护。

TRAVEO™ T2G MCU 生命周期共分NORMAL_PROVISIONED, SECURE, SECURE_WITH_DEBUG, RMA(Return Material Authorization), CORRUPTED 5个阶段,如下两图展示的是生命周期的切换顺序,以及对应的保护状态(NORMAL, SECURE, DEAD)。
20250826-1

20250826-2

调试端口访问控制机制

CYT2B7x 调试架构简介
  • CYT2B7x 的物理调试接口支持 JTAG接口和SWD接口,内接的Arm 调试端口(DAP)有三组访问端口(access port),分别为SYSTEM-AP(AP0),CM0-AP(AP1),CM4-AP(AP2)。其中,CM0-AP用于访问CM0+,CM4-AP用于访问CM4,SYSTEM-AP用于访问System ROM table,以及AHB总线上的组件资源。

20250826-3

  • 用户可以通过编写程序通过CPUSS_AP_CTL寄存器可单独设置3个AP端口的调试器访问权限。

20250826-4

调试端口控制策略

调试端口控制(Access restriction)共分为4种:Normal, Normal Dead, Secure, Secure Dead。下图是调试端口控制(Access restriction)与生命周期(Lifecycle stage)、保护状态(Protection state)的关系,以及Boot阶段从哪组配置字(SFlash或者eFuse)获取调试端口访问权限配置,并由Boot代码写入到CPUSS_AP_CTL寄存器中。

20250826-5

•    以下是MCU复位后的boot阶段,配置调试端口访问权限的流程。

20250826-6

  • 以下是eFuse中的Secure Access Restrictions 和 Secure Dead Access Restrictions 配置字。

20250826-7

20250826-8

  • 下表显示了 SFLASH Row 13 配置字。Normal Access Restrictions 和 Normal Dead Access Restrictions 分别存储在 SFLASH Row 13 配置字(0x17001A00~0x17001BFF)的第一个字(0x17001A00)和第二个字(0x17001A04)中。

20250826-9

•    AP_CTL_ M0/M4/SYS_ DISABLE 定义了 M0/M4/SYS 调试端口 (DAP) 的调试器访问权限。根据 AP_CTL_ M0/M4/SYS_ DISABLE 提供的配置字信息,Boot 代码向 CPUSS_AP_CTL.CM0/CM4/SYS_ENABLE 和 CPUSS_AP_CTL.CM0/CM4/SYS_ DISABLE 位写入对应的值,如下表所示。

20250826-10

安全调试示例

示例简介
  • 本示例来自于“AN228680 – Secure system configuration in TRAVEO T2G family”应用手册的“16.1.1 Debug access port authentication”
  • 软硬件环境:IAR Embedded Workbench for Arm 9.70.1 + KitProg3 CMSIS-DAP 硬件调试器 + Infineon CYT2B7x MCU
  • 生命周期配置为NORMAL_PROVISIONED
  • SFlash Row 13 配置字Normal Access Restrictions为AP_CTL_CM0 / CM4 / SYS -> 01 – Temporary Disable
  • CM0+ 程序来自于sdl_additional_code_examples_v8.3.0和T2G_Sample_Driver_Library_8.3.0,负责配置Sflash调试端口配置字,确保MCU上电后,CM0+和CM4调试端口关闭,仅打开SYS-AP端口,以便硬件调试器访问调试解锁认证数据区域。 CM0+程序还负责MCU侧的CM4调试端口解锁流程。
  • 通过IAR Embedded Workbench for Arm C-SPY调试脚本与CYT2B7x CM0+程序进行调试端口解锁流程交互。
调试端口加锁
  • 由CM0+软件工程将Normal Access Restrictions 配置字布局到SFlash Row 13区域,下载CM0+软件工程时,相应的配置字就会写入到SFlash区域。
  • Normal Access Restrictions 配置:
    o    AP_CTL_M0_DISABLE: 01 - Temporary Disable
    o    AP_CTL_M4_DISABLE: 01 - Temporary Disable
    o    AP_CTL_SYS_DISABLE: 01 - Temporary Disable
  • 128 位调试解锁密钥(key0 - key3)存储在Work Flash中(地址 = 0x14012000)。
调试端口解锁流程

下图为调试端口解锁流程图,其中:

CM0+侧:

  • Boot代码设置所有调试端口CM0/CM4/SYSTEM关闭(取决于 SFLASH)
  • CM0+程序打开SWD/JTAG引脚,并打开SYSTEM_DAP端口(下图步骤4-6)
  • CM0+程序等待IPC中断
  • 当中断到来时,通过SRAM_SCRATCH地址检查128 位密钥值,如果与Work Flash中(地址 = 0x14012000)中的预设密钥值匹配正确,则开启调试端口AP_CTL (下图步骤10-17)

IAR Embedded Workbench for Arm C-SPY调试平台侧:

  • 通过SYSTEM_DAP(DAP端口号0)(下图步骤7,8)将值写入指定地址
  • 通过IPC寄存器生成中断 (下图步骤9)
  • 等待 CM0+ 侧通过AP_CTL打开CM0+和CM4的调试端口 (下图步骤18)
20250826-11

IAR Embedded Workbench for Arm进行CYT2B7x MCU CM4工程安全调试流程

1.    准备工作

  • CM0+软件示例工程已经成功下载到CYT2B7x MCU中。
  • 任一个CM4软件示例工程。

2.    配置硬件调试器,本示例使用KitProg3 CMSIS-DAP 硬件调试器(如左下图配置),用户也可以使用I-jet硬件调试器(如右下图配置)

20250826-12

3.    在Debugger选项中,按下图格式输入密钥,本示例正确密钥为0x00112233445566778899AABBCCDDEEFF
* MCU侧,密钥已由CM0+工程预先下载保存在Work Flash中。

20250826-13

4.    启动调试后,在连接内核时,会调用C-SPY调试脚本的函数_ExecDeviceCoreConnect() -> TVII_CheckDAP()&TVII_IsAPEnabled(1) ->TVII_Unlock(),将密钥写入相应的寄存器。

20250826-14

5.    TVII_Unlock()函数在执行完密钥写入后,通过TVII_WaitForResponse()函数来检查认证结果状态字,来判断DAP调试端口是否认证成功(如果认证成功,CM0+侧程序会修改状态字0x55000000变为0xAA000000,状态字位于0x08002700地址)。密钥匹配成功后,调试器成功连接CM4调试端口。

20250826-15

6.    在Debugger选项中,如果输入不正确的密钥0x22112233445566778899AABBCCDDEEFF。本示例正确密钥为0x00112233445566778899AABBCCDDEEFF

20250826-16

7.    TVII_Unlock()函数在执行完密钥写入后,通过TVII_WaitForResponse()函数来检查认证结果状态字,来判断DAP调试端口是否认证成功。由于输入密钥错误,调试器连接CM4内核失败,退出调试界面。

20250826-17

总结

本文以Infineon TRAVEO™ T2G CYT2B7x为例介绍了如何在IAR Embedded Workbench for Arm中实现TRAVEO™ T2G的安全调试。TRAVEO™ T2G的调试端口解锁流程由CM0+控制,因此用户也可以根据项目需求重新设计CM0+程序代码来进行调试端口解锁流程(比如:基于加密认证算法的身份认证机制来解锁),IAR Embedded Workbench for Arm C-SPY调试脚本也完全可以适配实现用户的自定义调试端口解锁流程。其他TRAVEO™ T2G型号的 MCU 也有相似的安全调试机制, 如有任何问题或需求,欢迎联系IAR中国获取更多详细信息。

参考文献:
1.
TRAVEO™ T2G Automotive MCU body controller entry architecture technical reference manual
2. Infineon an228680 secure system configuration in TRAVEO™ T2G family
3. Infineon TRAVEO™ T2G boot training
4. Infineon TRAVEO™ T2G device security training
5. Infineon TRAVEO™ T2G program and debug interface training
6. Configure Normal (Dead) Access Restriction on TRAVEO™ T2G MCU
7. IAR Embedded Workbench for Arm C-SPY® Debugging Guide