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