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.

[参考译文] TPS25750:关于 PowerStatusUpdate

Guru**** 2589280 points
Other Parts Discussed in Thread: TPS25750, BQ25792

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1298139/tps25750-regarding-powerstatusupdate

器件型号:TPS25750
主题中讨论的其他器件: BQ25792

大家好、支持团队。

我的客户遇到有关 PowerStatusUpdate 的严重问题、如下所示。

POWER_STATUS 寄存器(0x3F)不变、但   PowerStatusUpdate 的状态变为"1"。  

另一个情况是"0"会通过 INT_CLEAR 写入 PowerStatusUpdate、之后、PowerStatusUpdate 可能再次变为"1"。 (POWER_STATUS 寄存器(0x3F)未更改。)

是否有可能发生上述情况?

我认为 PowerStatusUpdate 清楚地表明 POWER_STATUS 寄存器(0x3F)已更改、但除了 POWER_STATUS 寄存器(0x3F)之外是否有任何其他内容受到影响?

此致、

千兆

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

    您好!

    您能否使用新的 GUI (https://dev.ti.com/gallery/view/USBPD/USBCPD_Application_Customization_Tool) 并选择"否"来支持 BC1.2?

    我认为电源状态寄存器中的充电器广播/检测字段是发出中断的原因。

    此致

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

    你好,林三

     充电器广播/检测和 POWER_STATUS 寄存器(0x3F)中的其他 ALL 字段未更改。

    我的理解是否正确、即如果  POWER_STATUS 寄存器(0x3F)中的任何状态之一发生变化、PowerStatusUpdate 会触发"1"?

    如果是、您认为我们确认的事件是异常的吗?

    此致、

    千兆

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

    您好!

    我的怀疑是 、充电器广播/检测字段正在报告检测正在进行或广播正在进行、这些可能会不断提高标志。

    还有其他可能、但我们先检查一下。

    此致

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

    嗨、Tomome-San

    我们正在检查寄存器中是否有如下显示的字段、但方法中是否有错误?

    如果不正确、您能否告诉我们 、充电器广播/检测字段报告检测正在进行或广播的正确确认方法是什么?

    如果正确、我们已确认这些寄存器未更改。

    此致、

    千兆

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

    嗨、Tomome-San

    我们向客户确认 ChargeAdvertiseStatus 和 ChargeDetectStatus 寄存器不变。

    在其系统中、TPS25750和 BQ25792不直接通过 I2C 进行通信。 因此、不会重新写入 TPS25750的充电器状态。

    PowerStatusUpdate 寄存器的读取日志如下所示。

    ---------------- PowerStatusUpdate 写日志-------------------------------------------------------

    EVENT1.PowerStatusUpdate = 0x1
    写入 INT_CLEAR1
    ReadBack1:EVENT1.PowerStatusUpdate = 0x0
    POWER_STATUS = 0x0000
    ReadBack2:EVENT1.PowerStatusUpdate = 0x0
    ------------------------------------------------------- USB PD 连接器已断开

    EVENT1.PowerStatusUpdate = 0x1
    写入 INT_CLEAR1
    ReadBack1:EVENT1.PowerStatusUpdate = 0x0
    POWER_STATUS = 0x023F
    ReadBack2:EVENT1.PowerStatusUpdate = 0x0
    ------------------------------------------------------- USB PD 连接器已连接

    EVENT1.PowerStatusUpdate = 0x1
    写入 INT_CLEAR1
    ReadBack1:EVENT1.PowerStatusUpdate = 0x0
    POWER_STATUS = 0x0000
    ReadBack2:EVENT1.PowerStatusUpdate = 0x0
    ------------------------------------------------------- USB PD 连接器已断开

    EVENT1.PowerStatusUpdate = 0x1
    写入 INT_CLEAR1
    ReadBack1:EVENT1.PowerStatusUpdate = 0x0
    POWER_STATUS = 0x023F
    ReadBack2:EVENT1.PowerStatusUpdate = 0x0
    ------------------------------------------------------- USB PD 连接器已连接

    EVENT1.PowerStatusUpdate = 0x1
    写入 INT_CLEAR1
    ReadBack1:EVENT1.PowerStatusUpdate = 0x0
    POWER_STATUS = 0x0000
    ReadBack2:EVENT1.PowerStatusUpdate = 0x0
    ------------------------------------------------------- USB PD 连接器已断开

    EVENT1.PowerStatusUpdate = 0x1
    写入 INT_CLEAR1
    ReadBack1:EVENT1.PowerStatusUpdate = 0x0
    POWER_STATUS = 0x023F
    ReadBack2:EVENT1.PowerStatusUpdate = 0x1 --读取 power_status 后,INT_EVENT1.PowerStatusUpdate 为"1"。
    < >
    POWER_STATUS = 0x023F --再次读取 POWER_STATUS。 它没有改变。
    ------------------------------------------------------- USB PD 连接器已连接 (不好!)

    EVENT1.PowerStatusUpdate = 0x1 --最后一次 PowerStatusUpdate 保持为1,因此在300ms 后仍保持相同的状态。
    写入 INT_CLEAR1
    ReadBack1:EVENT1.PowerStatusUpdate = 0x0
    POWER_STATUS = 0x023F
    ReadBack2:EVENT1.PowerStatusUpdate = 0x0

    ---------------- EOL ---------------------------------------------------------------

    以下是源代码的摘录。

    erResult = RequestReadUSBPD(
    								hUSBPD,
    								LPTREG_INT_EVENT1,
    								(UB *)&stIntEvent,
    								sizeof(stIntEvent));					// Read INT_EVENT1 every 300ms.
    
    		if (erResult == I2C_SUCCESS) {
    			if ((stIntEvent.bitPowerStatusUpdate != 0) || (g_stUsbInfo.blUSBPD_APP != 0)) {		// If PowerStatusUpdate becomes 1, output the log.
    				g_stUsbInfo.blUSBPD_APP	= 0;
    				printf("            EVENT1.PowerStatusUpdate = 0x%d\r\n", stIntEvent.bitPowerStatusUpdate);
    
    				erResult = RequestWriteUSBPD(
    										hUSBPD,
    										LPTREG_INT_CLEAR1,
    										(UB *)&stIntEvent,
    										sizeof(stIntEvent));									// Write INT_CLEAR1 to clear INT_EVENT1
    				printf("Write INT_CLEAR1\r\n");
    				erResult = RequestReadUSBPD(
    										hUSBPD,
    										LPTREG_INT_EVENT1,
    										(UB *)&stIntEvent,
    										sizeof(stIntEvent));									// Reading back to ensure PowerStatusUpdate is cleared.
    				printf("ReadBack1 : EVENT1.PowerStatusUpdate = 0x%d\r\n", stIntEvent.bitPowerStatusUpdate);
    
    
    				dly_tsk(500);																	// If the wait time is not set to this amount, an error will occur (reason unknown)
    				erResult = RequestReadUSBPD(
    										hUSBPD,
    										LPTREG_POWER_STATUS,
    										(UB *)&stPowerStatus,
    										sizeof(stPowerStatus));									// POWER_STATUS read
    				printf("POWER_STATUS = 0x%02X%02X\r\n", stPowerStatus.ubBytes[1], stPowerStatus.ubBytes[0]);
    				erResult = RequestReadUSBPD(
    										hUSBPD,
    										LPTREG_INT_EVENT1,
    										(UB *)&stIntEvent,
    										sizeof(stIntEvent));									// Read back INT_EVENT1
    				printf("ReadBack2 : EVENT1.PowerStatusUpdate = 0x%d\r\n", stIntEvent.bitPowerStatusUpdate);
    
    				if (stIntEvent.bitPowerStatusUpdate != 0) {
    					printf("<<WHY??>>\r\n");													// If PowerStatusUpdate becomes 1, output WHY??
    					erResult = RequestReadUSBPD(
    											hUSBPD,
    											LPTREG_POWER_STATUS,
    											(UB *)&stPowerStatus,
    											sizeof(stPowerStatus));								// Read POWER_STATUS for confirmation
    					printf("POWER_STATUS = 0x%02X%02X\r\n", stPowerStatus.ubBytes[1], stPowerStatus.ubBytes[0]);
    				}
    
    				printf("\r\n");
    
    

    我再问一个问题。
    为什么即使 POWER_STATUS 寄存器(0x3F)不变、PowerStatusUpdate 寄存器也会变为1?

    此致、

    千兆

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

    您好!

    根据 TRM 和故障症状的描述、好像确实正在发生异常行为。

    您在测试过程中做什么? 是否仅用于插/拔? 发生这些事件时、您是否能够捕获并共享 I2C 总线的 PD 日志和 I2C 日志?

    此外、请分享用于该项目的.json 和.bin、以便我们在最后进行一些测试。

    谢谢。此致、

    克里斯

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

    你好,Chris-san

    感谢您的答复。

    我们将获取您请求的信息并再次与您联系。

    此致、

    千兆

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

    您好!

    听起来不错、正在等待您的回复。

    谢谢。此致、

    克里斯