文章目錄
- 前言
- 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都用上,這樣可以最大程度減小啟動不起來的風險。