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(字节计数)
0x50 0x54 0x43 0x48(以 4 个 ASCII 字符表示的 PTCH)
CMD1 完成中断用于提醒 EC:PBMs 命令已完成。分别通过寄存器 0x16 和 0x18 设置中断屏蔽和清除中断。请参阅 1 和 2
[0x21] + ACK(唯一地址/WR/A)
0x16 + ACK(寄存器编号/A)
0x0B(字节计数)
0x00 0x00 0x00 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x01 (MSB)
[0x21] + ACK(唯一地址/WR/A)
0x18 + ACK(寄存器编号/A)
0x0B(字节计数)
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF (MSB)
TRM 参考资料中定义了 PBMs 命令。对于本示例,表 4-1 中列出了 PBMs 的参数。
| 说明 | 值 | 注释 |
|---|---|---|
| 捆绑包大小 | 0x00002C80 | 请参阅 节 5 |
| I2C 突发数据目标地址 | 0x30 | 0x30,参阅参考资料 1。 |
| Timeout | 0x31 | 3.1 秒;参阅参考资料 1 |
[0x21] + ACK(唯一地址/WR/A)
0x09 + ACK(寄存器编号/A)
0x06(字节计数)
0x80 0x2C 0x00 0x00 0x30 0x32(捆绑包大小、I2C 目标地址、超时值)
发送 PBMs 命令需要多次写入 DATA 寄存器。例如,在将 PBMs 命令写入寄存器 0x08 之前,确认 0x09 的值。写入和读取寄存器 0x09 之间存在 500us 延迟。
[0x21] + ACK(唯一地址/WR/A)
0x09 + ACK(寄存器编号/A)
[0x21] + ACK(唯一地址/R/A)
0x40(字节计数)
0x00 0x00 0x00 0x00 0x00 0x00(错误,重写 DATA1)
0x80 0x2C 0x00 0x00 0x30 0x32(正确,继续写入 CMD1)
确认 DATA1 后,写入 CMD1 = PBMs。I2Ct_IRQ 置为低电平有效,如 图 4-6 所示。
[0x20] + ACK(唯一地址/WR/A)
0x08 + ACK(寄存器编号/A)
0x04(字节计数)
0x50 0x42 0x4D 0x73(以 4 个 ASCII 字符表示的 PBMs)
IRQ 信号表示 CMD1 完成事件何时发生,并可读取 CMD1 和 DATA 寄存器以确认 PBMs 命令的结果。预期结果如第 8 和 9 步所示。
命令寄存器 0x08 表示在清除寄存器内容时命令已成功完成。为简单起见,示例仅检查第一位以确认内容不是“!CMD”,这表明 PBMs 命令已损坏或 DATA 寄存器加载了非法值(1)
[0x21] + ACK(唯一地址/WR/A)
0x08 + ACK(寄存器编号/A)
[0x21] + ACK(唯一地址/R/A)
0x04(字节计数)
0x00 0x00 0x00 0x00
当第一个字节 PatchStartStatus 被清除时,数据寄存器 0x09 指示修补成功。PatchStartStatue 的非零值 0x04、0x05 和 0x06 值分别表示无效的捆绑包大小、目标地址或超时值。具体请参阅1。
[0x21] + ACK(唯一地址/WR/A)
0x09 + ACK(寄存器编号/A)
[0x21] + ACK(唯一地址/R/A)
0x40(字节计数)
0x00 0x00 0x00 0x00 0x30 0x31
在这一步,不使用 PMBUS 格式,二进制映像的内容直接写入 PBMs 命令中指定的 I2C 突发数据目标地址,见参考表。突发格式受 MCU 架构影响。在本例中,突发大小限制为 4KB,因此会向 PD 发送三个连续突发数据(4,095 字节、4,095 字节和 3,202 字节),每次突发之间延迟 500us。末次突发结束后额外延迟 500μs 再发送 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 命令不包括输入数据,因此仅发送该命令。
[0x21] + ACK(唯一地址/WR/A)
0x08 + ACK(寄存器编号/A)
[0x21] + ACK(唯一地址/R/A)
0x04(字节计数)
0x50 0x42 0x4D 0x63(以 4 个 ASCII 字符表示的 PBMc)
IRQ 信号表示 CMD1 完成事件何时发生,并可读取 CMD1 寄存器以确认 PBMc 命令的结果。
与 PBMs CMD1 清除类似,读取 CMD1 寄存器并确认原始命令已清除且不等于 !CMD。
20ms 延迟允许 PD 控制器加载并应用映像。一旦延迟结束,就会读取 DATA1 和 MODE 寄存器以确认成功。
在这个实例中,从 DATA1 寄存器读取了 40 个字节。
最后一步是验证 PD 是否已切换为 APP 模式。进入 APP 模式后,PD 控制器现在可以在应用的自定义配置下运行。
[0x21] + ACK(唯一地址/WR/A)
0x03 + ACK(寄存器编号/A)
[0x21] + ACK(唯一地址/R/A)
0x04(字节计数)
0x41 0x50 0x50 0x20(以 4 个 ASCII 字符表示的‘APP’)