文章目录
- 前言
- 一、UCB的定义及其功能简介
- 二、UCB_BMHDx_ORIG and UCB_BMHDx_COPY (x = 0 - 3)
- 2.1 BMHD(Boot Mode Head)
- 三、UCB_SSW
- 四、UCB_PFLASH_ORIG and UCB_PFLASH_COPY
- 4.1 Password
- 4.2 UCB Confirmation
前言
缩写 | 全称 |
---|---|
UCB | User Configuration Block |
BMHD | Boot Mode Headers |
通过UDE界面找到UCBs
如果要解除保护,则可以点击”Erase configuration ” (仅支持在 Unlocked 状态下擦除)
一、UCB的定义及其功能简介
UCB是User Configuration Block的简称,用于描述用户配置信息,非数据存储区域。
TC3xx芯片提供了一块23 KB的Flash存储空间用作UCB配置。每个UCB大小为512 Byte,总共有46个UCB配置项,UCB的起始地址为0xAF400000,结束地址为0xAF405FFF。
下面的概览表显示了所有定义的ucb的列表:
TC3xx芯片在启动时会运行固化在芯片内部的名为SSW的软件,SSW软件在运行时可以读取用户的配置信息来进行特定化的启动操作,比如SSW运行完后跳转到客户应用程序的起始地址,RAM是否需要进行初始化及冷启动还是热启动后初始化等,是否需要进行LBIST操作等。而这些可以让用户自定义的配置就是UCB的配置内容。
也就是说,用户可以通过配置UCB来影响SSW程序的执行(比如跳转的APP的起始地址),及完成芯片的特殊配置(比如使能HSM等)。
二、UCB_BMHDx_ORIG and UCB_BMHDx_COPY (x = 0 - 3)
四个UCB_BMHDx_ORIG(UCB00, UCB01, UCB02, UCB03)和UCB_BMHDx_COPY(UCB08, UCB09, UCB10, UCB11)被客户用来配置启动模式头(BMHD)。这些由SSW进行评估(SSW程序在启动时会读取UCB_BMHDx_ORIN和UCB_BMHDx_COPY配置信息进行评估,然后执行对应的操作)。
在下文中,仅展示了UCB00和UCB01的详细偏移量表。UCB00作为带有密码的UCB_BMHD的示例(也是UCB08),而UCB01作为不带密码的UCB_BMHD的示例(也是UCB02, UCB03, UCB09, UCB10, UCB11)进行展示。其他UCB的内容相同,只是基于不同的偏移地址。
2.1 BMHD(Boot Mode Head)
Boot Mode Header 是固化在代码中的启动信息。包含了启动地址, 具体的信息有以下部分组成
unsigned short bmi; /**< \brief 0x000: Boot Mode Index (BMI)*/
unsigned short bmhdid; /**< \brief 0x002: Boot Mode Header ID (CODE) = B359H*/
unsigned int stad; /**< \brief 0x004: User Code start address*/
unsigned int crc; /**< \brief 0x008: Check Result for the BMI Header (offset 000H - 007H)*/
unsigned int crcInv; /**< \brief 0x00C: Inverted Check Result for the BMI Header (offset 000H - 007H)*/
unsigned int reserved0[60]; /**< \brief 0x010: Reserved area (60 words) till the offset 0x100*/
unsigned int pw[8]; /**< \brief 0x100: Password protection (8 words) till the offset 0x120 */
unsigned int reserved1[52]; /**< \brief 0x120: Reserved area (52 words) till the offset 0x1F0*/
unsigned int confirmation; /**< \brief 0x1F0: 32-bit CODE, (always same)*/
三、UCB_SSW
UCB_SSW 包含由英飞凌提供的数据,并主要用于SSW配置设备。
单个条目除了LBIST配置和预期签名条目SCU_LBISTCTRL*之外,不会被发布。
这些也可以在执行LBIST时由应用程序软件使用。
四、UCB_PFLASH_ORIG and UCB_PFLASH_COPY
UCB_PFLASH(原始和副本)包含了用户定义的PFlash保护。它通过密码PW0至PW7进行保护。保护配置被转移到寄存器DMU_HP_PROCONPps(其中“p”遍历已实现的PFlash存储库,“s”遍历32个扇区的组)和DMU_HF_PROCONPF(参见DMU章节)。
4.1 Password
PW0-PW7: 给UCB_BMHD0_ORIN和UCB_BMHD0_COPY安装(Install)密码(Password),如果我们在运行时想要修改UCB_BMHD0_ORIN和UCB_BMHD0_COPY的内容,需要通过Disable Protection指令传入Password进行match后才能修改。
4.2 UCB Confirmation
往Confirmation位域中写入特定的值就能让Confirmation处于:UNLOCKED, CONFIRMATION,ERASED,ERRORED四种状态之一。
在 UNLOCK 状态时,UCB可以重复擦写,当 CONFIRMED 状态时(相当于写保护),只有输入正确的密码,用”Disable Protection”命令对 UCB 临时解密,才能再操作 UCB。
在量产的程序中,必须改为 CONFIRMED 状态,因为在 UNLOCK 状态下,UCB 的Password 部分是可以读出来的(在调试器连接不上情况下,也还是可以通过 ASCBootloader 读出来)。
在使能了调试保护后,当 UCB_DBG 的 CONFIRMATION 改为 CONFIRMED 后,只要知道调试密码,依然还是可以调试。
在使能了调试保护后,当 UCB_HSM 的 CONFIRMATION 改为 CONFIRMED 后,那么HSM 的代码就永远不能调试了,除非在 HSM 的代码中加入一段后门代码,例如检测到一个信号或者命令后,把 UCB 中的调试保护解除。UCB_HSM 被 CONFIRMED 后,只有 HSM代码才能操作这块 UCB。
参考文档:Infineon-AURIX_TC3xx_Part1-UserManual-v02_00-EN