一、AURIX™ 调试接口保护- 内部开关概览
上图前边的两个控制门是由TriCore来控制,分别通过OCDS或者DMU模块,而后边的两个则是由HSM核控制,通过这两个门,HSM可以锁定对Host CPU的调试访问权限,也可以关闭HSM自身的调试支持。
UCB(User Configuration Block)是 DFlash 的一部分,用于存储设备启动配置和保护信息。总共有48个UCB块,每个UCB大小为512字节。某些 UCB 由一对 ORIG 和 COPY 组成,擦除一个时,另一个必须保持有效。

可以通过上图看到UCB18和UCB19分别对应的由TriCore核和HSM核(对应的UCB26和UCB27为UCB_DBG_COPY和UCB_HSM_COPY,图太长就不截了)。
调试保护
在设备启动之初总会评估UCB的内容,寄存器PROCONxxx(PROCONDBG对应UCB18,PROCONHSM对应UCB19)的值每次启动都会根据UCB的值完成配置。下图为UCB18的内容Layout。

其中PW0~PW7为保存 32 字节的密码。
- CONFIRMATION为固定 4 字节,确认UCB有效性。
- 0x57B5327F:UCB状态为CONFIRMED,UCB的读写会被禁止。
- 0x43211234:UCB状态为UNLOCKED,UCB可读写。
- 0x00000000:UCB状态为ERASED,芯片将不会再启动。
- 其余值:UCB状态为ERRORED,芯片将不会再启动。
2. PROCONDBG中的Bit 0(OCDSDIS)和Bit 1(DBGIFLCK)与安全调试口有关。
- 当
OCDSDIS = 1且DBGIFLCK = 1时,调试接口会被锁定。
这时可以通过调试工具或 MEMTOOL,使用 32 字节密码来解锁调试接口。
如图:

- 但是如果
OCDSDIS = 1且DBGIFLCK = 0,即使输入正确密码,也无法解锁调试接口。
此时需要在 TC3XX 应用程序中提供密码,并执行 “disable protection” 命令序列来解锁调试接口。
注意:如果没有使用密码,默认密码为全零。
- 当
OCDSDIS = 0且DBGIFLCK = 0,则无此加密调试口功能,但是若UCB_DBG处于确认状态,则那么调试接口将不会被锁定,但UCB的读写访问将受到限制。用户必须在应用程序代码中执行禁用保护命令序列,同时使用正确的调试接口密码,以暂时禁用UCB访问保护。
3. PFLASH读写保护
PFLASH读写保护(DFlash保护与PFlash大致相同,这里就不赘述了)。
在PROCONPF寄存器里的RPRO会在启动保护之后置位。由于PFLASH读保护会同时锁定调试接口,所以必须确保DBGIFLCK=1,才能通过调试器解锁调试接口。


UCB在UNLOCK状态时,UCB可以重复擦写。
当CONFIRMED状态时(相当于写保护),只有输入正确的密码,用" Disable Protection”命令序列对 UCB 临时解密,才能再操作UCB。
而此时在Memtool界面下,一旦UCB处在CONFIRMED状态,则就不能再改变UCB的状态了。在量产的程序中,必须改为CONFIRMED状态,因为在UNLOCK状态下,UCB的Password部分是可以读出来的(在调试器连接不上情况下,也还是可以通过 ASCBootloader 读出来)。
在使能了调试保护后,当UCB_DBG的CONFIRMATION改为CONFIRMED后,只要知道调试密码,依然还是可以调试,但是HSM在使能了调试保护后,当UCB_HSM的CONFIRMATION改为 CONFIRMED后,那么HSM的代码就永远不能调试了,除非在HSM的代码中加入一段后门代码,例如检测到一个信号或者命令后,把UCB中的调试保护解除。UCB_HSM被CONFIRMED 后,只有 HSM代码才能操作这块UCB。
调试口加密以及调试方法
设置调试加密的有三种方法:
- 分别是在Memtool界面上设置,
- 在程序中用数据定义UCB区域内容(这样在程序刷写的过程中就会将对应UCB区域内容写入),
- 在代码中直接用Flash命令操作UCB。
如果在调试加密的情况下,正常连接仿真器会连不上。

连接调试器时,如果出现报错,请点击 MEMTOOL 中的 CHANGE 按钮,然后选择 CONNECT/RESET 标签页,点击 UNLOCK INTERFACE,输入 8 个 WORD(每个 WORD 4字节)作为密码,最后点击 OK 即可解锁。如图:

4.PFLASH 读保护
- 使能读保护
PFLASH 可以通过选择 “PFLASH READ PROTECTION” 来启用读保护。通常一个扇区(SECTOR)大小为 16KB,可以选择对某个扇区进行读保护。启用后,调试器将无法读取 PFLASH 的内容。在MEMTOOL 的 UCB_PFLASH 中,需要勾选 “PFLASH READ PROTECTION” (即设置RPRO=1),并指定 8 个 WORD 的密码。由于PFLASH读保护会同时锁定调试接口,所以必须确保DBGIFLCK=1,才能通过调试器解锁调试接口。如图:

如果 DBGIFLCK=0,即使密码正确,SSW 也无法解锁调试口。
在这种情况下(RPRO=1 且 DBGIFLCK=0),只能通过 TC3XX 应用代码执行 “DISABLE PROTECTION” 命令序列来解锁,
具体参考手册 6.5.2.2.3 节。
2.临时禁止读保护
在 MEMTOOL 中,点击 UCB,修改 UCB_PFLASH,点击 “Disable Lock”,输入密码后点击确认即可。
2.1 以下是 BOOTLOADER 代码示例,用于临时解锁读保护:

可以通过查看 DMU 寄存器的位来判断操作是否成功, DMU_HF_PROTECT.PRODISP = 1;
2.2 以下是应用代码示例,用于恢复读保护:

可以通过查看DMU寄存器的位来判断操作是否成功, DMU_HF_PROTECT.PRODISP = 0;
5. UCB的处理
用户可以参考用户手册 UM 中第 6.8 章和 6.5.4.3 节了解 UCB 相关内容。
设备无法启动时,通常有以下几种原因:
-
对于单 UCB,有两个 CONFIRMATION CODE,如果 ORIG 和 COPY 的 CONFIRMATION CODE 都处于 ERRORED 状态(错误),则UCB无效。
-
对于双 UCB,如果 ORIG 和 COPY 的 CONFIRMATION CODE 都错误或被擦除,设备无法启动。
-
UCB 存在不可校正的 ECC 错误。
如果出现上述任一问题,SSW 将无法启动设备,设备会永久锁死。
双密码 UCB(ORIG 和 COPY)编程流程
- 确保 ORIG 和 COPY 的 UCB 的 CONFIRMATION CODE 均为 CONFIRMED 状态。
- 使用密码解除写保护。
- 擦除 COPY UCB。
- 编程 COPY UCB,并设置 CONFIRMATION CODE 为CONFIRMED。
- 擦除 ORIG UCB(此时保护来自 COPY 副本)。
- 编程 ORIG UCB,并设置 CONFIRMATION CODE 为 CONFIRMED(保护来自 ORIG 副本)。
- 重新使能写保护。
关于UCB_OTPy
-
每个 UCB 大小为 512 字节,包含 6 组 OTP(一次性可编程)保护。
-
每组 OTP 占 32 字节,其中 6 个 WORD 有效。
-
每个 WORD 包含 32 个 BIT,每个 BIT 对应一个 16KB 的扇区保护。
-
每个 UCB 还包含 6 组 WOP(写一次保护),
-
每组 WOP 占 32 字节,6 个 WORD 有效,结构同 OTP。
-
一共有 8 个 UCB,每个 UCB 都包含 ORIG 和 COPY 两个副本。

6. MEMTOOL 错误界面说明
解锁调试接口(对应错误提示界面)

密码错误时(对应错误提示界面)

关于调试接口解锁条件
• 当 DBGIFLCK = 1 时:
若 OCDSDIS=1 或 RPRO=1,可通过 SSW 输入正确密码解锁调试接口。
• 特殊情况处理:
3.1 若 RPRO=1 且 DBGIFLCK=0:
◦ 即使密码正确,调试接口仍无法解锁(参考《 AURIX TC3XX 用户手册 》PART1 第 6.5.2.2.3 节)。
◦ 需通过应用软件修改 CBS 寄存器的 OEC.IF_LCK 位以解除保护。
3.2 若 OCDSDIS=1 且 DBGIFLCK=0:
- ◦ 即使密码正确也会报错,调试接口无法访问。
- ◦ 需通过应用软件执行 "Disable Protection" 命令序列解锁。

DAP/JTAG 未连接时
(对应错误提示界面)



253

被折叠的 条评论
为什么被折叠?



