主题中讨论的其他器件: TPS65988、 TPS65987、TPS65987D
工具与软件:
你(们)好
我正在使用 TPS65987DDK 设计 USB PD 应用板。
是否可以 通过 TPS65987DDK 的 I2C2从外部 CPU 将 FW 编程到空闪存中?
我参考了文档"TPS65987和 TPS65988 SPI 闪存固件更新 over I2C"、但我面临0x2D PatchHeaderErr、无法继续执行后续步骤。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
你(们)好
我正在使用 TPS65987DDK 设计 USB PD 应用板。
是否可以 通过 TPS65987DDK 的 I2C2从外部 CPU 将 FW 编程到空闪存中?
我参考了文档"TPS65987和 TPS65988 SPI 闪存固件更新 over I2C"、但我面临0x2D PatchHeaderErr、无法继续执行后续步骤。
尊敬的 Eugene:
是的、可以通过向 PD 控制器的 I2C2发送命令将固件加载到空闪存中。 您使用的是 FLxx 命令还是 PBmx 命令? 当加载到闪存时、应使用 FLxx 命令。
请向我发送您要发送的命令和订单的列表、并提供 I2C 日志。 PatchHeaderErr 似乎与补丁程序相关、而与我无关、但它可能是通过 I2C 写入的二进制文件的错误标头。 此外、您加载的二进制文件是如何生成的? 您使用了什么"Save binary"选项?
此致!
Alex
尊敬的 Eugene:
您不应再次擦除闪存。 但是、您确实需要重新引导 PD、以便在完成 FLxx 过程后从闪存加载固件。 我们在启动时仅从闪存加载固件一次、因此需要通过下电上电或"GAID" 4CC 命令重新引导 PD。
不确定"我是否需要像应用板上的 S3按钮那样进行准备以通过 I2C2访问空闪存?"这句话的意思。 I2C2是一个目标模块、用于与 PD 进行通信。 PD 使用控制器模块 I2C3从闪存获取数据。
此致!
Alex
您好、Alex
谢谢、一旦 FLxx 流程成功、我就会使用 GAID。
>>不确定您的意思是"我是否需要像 S3一样准备应用板上的按钮来通过 I2C2访问空闪存?"。
我的解释是不够的。
当闪存为空时、TPS65987D 唤醒为"安全"。 在这种情况下、无法通过 I2C2正确访问闪存。 例如、即使写入1、读取的数据也始终为0。
但是、如果在 TPS65987EVM 上按下 S3重新启动、TPS65987D 将唤醒为"默认"。 我可以通过 I2C2正确访问闪存。 读取的数据全部为 FF、并且在我执行写操作时已更新数据。
因此、我认为 如果我想通过 I2C2对空闪存进行编程、则需要按下用于拉低 MOSI 线路的 S3按钮。
我的理解是否正确?

您好、Alex
感谢您的支持。
在具有空闪存的安全配置中、TPS65987D 针对0x03访问返回 NACK。 (波形1)
我将 HRESET 置为有效后、TPS65987D 开始 响应 ACK、寄存器0x03的值为41 50 20。
但是、我无法通过 FLwd 对闪存进行编程。
TPS65987D 也返回了 ACK 至 FLwd 和 FLrd、但即使我将数据写入闪存、数据也全部为0x00。 在这种情况下、I2C 波形变得很奇怪。 地址和 R/W 位之间的时间间隔 延长了。 它看起来 PDC 输出时钟延长。 (波形2和3)
如何对固件进行编程以在安全配置中刷写?
尊敬的 Eugene:
我在内部进行了检查、很遗憾、当 PD 使用空闪存以安全配置引导时、闪存更新的 FLxx 命令无法正常工作。 在安全配置中、TPS65987D 旨在从闪存加载固件时启动。 如果闪存为空、PD 无法找到任何要加载的固件、并且未启用。 TPS65987D 无法在启动后加载空闪存、而只能更新闪存中存储的现有 PD 固件。 如果引导时闪存为空、PD 会认为没有可用的闪存、因此它将期望主机 EC 或 MCU 使用 PTCx 命令直接修补其 SRAM。
您可以尝试使用"无限等待"配置而不是"安全配置"。 这会在引导时将 PD 置于不同状态、并使用空闪存、从而使 FLxx 命令正常工作。
此致!
Alex
尊敬的 Eugene:
我在内部进行了检查、即使在安全配置下也是如此、PD 应在 I2C 上使用 ACK 进行响应。 如果启动后 I2C 上的 PD 正在 NACK、则 PD 未正确引导。 这就是为什么在 HRESET 引脚 切换为高电平/低电平后、PD 开始在 I2C 上响应的原因。 FLxx 在 Safe Configuration 下仍然无法正常工作。
我认为我没有问过您这个问题、但是您是在 EVM 还是在定制电路板上进行测试? 如果您在定制电路板上进行测试、此场景是否适用于 EVM?
此致!
Alex