ZHCAE88A July 2024 – July 2025 TPS25751
冷啟動(斷電重啟或 GAID)后,PD 控制器進入 PTCH 模式,且僅修補準備就緒[81] 中斷會自動啟用??梢栽?PTCH 模式下更新中斷寄存器。此 PBM 實現方案使用修補準備就緒和 CMD1 完成中斷。之所以采用中斷而非輪詢寄存器,主要原因是為了將 PD 控制器 CPU 負載減少至僅與命令相關的活動。
在 PBM 流程開始時,使用修補準備就緒中斷指示 PD 控制器已準備就緒。CMD1 完成中斷用于提醒 EC:PBMs 和 PBMc 命令已完成。此示例中仍包含對 MODE 寄存器 0x03 的輪詢,以應對補丁已加載但 PD 控制器尚未切換至應用模式:APP 的情況。
PD 控制器 TRM 中介紹了 PTCH 和 APP 模式。PD 控制器 EVM 上的 EEPROM 被禁用(SDA 斷開),因此 PD 控制器切換至 PTCH 模式并保持該模式。在流程開始時不是必須檢查 PTCH 模式,但為了完整起見,仍包含了這一步。下面給出了命令示例,邏輯分析儀捕獲結果如讀取 PTCH 模式所示。
[0x21] + ACK(唯一地址/WR/A)
0x03 + ACK(寄存器編號/A)
[0x21] + ACK(唯一地址/R/A)
0x04(字節(jié)計數)
0x50 0x54 0x43 0x48(以 4 個 ASCII 字符表示的 PTCH)
CMD1 完成中斷用于提醒 EC:PBMs 命令已完成。分別通過寄存器 0x16 和 0x18 設置中斷屏蔽和清除中斷。請參閱 1 和 2
[0x21] + ACK(唯一地址/WR/A)
0x16 + ACK(寄存器編號/A)
0x0B(字節(jié)計數)
0x00 0x00 0x00 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x01 (MSB)
[0x21] + ACK(唯一地址/WR/A)
0x18 + ACK(寄存器編號/A)
0x0B(字節(jié)計數)
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF (MSB)
TRM 參考資料中定義了 PBMs 命令。對于本示例,表 4-1 中列出了 PBMs 的參數。
| 說明 | 值 | 注釋 |
|---|---|---|
| 捆綁包大小 | 0x00002C80 | 請參閱 節(jié) 5 |
| I2C 突發(fā)數據目標地址 | 0x30 | 0x30,參閱參考資料 1。 |
| Timeout | 0x31 | 3.1 秒;參閱參考資料 1 |
[0x21] + ACK(唯一地址/WR/A)
0x09 + ACK(寄存器編號/A)
0x06(字節(jié)計數)
0x80 0x2C 0x00 0x00 0x30 0x32(捆綁包大小、I2C 目標地址、超時值)
發(fā)送 PBMs 命令需要多次寫入 DATA 寄存器。例如,在將 PBMs 命令寫入寄存器 0x08 之前,確認 0x09 的值。寫入和讀取寄存器 0x09 之間存在 500us 延遲。
[0x21] + ACK(唯一地址/WR/A)
0x09 + ACK(寄存器編號/A)
[0x21] + ACK(唯一地址/R/A)
0x40(字節(jié)計數)
0x00 0x00 0x00 0x00 0x00 0x00(錯誤,重寫 DATA1)
0x80 0x2C 0x00 0x00 0x30 0x32(正確,繼續(xù)寫入 CMD1)
確認 DATA1 后,寫入 CMD1 = PBMs。I2Ct_IRQ 置為低電平有效,如 圖 4-6 所示。
[0x20] + ACK(唯一地址/WR/A)
0x08 + ACK(寄存器編號/A)
0x04(字節(jié)計數)
0x50 0x42 0x4D 0x73(以 4 個 ASCII 字符表示的 PBMs)
IRQ 信號表示 CMD1 完成事件何時發(fā)生,并可讀取 CMD1 和 DATA 寄存器以確認 PBMs 命令的結果。預期結果如第 8 和 9 步所示。
命令寄存器 0x08 表示在清除寄存器內容時命令已成功完成。為簡單起見,示例僅檢查第一位以確認內容不是“!CMD”,這表明 PBMs 命令已損壞或 DATA 寄存器加載了非法值(1)
[0x21] + ACK(唯一地址/WR/A)
0x08 + ACK(寄存器編號/A)
[0x21] + ACK(唯一地址/R/A)
0x04(字節(jié)計數)
0x00 0x00 0x00 0x00
當第一個字節(jié) PatchStartStatus 被清除時,數據寄存器 0x09 指示修補成功。PatchStartStatue 的非零值 0x04、0x05 和 0x06 值分別表示無效的捆綁包大小、目標地址或超時值。具體請參閱1。
[0x21] + ACK(唯一地址/WR/A)
0x09 + ACK(寄存器編號/A)
[0x21] + ACK(唯一地址/R/A)
0x40(字節(jié)計數)
0x00 0x00 0x00 0x00 0x30 0x31
在這一步,不使用 PMBUS 格式,二進制映像的內容直接寫入 PBMs 命令中指定的 I2C 突發(fā)數據目標地址,見參考表。突發(fā)格式受 MCU 架構影響。在本例中,突發(fā)大小限制為 4KB,因此會向 PD 發(fā)送三個連續(xù)突發(fā)數據(4,095 字節(jié)、4,095 字節(jié)和 3,202 字節(jié)),每次突發(fā)之間延遲 500us。末次突發(fā)結束后額外延遲 500μs 再發(fā)送 PBMc 命令。
[0x30] + ACK(唯一地址/WR/A)
lowRegion_i2c_array[0], lowRegion_i2c_array[1]..., lowRegion_i2c_array[4094]
[0x30] + ACK(唯一地址/WR/A)
lowRegion_i2c_array[4095], lowRegion_i2c_array[4096]..., lowRegion_i2c_array[8189]
[0x30] + ACK(唯一地址/WR/A)
lowRegion_i2c_array[8190], lowRegion_i2c_array[8191]..., lowRegion_i2c_array[11391]
CMD1 完成中斷用于提醒 EC:PBMc 命令已完成。分別通過寄存器 0x16 和 0x18 設置中斷屏蔽和清除中斷。第 3 步已設置了中斷屏蔽。重復中斷清除操作,如 圖 4-4 和 圖 4-7 所示。
PBMc 命令不包括輸入數據,因此僅發(fā)送該命令。
[0x21] + ACK(唯一地址/WR/A)
0x08 + ACK(寄存器編號/A)
[0x21] + ACK(唯一地址/R/A)
0x04(字節(jié)計數)
0x50 0x42 0x4D 0x63(以 4 個 ASCII 字符表示的 PBMc)
IRQ 信號表示 CMD1 完成事件何時發(fā)生,并可讀取 CMD1 寄存器以確認 PBMc 命令的結果。
與 PBMs CMD1 清除類似,讀取 CMD1 寄存器并確認原始命令已清除且不等于 !CMD。
20ms 延遲允許 PD 控制器加載并應用映像。一旦延遲結束,就會讀取 DATA1 和 MODE 寄存器以確認成功。
在這個實例中,從 DATA1 寄存器讀取了 40 個字節(jié)。
最后一步是驗證 PD 是否已切換為 APP 模式。進入 APP 模式后,PD 控制器現在可以在應用的自定義配置下運行。
[0x21] + ACK(唯一地址/WR/A)
0x03 + ACK(寄存器編號/A)
[0x21] + ACK(唯一地址/R/A)
0x04(字節(jié)計數)
0x41 0x50 0x50 0x20(以 4 個 ASCII 字符表示的‘APP’)