TC3xx学习笔记-UCB BMHD使用详解(二)
文章目录
- 前言
- Confirmation的定义
- Dual UCB: Confirmation States
- Dual UCB: Errored State or ECC Error in the UCB Confirmation Codes
- ECC Error in the UCB Content
- Dual Password UCB ORIG and COPY Re-programming
- UCB_BMHDx_ORIG and UCB_BMHDx_COPY (x = 0-3)
- BMHD Protection Disable
- UCB_BMHD0_ORIG and UCB_BMHD0_COPY Access Protection
- UCB_BMHDx_ORIG and UCB_BMHDx_COPY (x = 1-3) Access Protection
- 总结
前言
之前介绍过BMHD的定义,链接如下:TC3xx学习笔记-UCB BMHD使用详解(一)
本文接着介绍BMHD中的ORIGN和COPY的作用及使用
Confirmation的定义
BMHD中最后一个字段为CONFIRMATION,如下所示
其定义如下:
目前配置的为0x43211234,也就是解锁状态
每个UCB都有自己的访问控制。从UNLOCKED到CONFIRMED状态的转换可以在不擦除UCB的情况下完成。为此,UNLOCKED状态下,可以直接写Confirmation,但是必须是0x57B5327。必须确保确认码之后的4个字节(例如在偏移量1F4H处)保持0000 0000H。只有这样, 写之后的ECC才不会报错
Dual UCB: Confirmation States
UCB内容被分割成独立的ORIGIN和COPY UCB(例如UCB_PFLASH_ORIGIN和UCB_PFLASH_COPY)。UCB确认状态是从ORIGIN和COPY UCB确认码派生出来的。
如果以下确认状态条件之一为真,则UCB确认为解锁:
ORIG UCB confirmation code is UNLOCKED.
ORIG UCB confirmation code is ERRORED and the COPY UCB confirmation code is UNLOCKED.
如果以下确认状态条件之一为真,则确认UCB Confirmation:
ORIG UCB confirmation code is CONFIRMED.
ORIG UCB confirmation code is ERRORED and the COPY UCB confirmation code is CONFIRMED.
如果以下确认状态条件之一为真,则UCB确认为错误:
ORIG UCB confirmation code is ERRORED and the COPY UCB confirmation code is ERRORED.
Confirmation状态可以通过HF_CONFIRM0寄存器中的PROIN位读取
COPY存在的意义就是当ORIG无效时可以有一个备份的BLOCK使用
Dual UCB: Errored State or ECC Error in the UCB Confirmation Codes
如果ORIGIN确认码是一个error值或包含一个不可纠正的ECC错误,则:
将读取COPY确认码以确定UCB确认状态和安装。
如果COPY确认码是一个error值或包含一个不可纠正的ECC错误,则:
Protection error flag is set (DMU_HF_ERRSR.PROER = 1B ).
当ORIGIN为UNLOCKED状态时,UCB的Confirmation state为Unlocked,不会出现ERRORED
ECC Error in the UCB Content
如果UCB内容包含不可纠正的ECC错误,则:
Protection error flag is set (DMU_HF_ERRSR.PROER = 1B ).
是DMU中的寄存器HF_ERRSR,手册要搜索HF_ERRSR才能搜到这个寄存器
Dual Password UCB ORIG and COPY Re-programming
存储在一个UCB对的ORIG 和COPY中的数据应该是相同的。如果需要更改数据,则应遵循以下顺序:
确认ORIG和COPY UCB confirmation codes are CONFIRMED:
-配置或保护安装将从ORIG UCB安装。
使用密码解锁保护,这将会同时禁用那个ORIG和COPY的保护
Erase COPY UCB - confirmation code在擦除时的状态会是error
对COPY UCB编程,然后将confirmation code设置为CONFIRMED
Erase ORIG UCB - confirmation code在擦除时的状态会是error
-配置或保护安装将来自COPY UCB。
对ORIG UCB编程,然后将confirmation code设置为CONFIRMED
-配置或保护安装将来自ORIG UCB。
通过命令序列或设备重启重新启用保护。
总是对ORIG进行评估。上述序列确保在重新编程之前在COPY中确认新数据。它避免了ORIG 确认状态为error而COPY确认状态为UNLOCKED的情况
也就是写UCB的时候,如果是带ORIG和COPY的UCB,优先写COPY的UCB,然后写ORIG的UCB
UCB_BMHDx_ORIG and UCB_BMHDx_COPY (x = 0-3)
四个Boot Mode Headers引导模式标头(BMHD)由SSW评估
ORIG的confirm state在DMU_HF_CONFIRM0.PROINBMHDxO
COPY的confirm state在DMU_HF_CONFIRM0.PROINBMHDxC
BMHD安装依赖于UCB_BMHDx_ORIGIN和UCB_BMHDx_COPY的确认状态。如果ORIGIN和COPY的确认码都是error,则SSW不会对UCB进行评估。
当ORIG的confirmation state为UNREAD时,SSW不会使用ORIG和COPY的UCB值验证
当ORIG的confirmation state为UNLOCKED时,SSW使用ORIG的UCB验证,且从ORIG中加载密码,虽然没有CONFIRMED,密码没啥用
当ORIG的confirmation state为CONFRIMED时,SSW使用ORIG的UCB验证,且从ORIG中加载密码
当ORIG的confirmation state为ERRORED时,需要看COPY的状态
当COPY状态为UNLOCKED时,SSW使用COPY的UCB验证,且从COPY中加载密码,虽然没有CONFIRMED,密码没啥用
当COPY状态为CONFRIMED时,SSW使用COPY的UCB验证,且从COPY中加载密码
当COPY的confirmation state为ERRORED时,SSW不会评估,且会返回错误,密码也不会加载
BMHD Protection Disable
如果安装了密码,并应用了与PW匹配的禁用保护之后:
DMU_HF_PROTECT.PRODISBMHD is set to 1B
如果没有安装密码,则不能禁用保护。
UCB_BMHD0_ORIG and UCB_BMHD0_COPY Access Protection
当满足以下条件之一时,UCB_BMHD0_ORIGIN和UCB_BMHD0_COPY为写保护状态:
UCB_BMHD0确认状态为CONFIRMED且使用从UCB_BMHD0加载的密码未激活禁用保护
UCB_BMHD0确认状态为ERRORED.
除了密码位置,UCB_BMHD0_ORGIN和UCB_BMHD0_COPY内容可以被每个芯片总线主机读取。只有当UCB_BMHD0的状态是UNLOCKED或禁用保护被激活时,每个片上总线主机才能读取密码
也就是说一旦CONFIRMED之后,密码是不可读的,除非使用密码进行Disable Protection操作
UCB_BMHDx_ORIG and UCB_BMHDx_COPY (x = 1-3) Access Protection
如果满足以下条件之一,则UCB_BMHDx_ORGIN和UCB_BMHDx_COPY (x = 1-3)为写保护状态:
UCB_BMHDx 确认状态为CONFIRMED且使用从UCB_BMHDx加载的密码未激活禁用保护
UCB_BMHDx确认状态为ERRORED.
UCB_BMHDx_ORGIN和UCB_BMHDx_COPY可以被每个片上总线主机读取。
总结
BMHD只有第0个有密码,且Confirmation一旦启用,密码就不可见了,需要解锁后才能读。实际使用过程中,最好把4个ORGIN和COPY都用上,这样可以最大程度减小启动不起来的风险。