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.

[参考译文] TPS65987D:与 TPS65987D 进行电源交换失败

Guru**** 2560390 points
Other Parts Discussed in Thread: TPS65987D, TUSB320

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/868593/tps65987d-unsuccessful-power-swap-with-tps65987d

器件型号:TPS65987D
主题中讨论的其他器件: TUSB320

我使用 TPS65987D 通过 USB-C 在2种模式下与 Android 手机进行交互:UFP 和 DRP 在2种不同场景下。 由于电路板没有自己的电源、当器件首次连接到 Android 手机时、该器件配置为 UFP (电池电量耗尽模式)。 它依靠手机电源为电路板供电。 当应用另一个外部电源时、我们希望 TPS65987D 执行 PD PR_Swap 到电源、以便用作电话的电源(即为电话充电)。 问题是、一旦换用、手机的电流就会很小、这会导致手机输出消息"设备正在缓慢充电.."。

在交换之前完成了以下编程过程:

使用手机提供的电源启动时(处于电池电量耗尽模式):
1.清除电池电量耗尽标志
2.写入 Tx src 功能寄存器

施加另一个外部电源时:
3.写入全局配置寄存器
4.写入端口配置寄存器
5.写入端口控制寄存器
6.向电话发送 SWSr 命令以交换电源(尝试使电话成为接收设备,并使电路板成为接收设备)

步骤3后、USB 与手机的连接丢失。 步骤6后、当手机开始看到进入充电的迹象时、电源插拔似乎会生效、如下所示:

a)短暂闪烁的屏幕、然后显示充电图标
b)消息提示“Device charging slowly.....(设备充电缓慢. 要实现更快的充电速度、请使用手机随附的充电器。 确保电缆未损坏。"

实际上、USB 连接断开、手机消耗的电流很小。 我们测量了施加外部电荷时的输入总功耗、电流仅为150mA (包括电路板和电话、如果电流消耗任何电流)。

这种行为与我们预期的行为没有太大不同。 我们原本希望、在电源插拔后、手机将成为接收设备、同时仍保持数据主机(DFP)、而我们的电路板将成为源设备、同时保持 UFP 的数据角色、就像在插拔之前一样。

您能帮助确定我的设置有什么问题吗? 我正在尝试附加我们为器件编程所基于的应用程序自定义工具项目。 但是、站点拒绝了该消息、表示文件类型不允许或 mime 类型剂量与文件内容不匹配。 我现在只是发送一张原始视图的图片。

提前感谢您帮助我解决此问题。

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

    Daniel、您好!

    遗憾的是、PR 交换会导致复位以更改 PD 控制器的角色、因此这种行为是预期的。 我将与我的团队讨论、看看是否还有其他选择。 此外、我没有看到您配置的任何图像、您需要确保为您的智能手机提供适当的 PDO。 您能否再次尝试上载配置、或者可能尝试将.pjt 文件附加到该线程?

    谢谢、

    哈里

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

    您好 Hari、

    感谢您的回答。

    我理解并接受、配置的更改(从 UFP 到 DRP)将导致复位。 预期会短暂断开 USB 端口。

    问题是、在电源交换发生后、发生了以下情况:

    1.电话将断电,TPS65987D 将成为电源(这是预期)

    TPS65987D 在连接到手机的 VBUS 端仅输出4.2V 电压(这不是预期的值、应为~5V、因为 PP_HV2的输入电压为~5.1V)

    3.手机仅显示来自 VBUS 的150mA 电流消耗,并发送一条通知消息“设备充电缓慢...”  (这不是预期的)

    上面的第2点是我今天发现的。 电压远低于规格、因此可能有一些有关此问题的提示。 我不知道为什么它在没有手机负载的情况下会出现这么多的问题。

    我测量了芯片周围的所有电压(此处所附的原理图)、所有电压看起来都正常、但当器 件用作源时、VBUS 除外。 当它是灌电流时、手机给出的 VBUS 是正常的5V 电压。

    e2e.ti.com/.../PD_5F00_schem.pdf

    我将在此处附加.pjt 文件以供您查看。 还附上了一些关键寄存器的图片、便于快速查看。

    e2e.ti.com/.../3771.Project_5F00_DRP.pjt

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

    Daniel、您好!

    我快速查看了您的原理图、我认为可能会有问题。 我看到您已经在 VBUS2上连接了一个带有2个电阻器的分压器电路、您有没有理由这么做? 它可能会限制电压输出。 我建议查看数据表的引脚功能部分并浏览不同的引脚、以确保所有引脚均按照建议进行配置。 您还可以查看第 6.5节"电源要求和特性"、了解这些引脚是否满足要求条件且不超出范围。  

    至于项目文件、这些配置对我来说似乎很好。

    谢谢、

    哈里

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

    Hari、

    原理图上的一对电阻器(R63、R64)用作3.3V 电平的分压器、用于中断 MCU。

    我们认为它们之间的电流0.0625mA (5V/80K)不应成为负载因子。 我们无论如何都是根据你的建议将它们取出来的、因此没有任何变化。 在电源交换之前、手机的输入电压为5V、在交换之后变为4.2V。

    我忘了在原理图上提到一点。 定义 ADCIN1 (R31=194K、R29=100K)的一对电阻器在开始时形成值 ADCIN1 = R2/(R1+R2)=0.34。 该值与 SPI_MISO = 0一起定义、用于引导模式引脚搭接、以便器件在"电池电量耗尽模式"下进入 BP_ECWait_Internal。 我们的目的是使用 MCU 通过一系列 I2C 事务来配置芯片。 但是、我们无法使其正常工作、因此我们将引导程序更改为 ADCIN1=0.24 (BP_NoWait、配置2、仅限 UFP)。 因此电路板上的 R31实际值现在为316K (使 ADCIN1比率= 0.24)。 因此、在启动序列之后、TPS65987D 直接转到具有 UFP 配置的应用。 这符合我们的主板功能(无电池器件、从手机获取电源以执行其主要任务)、并且工作正常。

    但是、我们的电路板还支持另一项功能、即在外部电源出现时将电荷传递给手机。 当这个额外的电源出现时、MCU 执行一系列 I2C 事务来将 TPS65987D 重新配置为 DRP 模式、将电源插拔发送到电源等、以便将电荷传递到手机。 这就是我们当前的问题出现的地方。

    我想就以下问题征求您的意见:

    1.对于我们的应用、您对我们的策略有何看法? 也许我们应该从引导序列中的 DRP 配置开始、而不是从 UFP 开始、然后更改为 DRP? 或者、在接受电源交换之前、芯片可能需要一段时间才能复位并稳定下来?

    2.如果我们想从 DRP 配置开始(与我们发送给您的应用程序自定义工具设置的配置相同)、我们是否应该在加载一系列补丁命令之前选择 SPI_MISO = 0、ADCIN1 = 0.34的引导模式引脚搭接? (对应于数据表中表5第8.4.1节中的 BP_ECWait_Internal、Infinite Wait)。

    3.如果我们要发送 PTCd 命令,如何将二进制文件(保存在应用程序自定义工具中)解压到一系列64字节序列中作为所需的输入数据?

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

    您好 Hari、

    您是否有机会阅读我的上述帖子?

    目前、我确实想尝试使用补丁方法(在启动后立即使用这些4CC 补丁命令)将器件配置为 Get-Go 中的 DRP。  

    我的问题是、我不知道如何将二进制文件转换为一串十六进制字节、以便在基于 C 的程序中使用 I2C 写入函数。

    I2C 写入函数要求将数据部分(在从器件地址、寄存器地址、字节计数之后)安排在一个字节数组(以十六进制表示)中。 由于'PTCd'(补丁下载)命令一次需要64字节作为输入数据、我想我们应该发送尽可能多的命令。 但是、如果给定二进制文件、如何将其提取到一系列64字节数组中以用于 I2C 写入函数?

    我想我的迫切需要是如何回答这个问题、作为解决我的充电问题的关键。 如果您能帮我解决这个问题、我将不胜感激。 谢谢你。

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

    Daniel、您好!

    此应用手册应有助于回答您的问题。 图3显示了如何生成通过 I2C 进行固件更新所需的二进制文件。

    http://www.ti.com/lit/an/slva972a/slva972a.pdf

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

    尊敬的 Adam:

    感谢您提供应用手册。

    为了执行修补命令、我将电路板配置更改为 BP_ECWait_Internal (ADCIN1至0.34)。 从电池电量耗尽模式启动后、我们使用 MCU 按照建议加载补丁命令(PTC、PTCd、PTCc)。 但是、电源插拔行为与以前相同、即通过对相应寄存器的直接 I2C 写入来更改应用配置。

    换言之、当我观察到以下症状时、电源插拔出现:

    手机应用程序显示了从输出电流(-300mA)到输入电流(200mA)的变化、变化非常小(应用程序名称是安培)

    2.从电路板到手机的输出电压(VBUS)仅为4.2V

    3.5V 输入电压(来自手机)到4.2V 输出电压(来自内部 PP2开关)的转换是 INTANSTANEOUS

    与 EVM 模块的行为相比:

    手机应用程序显示的电流为1100mA、这是预期值。

    VBUS 电压为~5V (也来自内部开关 PP2)、这是预期值。

    3.从输入电压到输出电压的转换间隔为384ms (5V -> 0V (384ms)-> 5V)

    连接了2个波形。

    在我的情况下、电源开关 PP2似乎有一些奇怪的现象、无法正常工作。 这不是我在所有电路板上尝试过的特定芯片的问题、它们的行为方式是相同的。

    您能想到会导致芯片这种行为的任何可能性吗?  

    非常感谢您的帮助。

    谢谢、

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

    Daniel、您好!

    是否有办法隔离/移除连接到 PD 控制器 PPHV 的5V 电源、而改用专用工作台电源? 捕获类似于恒定电流情况、最大电流电平会超过该情况、而为了计数、RDSon 会增加、从而使输出电压下降。 但是、我不认为这是 TPS65987D 的数据、因为该器件在打开 FET 之前具有640uS 的超时。 由于您可以看到电压恒定不变而不会出现压降、因此不要相信 PD 控制器会导致压降。

    此外、它是瞬时的这一事实是不正确的。 成功加载补丁并启动系统电源后、您是否清除电池电量耗尽标志?

    您是否还能够在上述事件期间读取寄存器0x26的状态?

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

    尊敬的 Adam:

    你是对的。 我能够隔离外部5V 电源和 VBUS (我们发现两者之间使用了错误的器件、因此我们现在将其移除)。 结果证明要好得多。

    PP2开关的输出端不再出现压降、VBUS (5V -> 0V (440ms)-> 5V)的转换间隔与 EVM 上的行为相同。

    但是、电流要好得多(在700mA 范围内)、我们希望使其达到电源的能力(减去电路板上使用的一些电流、大约为300mA)。

    我们将 Tx 源电容(地址0x32)写入寄存器、如下(从 LSB 到 MSB):

    0x01、0x00、0x00、0x00、0x01、 0x00、0x00、0x00、0x2C、0x91、 0x01、
    0x04、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、 0x00、
    0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、 0x90、0x01、0x00、0x00、0x00、 0x00、...

    这与下图中的情况类似:

    我们如何设置(在上方 Tx src 电容寄存器旁边)、以便手机能够获得最大电流(根据规格、电流大约为2A)?

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

    Daniel、您好!

    很高兴能够解决该问题。

    另一种选择是为隐式合同通告的上拉电阻器。 这是在端口控制寄存器(0x29)中控制的。请确保 Type-C 电流设置为3A、如下图所示。 这是电压/电流广播的唯一其他选项。

    如果将其设置为3A 设置、则 TPS65987D 将广播最大电流、而手机将限制其消耗的电流。

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

    Adam、

    实际上、我们在端口控制寄存器(0x29)上设置了3A (最强上拉电阻)。 如果这是 TPS65987D 唯一可以实现的其他功能、那么我们应该查看其他可能的原因、例如电源能力(我们使用 TUSB320通过 USB-C 连接外部电源)、 或者、从我们的电路板到电话连接器的某个位置可能存在硬件瓶颈(有一个子板通过柔性电缆连接到我们的电路板、并通过 USB-C 插头连接到电话)。  

    在结束此问题之前、我将向您提出这个非常重要的问题、因为它将帮助我为我的特定应用确定使用 TPS65987D 的最佳架构:

    到目前为止、我们使用引导方法(从无电电池模式、因为我们的电路板无电池):

    1.引脚搭接(SPI_MISO = 0;ADCIN1 = 0.24)、以从电话获取电源并使 TPS65987D 直接进入默认配置2 (UFP)的应用模式。

    之后、作为初始化例程的一部分、MCU 会通过 I2C 对器件进行编程、其中包括 Tx src 电容器(0x32)、清除电池电量耗尽标志等寄存器    将 器件重新配置为 DRP 模式的3个关键寄存器除外:全局系统配置(0x27)、端口配置(0x28)、端口控制(0x29)。

    3.当外部充电器被施加到电路板上时、MCU 对上述3个寄存器进行编程并发出命令进行电源交换以为手机充电。

    使用上述三步策略、到目前为止、我们可以实现电源交换。 但是、有一些不良影响:

    a)由于在步骤3中、在插入充电电缆与实际交换之间存在一些编程过程、因此存在一些滞后时间、该时间不是很顺利。 相反、我们更希望在插入充电电缆时仅执行一个交换命令。

    b)在步骤2中只需对少数寄存器进行编程。 我们只对寄存器进行编程、我们"认为"在器件成为源后需要对其进行编程。 这不是我们想要的一种肯定的方法。 与 EVM 上的情况相反、我们无法实现大于1A 的电流消耗、这一事实可能与此相关。 因此、我们希望在应用程序自定义工具中设置时对精确配置(DRP)进行编程。

    为了解决 a)和 b)问题、我们认为唯一的方法是使用该工具生成的二进制文件使用补丁包更新任务方法配置器件。 我们通过将引导引脚更改为(SPI_MODE=0;ADCIN1 = 0.34)尝试了这种方法、并成功加载了补丁。 但是,这是我们的问题:一旦最后一个命令(PTCc)完成,器件就会将自身重新配置为 DRP (这是预期的),VBUS 电压会从5V -> 0V -> 5V -> 0V ... 不停地。 我们认为这可能是2个 DRP 器件(手机和电路板)之间的正常交互、直到它们稳定下来(偶然?) 一个成为 DFP、另一个 UFP。 但问题是我们的电路板是一个无电池器件、这完全取决于手机的工作功率。 一旦断电(VBUS = 0V 时的周期)、TPS65987D RAM 上的所有数据都将丢失、因此刚刚加载的整个补丁也将丢失。 当数据丢失时、它就像开始时一样成为 UFP、从电池获取电源以从"电池电量耗尽"状态启动、VBUS 将再次显示为5V。 之后、TPS65987D 重新引导至 PTCH 状态、再次加载补丁并重新配置为 DRP、这会再次开始与电话协商初始角色、从而导致 VBUS 变为0V。 这个周期不停地重复。

    我的问题:

    是否有办法使其成为 DRP 并将其自身设置为 UFP 而不通过电话角色的初始协商过程?

    2.如果我们在系统中实施额外的闪存来预存储修补程序,那么器件能否自动配置为 DRP (初始具有 UFP 角色),这样我们就可以避免从主机通过 I2C 加载修补程序的过程,以及在这之后重新配置自己的不可避免的过程?  

    非常感谢您的帮助。

    谢谢、

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

    Daniel、您好!

    您在以下问题的答案:

    不需要。如果您希望器件为 DRP、则在最初稳定为 UFP 之前、器件必须经过协商过程。 没有办法成为 DRP、并且始终作为 UFP 出现。 这将使其成为 UFP

    2.您可以使用外部闪存加载配置、但这是从外部 EEPROM 以及通过 I2C 命令对闪存映像进行冗余更新。

    如果您希望在一个闪存映像中具有多个配置、建议使用应用配置功能。 您可以按照此 E2E 帖子将其集成到您的项目文件中。

    https://e2e.ti.com/support/interface/f/138/t/871307