Hello 大家好,“七点-嵌入式”公众号会定期分享关于汽车电子、MCU相关的内容,欢迎大家关注!
导读:Aurix系列芯片是由英飞凌公司生产的新一代高性能ECU,满足ASIL-D安全认证,并且已经在汽车控制器中广泛应用。本文将介绍TC3xx系列芯片中JTAG锁相关的内容。
TC3xx系列JTAG锁框架
TC3xx系列中,提供了4把锁(Gate)来实现对Debug口的保护。分别由OCDS模块、DMU模块和HSM模块提供。其中Gate1和Gate2由Host侧控制,Gate3和Gate4由HSM侧控制。
Gate1
Gate1由OCDS模块提供,它控制是否使能片上的Debug功能支持,对应UCB_DBG中的PROCONDBG.OCDSDIS比特位。将该比特位置1后使能Gate1。
UCB_DBG架构如下图:
HF_PROCONDBG格式如下:
Note:若单独置Gate1后,外部调试工具无法通过JTAG密钥来解锁Gate1。
Gate2
Gate2由DMU模块提供,它同时包含DFlash/PFlash的读保护和Debug锁。分别对应UCB_PFlash/UCB_DFlash中的PROCONxF.RPRO位和UCB_DBG中的PROCONDBG_DBGIFLCK位。
在Aurix TC3xx系列中,若仅配置了GATE2中的读保护位,一样会锁定JTAG口,须要使用软件单独解锁读保护后才可解锁。
HF_PROCONPF架构如下图:
Gate2中的PROCONDBG_DBGIFLCK提供了256bit的密钥(即UCB_DBG的密钥)用于解锁JTAG,在使用外部调试工具验证通过后,即可同步解锁Gate1和Gate2。
Gate3/4
Gate3和Gate4由HSM控制,需要参照对应的HSM用户手册来理解,本文不做介绍。
OCDSDIS |
DBGIFLCK |
RPRO |
解锁方式 |
1 |
0 |
0 |
软件解锁 |
x |
1 |
x |
外部调试工具/软件解锁 |
0 |
0 |
1 |
软件解锁 |
推荐上锁步骤
1.在UCB_DBG中,配置PROCONDBG.OCDSDIS和PROCONDBG.DBGIFLCK位为1。
2.配置UCB_DBG中的256bit密钥,注意大小端(若不配置,密钥为Flash中的默认值全0作为密钥)。
3.配置UCB_D/PFlash中的PROCONxF.RPRO位为1。
注意:UCB的配置需在Reset后生效(UCB的配置信息在芯片启动过程中由SSW读取后写入对应寄存器)
UCB_DBG_ORIGIN示例配置如下:
解锁步骤
使用外部调试工具解锁
以Infineon官方工具Memtool为例:
上锁:
解锁:
winIDEA同样支持解锁:
Hardwaire->CPUOptions->SOC->Use Password
配置密码后点击Reset按钮即可使用winIDEA解锁Jtag。
使用软件解锁
Aurix提供了UCB通用的解锁方式,其中也就包括UCB_DBG中的JTAG锁。并且在UserManual 6.6 Program Flash Interface章节中提供了对应接口,如下图所示。感兴趣的朋友可以关注本公众号,后续在UCB中的文章中会详细描述这部分内容。
总结一下前半部分提到的关键点
1. JTAG密钥(256bit)和UCB_DBG的密钥为同一个密钥,若不特殊配置,默认密钥为全0。
2. 必须开启Gate2后(DBGIFLCK),才能使用外部调试工具解锁。
3. 单独开启读保护,依然会锁上JTAG。
扩展-JTAG锁和DMU的关系,为什么需要开启读保护?
这里还引申出一个问题,读保护开启后,系统为什么还能够正常启动?
前文提到,UCB_DBG本身属于DFlash的一部分,在Aurix中,DFlash和PFlash皆属于DMU的一部分。芯片启动过程时,SSW需要从UCB中读出对应的配置信息写入寄存器中,因此,为了防止D/PFlash被意外读取,读保护功能能够为D/PFlash提供最后一层保障。
配置读保护后,若在UCB_BMHD中同样配置了系统启动方式为从内部Flash启动时,读保护功能本身不生效,但它本身仍能够在JTAG功能中起作用如关闭JTAG口,同时它也能打开全局的写保护功能。
为什么上锁和解锁都需要Reset才能生效?
因为UCB中的配置内容仅在芯片Power On Reset过程中由SSW(Startup Software)从UCB中读取后,写入相关寄存器中,其中也就包括了UCB_DBG。所以对UCB的相关更改必须在Reset后生效。使用调试器解锁时,调试协议也仅在上电过程中进行,上电过程结束后不再响应。