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:通过 I2C 将固件编程到空闪存中

Guru**** 2601915 points
Other Parts Discussed in Thread: TPS65987D, TPS65987DDK, TPS65988

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1371879/tps65987ddk-program-fw-into-an-empty-flash-via-i2c

器件型号:TPS65987DDK
主题中讨论的其他器件: TPS65988TPS65987、TPS65987D

工具与软件:

你(们)好

我正在使用 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alex

    感谢你的帮助。

    我将使用 FLxx 命令和带完整头文件的 Low Region。

    在 我使用应用程序配置工具再次擦除闪存并按下 TPS65987EVM 上的 S3按钮上电后、 PatchHeaderErr 将被清除、 我可以通过 I2C2进行访问。

    我是否需要像应用板上的 S3按钮一样准备好通过 I2C2访问空闪存?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 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按钮。

    我的理解是否正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Eugene

    我想您指的是 SPI_MOSI。 SPI_MOSI 引脚用于在安全或默认配置中引导 PD 控制器。 所以、您是正确的。 请参阅下表。 在相同的 ADCIN 设置下、当 SPI_MOSI 为高电平时、如果闪存为空、PD 将在安全模式下引导、而如果 SPI_MOSI 为低电平、PD 将在默认配置下引导。 是的、按钮将是正确的解决方案。

    此致!

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alex

    谢谢您、我了解 当 SPI_MOSI 为高电平时、如果闪存为空、TPS65987D 将以安全模式启动。

     在 TPS65987D 处于安全模式下时、是否有办法通过 I2C2进行访问?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eugene:

    I2C2应该在安全配置下工作、但我会再次进行检查。 您是否可以使用逻辑分析仪发送 I2C 捕获/日志、以显示在此状态下 I2C2上的写入/读取? TPS65987D 对交易进行 ACK 或 NAK 处理吗? 读取 PD 寄存器0x03会返回什么结果?

    此致!

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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:

    我正在内部检查 SAFE CONFIGURATION 中的 PD 状态以及 FLxx 命令是否有效。 EOD 明天为您提供最新信息。

    此致!

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eugene:

    我在内部进行了检查、很遗憾、当 PD 使用空闪存以安全配置引导时、闪存更新的 FLxx 命令无法正常工作。 在安全配置中、TPS65987D 旨在从闪存加载固件时启动。 如果闪存为空、PD 无法找到任何要加载的固件、并且未启用。 TPS65987D 无法在启动后加载空闪存、而只能更新闪存中存储的现有 PD 固件。 如果引导时闪存为空、PD 会认为没有可用的闪存、因此它将期望主机 EC 或 MCU 使用 PTCx 命令直接修补其 SRAM。

    您可以尝试使用"无限等待"配置而不是"安全配置"。 这会在引导时将 PD 置于不同状态、并使用空闪存、从而使 FLxx 命令正常工作。

    此致!

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alex  

    谢谢、我理解。

    我又收到一个问题。

    当 PDC 以"无限等待"或"安全"方式引导时、PDC 返回 NACK 以进行 I2C2访问。  如果我 将 HRESET 置为有效一次、 PDC 将做出响应。

    这也是 TPS65987D 的限制吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eugene:

    从无限等待启动后、I2C2上的 PD 不应为 NACK。 在安全配置中、NACK 是正常的。

    您是否尝试过使用 I2C1? 此外、当您引导电路板/ PD 时、它是从系统侧供电还是通过 Type-C 端口供电?

    此致!

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alex

    您是否意味着 TPS65987D 规范有以下场景?

    1.擦除闪存

    2.开机、PDC 进入安全模式。

    3.外部 CPU 通过 I2C 和 PDC 应答来访问 PDC 的0x03寄存器  NACK .

    4.外部 CPU 将 HRESET 脉冲置为 PDC。

    5. 外部 CPU 通过 I2C 和 PDC 应答访问 PDC 的0x03寄存器  ACK .  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eugene:  

    我在内部进行了检查、即使在安全配置下也是如此、PD 应在 I2C 上使用 ACK 进行响应。 如果启动后 I2C 上的 PD 正在 NACK、则 PD 未正确引导。 这就是为什么在 HRESET 引脚 切换为高电平/低电平后、PD 开始在 I2C 上响应的原因。  FLxx 在 Safe Configuration 下仍然无法正常工作。

    我认为我没有问过您这个问题、但是您是在 EVM 还是在定制电路板上进行测试? 如果您在定制电路板上进行测试、此场景是否适用于 EVM?

    此致!

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alex

    感谢您提供的信息。

    我正在 EVM 上使用我的定制 CPU 板进行测试、以控制 I2C。 我将再次检查电源序列是否存在违规。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eugene:

    使用 EVM 时、在引导期间使用"Disable Flash Config"按钮时、请注意 ADCIN 设置。 使用按钮会模拟空闪烁、但也会更改 ADCIN 设置、因为它会下拉 SPI 引脚。

    此致!

    Alex