徽州骆驼 · 1 天前

TC3xx 什么情况下会锁芯片

调 TC3xx 的板子时,最害怕的就是刷 UCB,稍不注意板子就上锁。

我以为就我这样,结果看好多朋友留言说深有同感,还有一位大神已经锁了 4 块板子。

既然这样,今天就把这些锁芯片的 Case 汇总,如有不全,欢迎大家补充。

1.UCB 的状态信息

刷 UCB 最常锁芯片,很有可能是没有搞懂 confirmation 位各状态的逻辑。

我们就先看看为什么。

在手册 6.5.4.3 中提到,如果满足以下条件,设备将不会启动:

因此我们需要首先搞清楚 UCB 的几种状态分别代表什么:

  • UNLOCKED :0x43211234,芯片出厂 UCB 默认值,此时该 UCB 允许读写访问;
  • CONFIRMED: 0x57B5327F,表示该 UCB 读写受限;
  • 特别值得一提的是:如果一个 UCB 本身含有密码,即使在 CONFIRMED 状态下,也可以通过特定序列用密码来解锁,进行 UCB 内容的修改;
  • ERRORED\ERASED :可能会导致芯片无法启动。

所以,在刷 UCB 的时候,特别是用 illd 提供的 API 去擦写 UCB,一是特别要注意 UCB Confimation,二是要小心不要随意掉电,防止出现 UCB 的多 bit ECC 错误。

2.SSW 中锁芯片的逻辑

另一种情况,就是在 BMHD 没配好,SSW 在校验时没有找到有效的 BMHD、且 Debug 口上锁,导致芯片连不上调试器了。

2.1 BMHD 中的 CRC

这个比较关键,BMHD 本就是告诉 SSW 用户想要怎么启动,所以它里面用了 CRC 来进一步确认数据完整性,如下:

有可能自己写的时候稀里糊涂就改了 BMI 和 STAD,其他没动,导致没有有效的 BMHD。

不过仅仅是这一步还不至于锁芯片,因为在 SSW 里有专门针对 All Boot Mode Headers Failed 的 case,如下:

当没有使能 HSM Boot 且 Boot Mode 没有上锁时, 即使没有 BMHD,SSW 仍会从 PFlash0 或者 CPU0_PSPR 进行启动。

但如果我们已经配置了 HSM BOOT,

或者配置了 Boot Mode Lock,

这也就意味着 SSW 要进入到:No Boot Mode configured 的处理。

2.2 调试口上锁的逻辑

结合之前我们在英飞凌 TC3xx 启动逻辑梳理(1)梳理的内容来看,在 SSW 阶段有一种情况:No Boot Mode configured,可能导致停在 SSW 里且锁定调试口。

所以我们需要先把与 Debug 相关的寄存器揪出来。

我们在芯片手册 DMU 章节,可以看到有如下寄存器与 Debug 接口上锁有关:

  • DMU_HF_PROCONDBG:位域为 OCDSDIS、DBGIFLCK

  • DMU_HF_PROCONPF\DF:位域为 RPRO

除此,如果 PF、DF 打开了读写保护,Debug 口连上也无济于事,这是否也算上锁?

  • DMU_SP_PROCONHSM:位域为 DBGIFLCK、HSMDBGDIS

然后我们再想想,HSM 作为信息安全岛(信任根),是否也应该有一票否决权来管理调试口,我们也能在 DMU 找到对应寄存器:

不妨我们把这几个控制位想象成门,只有所有门打开了,Debug 可能才会生效,如下图:

而这些门全部是通过 UCB 进行配置,所以我们还是得回到这几个 UCB 上。

UCB18\26:配置 OCDSDIS、DBGIFLCK

如果 DBGIFLCK 配置为 1、OCDSDIS 配置为 0,我们可以输入密码来让 SSW 解锁,试试 PW = 0;

如果 OCDSDIS 配置为 1,只能通过 flash 命令序列来进行解锁了。

UCB19\27:配置 HSMDBGDIS 和 DBGIFLCK

HSMDBGDIS 设置为 1 表示 HSM 不能 debug,DBGIFLCK 则表示 Tricore 能不能被 Debug;如果都设置为 1,那么只能通过 HSM 内部的寄存器来临时解锁。

那么如果没有 HSM,其实最容易被锁住的就是不小心配置了 UCB18\26,解法已经描述过了。

我们最后再来总结下不使能 HSM 时 Debug 上锁逻辑:

(1) SSW 检查相关寄存器是否有来自调试器的数据交互指令;如有,进入(2),如没有进入(4)
(2) 检查 UCB 是否配置了 Debug 锁定,如果配置了,进入(3),如没有进入(4);
(3) 接受密码 PW0-7,与 UCB 中的进行比对,比对成功,解锁 Debug;失败则锁定 Debug 口
(4) 检查是否有 Flash 读保护,如有,锁定 Debug 口;如没有,进入(5);
(5) 检查 UCB 是否配置了 Debug 锁定,如配置了,锁定 Debug 口,如没有,解锁 Debug 口;

2.3 HSM 使能但是 HSM Code 没准备好

在使能 HSM 的时候,如果不提前将 HSM Code 配置好,则很容易锁芯片;

因为在 HSM 侧的 BootRom 代码里,会去找有效的用户复位向量,这个地址是用户通过 UCB SP_PROCONHSMCBS 进行设置,如下:

如果没有找到,HSM bootrom 代码就不跑了;而 Host SSW 其实和 HSM 之间是有同步机制的,没等到信号,SSW 也就不跑了,就挂死了;

所以,如果要使用 HSM,第一步就是要把有效的 Host 用户代码和 HSM 代码(包括启动代码)写到目标位置,注意二者不要交叉;第二步设置到 HSM 用户启动代码的正确地址;最后才是使能 HSM。

END

作者:快乐的肌肉
来源:汽车MCU软件设计

推荐阅读:

更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
5783
内容数
513
汽车电子与软件行业的相关技术报道及解读。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息