工具/软件:
我们提供了具有受电 PPS 曲线和 PPS 兼容壁式充电器 (3.3V - 11V、5A) 的 TPS25751。
合约协商后、我可以从活动 PDO 寄存器中读取最小/最大电压和最大电流。
但从何处读取协商的电压和电流? (在我本例中为 8.4V、因为它在 PD PPS 受电端配置文件中进行了设置)
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.
您好、Chris。
感谢您的回答。
我尝试读取该 RDO 寄存器、后跟结果。
协商供电方合约后此寄存器的内容:
活动 RDO 寄存器:0x1304B12C 0x00000000 0x00000000 0x1304B12C <-最后 32 位是正确的源合约、如技术手册中所述、由我们的驱动程序良好解码和处理。
受电方 PPS 合约协商时此寄存器的内容:
活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000 <-最后 32 位为空(我认为应该是关于合约的信息)、前 32 位正在随着不同的 PPS 合约值进行更改(我尝试在 PD 配置中更改 PPS 的电压/电流)。
但在技术手册中、这些位标记为“保留“、仅此而已。 我假设这些 位是正确的、其中包含有关协商 PPS 合约的电流/电压的信息、但请您提供有关 如何解码此值的信息吗?
但是、如果我的假设错误、请告诉我从哪里可以读取受电方 PPS 合约的协商值。
您好、Oleg、
感谢您指出这一点。
“RDO"(“(请求(请求数据对象)实际上由 USB-C PD 规范定义。
TRM 仅显示固定合同的外观、因为这是最常用的。 PPS RDO 实际上看起来略有不同、并包含电压信息。

表 6-25 中的 B0 至 B31 应与有效 RDO 寄存器中的 B0 至 B31 保持一致。
还包括固定和可变 RDO 的屏幕截图、供您参考。

如您所见、物体位置和许多其他位是相似的。 要正确解码、您可能需要先检查对象位置、然后检查源上限消息中的对象以确定 RDO 类型。
然后、您可以最终解码 PPS 电压和电流。
希望这可以澄清混淆。
完整规格可在以下位置找到: https://www.usb.org/document-library/usb-power-delivery
谢谢。此致、
Chris
正如我之前所写的、对于受电方 PPS 合约、位 31..0 为零。 这是主要问题。
对于源合约、这些位包含正确的源合约(具有对象索引和工作电流,正如 PD 协议描述所规定的那样)、我们的驱动程序能够对它们进行完美解码。
但是同样、对于受电方 PPS 合约、所有这些位都为零、因此我无法解析它们以在 PPS 模式下获得协商的电流。
我的问题是如何解析 RDO 寄存器的 95..64 位,因为只有这些位不是零,但在手动描述为“保留“。 我尝试将它们解码为 PDO 对象、但似乎不可能...
1.我使用 PD 分析仪,看到 PPS 合约已协商。
2.我知道 ActiveRDO 不存储 PDO,它存储运行电流等 我在源代码模式(对于固定合约)下解析它以获取对象位置和工作电流、并且运行良好、因此我认为我 可以从正确的位置和偏移读取数据。
3.当 PD 控制器生成“新合约作为消费者“(设置了中断事件寄存器的 12 位)事件时,我读取 ActiveRDO 寄存器,这是正确的吗?
以下是日志的一部分:
[1297.628510] tps25751 1-0020:集成:新的接收端协议
[1297.630045] tps25751 1-0020:活动 PDO 合约寄存器:0xC0DC2164
[1297.630060] tps25751 1-0020:PDO SPR PPS 合约、Vmin = 3300mV、Vmax = 110000mV、Imax = 5000mA
[1297.632506] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000 <-这些最后 32 位存储活动 RDO
[1297.632515] tps25751 1-0020:有效 RDO 合同:0x00000000
[ 1297.632522] tps25751 1-0020:请求 PDO:obj_pos=0、V=0mV、0mA
因此、最后 32 位存储 Active RDO 在拉电流合约中非常有效、但在灌电流合约中为空。
这是 PD 分析仪输出的屏幕截图。
(请忽略底部,连接在屏幕截图时刻处于非活动状态) 
此外还尝试在循环中读取该寄存器、似乎它从未在低 32 位中具有正确的值:
[67.751996] tps25751 1-0020: Int: new sink contract
[67.753301] tps25751 1-0020:活动 PDO 合约寄存器:0xC0DC2164
[67.753309] tps25751 1-0020:PDO:0xC0DC2164
[67.753320] tps25751 1-0020:PDO SPR PPS 合约、Vmin = 3300mV、Vmax = 110000mV、Imax = 5000mA
[67.755205] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[ 67.755213] tps25751 1-0020:请求 PDO:obj_pos=0、V=0mV、0mA
[67.809778] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[ 67.865681] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[67.873849] tps25751 1-0021:活动 RDO reg: 0x00000000 0x00000000 0x00000000 0x00000000
[67.921811] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[67.926199] tps25751 1-0020:活动 PDO 合约寄存器:0xC0DC2164
[67.926205] tps25751 1-0020:PDO:0xC0DC2164
[67.926209] tps25751 1-0020:PDO SPR PPS 合约、Vmin = 3300mV、Vmax = 110000mV、Imax = 5000mA
[67.981755] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.041700] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.101811] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.162788] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.225895] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.281834] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.338010] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.394149] tps25751 1-0021:活动 RDO reg:0x00000000 0x00000000 0x00000000 0x00000000
[68.411207] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.493789] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.551026] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.607776] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.665796] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.721741] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
[68.777879] tps25751 1-0020:活动 RDO 寄存器:0x63838450 0x00000000 0x00000000 0x00000000
相同的代码、但对于源合约:
[45.570838] tps25751 1-0020: Int: new source contract
[45.575091] tps25751 1-0020:活动 RDO 寄存器:0x1304B12C 0x00000000 0x00000000 0x1304B12C
[ 45.575101] tps25751 1-0020:PDO:0x2501912C
[45.575104] tps25751 1-0020:PDO 固定合约、V = 5000mV、Imax = 3000mA
[45.575107] tps25751 1-0020:请求 PDO:obj_pos=1、V=5000mV、3000mA
[45.637713] tps25751 1-0020:活动 RDO 寄存器:0x1304B12C 0x00000000 0x00000000 0x1304B12C
[45.697692] tps25751 1-0020:活动 RDO 寄存器:0x1304B12C 0x00000000 0x00000000 0x1304B12C
[45.757698] tps25751 1-0020:活动 RDO 寄存器:0x1304B12C 0x00000000 0x00000000 0x1304B12C
[45.817778] tps25751 1-0020:活动 RDO 寄存器:0x1304B12C 0x00000000 0x00000000 0x1304B12C
[45.817783] tps25751 1-0020:有效 RDO 合约:0x1304B12C
相同的活动 RDO 寄存器由相同的代码读取、但最低 32 位(不是零)、但存储正确解码的正确数据。
您好、Oleg、
我不知道为什么有源 RDO 寄存器会将系统中的位 31:0 清零。
如前所述、RDO 寄存器中的对象是 RDO、 不是 PDO、它们的格式略有不同。
我已经在 EVM 上测试了 Sink PPS、但我这边似乎工作正常 通常、当没有有效的 PD 合约时、这些位将被置为零。 您是否确定已协商 PPS 合同?
请参阅下面我的一些测试的屏幕截图。
当我看到 TPS25751 在受电方 PPS 中请求 13.5V。

然后、检查活动 RDO 寄存器的 b0:321、并读取 0x71854614

首先检查 B31:28 以确定物体位置、我们可以看到它是 7、这对应于 PPS PDO。 这将告诉我们如何使用 PPS RDO 用于解码有效 RDO 寄存器中的 RDO 的表

为了找到电压、我们取 B20:9、这对应于值 0x2A3(12 月 675 日)并获得值 13.5V (675 * 20mV)。 对电流执行同样的操作可得出工作电流为 1A
然后、如果我在自动协商灌电流中修改灌电流 PPS 电压以将电压更改为 9V、我会看到相应的活动 RDO 寄存器更新。

0x35 读取:0x71838414。 电压字段现在显示为 9V
如果有效的 RDO 寄存器为零、则可能是您不在 PD 合约中或读取得太快。
谢谢。此致、
Chris
Oleg、




我测试了几次接收端配置、并获得了上述日志、您是否确定正确地解释了 I2C 读取? TPS25751 将发送 LSB 首先、
因此、根据上面的日志、B31:0 将为 0x71854614、其中 0x71 是 MSB、0x14 是 LSB。
当协商受电方合约并从寄存器 0x35 读取 16 个字节时、我永远看不到 上部 已填充 32 位。
在提供时、高 32 位会像您所注意的那样被填充。
谢谢。此致、
Chris