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.

[参考译文] TPS25751:TPS25751和 BQ25798之间的通信问题

Guru**** 2536160 points
Other Parts Discussed in Thread: BQ25798, TPS25750, TPS25751

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1416520/tps25751-issue-with-the-communication-between-tps25751-and-bq25798

器件型号:TPS25751
主题中讨论的其他器件:BQ25798TPS25750

工具与软件:

您好、TI 支持团队:

我将联系起来报告我在通信期间观察到的 TPS25751和 BQ25798之间的一种特殊行为。 当我将 TPS 模块从 TPS25750更改为 TPS25751时、问题出现了。 我使用下面随附的 config.json 配置、通过 USBCPD 应用程序自定义工具生成固件映像。
我注意到 TPS 和 BQ 之间的 I2C 通信不正确。 这些是我注意到的步骤
  1. Setup Write + ACK (设置写入+ ACK)---- ADDR + ACK  
  2. 阅读+ACK --> 1字节+ACK------- 1字节+ NACK
  3. 然后它尝试设置读取为"0x7F"+ NACK、然后我们得到"0xFF"、7次。
谨请你就这一关键和紧急事项提供指导、包括为解决这一问题而应遵循的任何潜在原因或调试步骤。

config.json

"调查问卷":{
"器件":"TPS25751"、
"答案":[
null、
0、
0、
0、
0、
1、
3、
0、
1、
1、
1、
0、
0、
0、
8.4、
1、
0.04、
0.4、
0
]、
"VendorID":"0000"、
"ProductID":"0000"、
"版本":"1.0.0.2"
}
}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已重新启动系统、现在 TPS25751能够从 EEPROM 读取映像、但与 BQ25798的通信无法正常工作。 请在下面找到日志。

    TPS_BQ_I2C.log:

    写入0x50 ACK 数据...

    写入0x50 ACK 数据:0x47 0xC0
    读取0x50确认数据:0x01 0x00 0x00 0x00 0x01 0x00 0x00 0x09 0x20 0x00 0x09 0x01 0x00 0x00
    写入0x6B ACK 数据:0x01
    读取0x6B ACK 数据:0x03
    写入0x6B ACK 数据:0x10 0x00
    写入0x6B ACK 数据:0x10 0x00
    写入0x6B ACK 数据:0x14 0x1C
    写入0x6B ACK 数据:0x11 0x00
    写入0x6B ACK 数据:0x12 0x80
    写入0x6B ACK 数据:0x08 0x0A
    写入0x6B ACK 数据:0x09 0x01
    写入0x6B ACK 数据:0x01 0x03 0x48
    写入0x6B ACK 数据:0x03 0x00 0x64
    写入0x6B ACK 数据:0x0F 0x00
    写入0x6B ACK 数据:0x12 0x80
    写入0x6B ACK 数据:0x0F 0x00
    写入0x6B ACK 数据:0x0B 0x00
    写入0x6B ACK 数据:0x06 0x00
    写入0x6B ACK 数据:0x03 0x00
    写入0x6B ACK 数据:0x48
    读取0x6B 确认数据:0x19
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x00 0x10
    写入0x6B ACK 数据:0x2E
    读取0x6B 确认数据:0x30
    写入0x6B ACK 数据:0x00 0x2E
    写入0x6B ACK 数据:0x0F
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x00 0x0F
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x00 0x10
    写入0x6B ACK 数据:0x1C
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x14
    读取0x6B 确认数据:0x1C
    写入0x6B ACK 数据:0x00 0x14
    写入0x6B ACK 数据:0x3B
    读取0x6B 确认数据:0x00 0x00


    正如您在最后一个事务中看到的、即使连接了电池、在 Reg_0x3B 上、VBAT-ADC 的值为0。

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

    嗨、Sai、

    我主要为 TPS25751提供支持、但对 BQ Aprts 有一些经验。

    您还可以检查寄存器0x2E 和0x2F。 需要启用 BQ 器件上的 ADC 监控器以获得正确的读数。 特别是 ADC 和 VBAT_ADC 的 EN 位。

    TPS25751当前不会修改这些寄存器、因此任何修改都需要由外部 MCU 来完成。

    谢谢。此致、

    Chris

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

    Chris、您好!

    感谢您的答复。

    是的、我要在寄存器0x2E 中将 ADC_EN 和 ADC_SAMPLE 启用为15位有效分辨率、并且不会修改寄存器0x2F、因为每个参数的默认设置是启用。

    谢谢。此致、
    SAI

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

    Chris、您好!

    我根据  TPS25750技术参考手册(修订版 A)第60页创建了 I2C 写入事务函数。

    在下面、您可以 使用 saleae 找到 TPS25750和 BQ25798之间的数据事务  

    写入0x6B ACK 数据:0x48
    读取0x6B 确认数据:0x19
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x80
    写入0x6B ACK 数据:0x10 0x80
    写入0x6B ACK 数据:0x2E
    读取0x6B 确认数据:0xB0
    写入0x6B ACK 数据:0x2E 0xB0

    但使用相同的代码时、由于  TPS25751技术参考手册(修订版 A)第77页中没有任何更改、因此 TPS25751与 BQ25798之间的数据事务

    写入0x6B ACK 数据:0x48
    读取0x6B 确认数据:0x19
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x00 0x10
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x00 0x2E  

    您可以看到寄存器地址位置已更改、这表明我正在写入寄存器0x00、数据为0x2E


    因此、我删除了 Byte 3 (Length)、15:8保留值、然后刷新了固件、表明通信正常。

    写入0x6B ACK 数据:0x48
    读取0x6B 确认数据:0x19
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x10 0x00
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x2E 0x80  

    **现在问题在于 BQ25798配置、使用相同的 config.json 生成 TPS25750和 TPS25751的映像、 使用 TPS25750时 BQ25798的初始化有效、但使用 TPS25751时 BQ15798 的初始化无效。




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

    嗨、Sai、

    因此我删除了字节3 (长度) 15:8保留值、然后刷新了固件、使通信成功。

    是的、最近发现 TRM 中的"I2CW"命令说明存在问题、并且该文档当前正在更新。

    [报价 userid="624150" url="~/support/power-management-group/power-management/f/power-management-forum/1416520/tps25751-issue-with-the-communication-between-tps25751-and-bq25798/5428475 #5428475"]**现在问题在于 BQ25798配置、使用了相同的 config.json 生成 TPS25750和 TPS25751的映像、 使用 TPS25750时的 BQ25798初始化正常工作、但使用 TPS25798时的 BQ15898初始化 无法工作。

    您能否共享 TPS25750 -> BQ25798和 TPS25751 -> BQ25798的 I2C 日志来比较任何差异。 "不工作"是什么意思。 当您说使用相同的配置时、 这意味着什么?  您是否使用具有相同配置且仅更改项目类型的0.6.0 GUI?

    谢谢。此致、

    Chris

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

    Chris、您好!

     在我启动开发板时、TPS25750 - BQ25798之间的通信如下:

    #TPS25750以隐式方式将数据发送到 BQ25798
    写入0x6B ACK 数据:0x10 0x80
    写入0x6B ACK 数据:0x14 0x1C
    写入0x6B ACK 数据:0x11 0x00
    写入0x6B ACK 数据:0x12 0x00
    写入0x6B ACK 数据:0x08 0x0A
    写入0x6B ACK 数据:0x09 0x01
    写入0x6B ACK 数据:0x01 0x03 0x48
    写入0x6B ACK 数据:0x03 0x00 0x64

    # MCU 解释性要求 TPS25750从此处向 BQ25798发送数据
    写入0x6B ACK 数据:0x48
    读取0x6B 确认数据:0x19
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x80
    写入0x6B ACK 数据:0x10 0x80
    写入0x6B ACK 数据:0x2E
    读取0x6B 确认数据:0x30
    写入0x6B ACK 数据:0x2E 0xB0


    我将电路板上的 TPS25750替换为 TPS25751、并且在启动电路板时 TPS25751 - BQ25798之间的通信如下所示:

    #TPS25751以隐式方式将数据发送到 BQ25798
    写入0x6B ACK 数据:0x01
    读取0x6B ACK 数据:0x03
    写入0x6B ACK 数据:0x10 0x00
    写入0x6B ACK 数据:0x10 0x00
    写入0x6B ACK 数据:0x14 0x1C
    写入0x6B ACK 数据:0x11 0x00
    写入0x6B ACK 数据:0x12 0x80
    写入0x6B ACK 数据:0x08 0x0A
    写入0x6B ACK 数据:0x09 0x01
    写入0x6B ACK 数据:0x01 0x03 0x48
    写入0x6B ACK 数据:0x03 0x00 0x82
    写入0x6B ACK 数据:0x0F 0x00
    写入0x6B ACK 数据:0x12 0x80
    写入0x6B ACK 数据:0x0F 0x00
    写入0x6B ACK 数据:0x0B 0x00
    写入0x6B ACK 数据:0x06 0x00
    写入0x6B ACK 数据:0x03 0x00

    # MCU 解释性要求 TPS25751从此处向 BQ25798发送数据
    写入0x6B ACK 数据:0x48
    读取0x6B 确认数据:0x19
    写入0x6B ACK 数据:0x10
    读取0x6B 确认数据:0x00
    写入0x6B ACK 数据:0x10 0x00
    写入0x6B ACK 数据:0x2E
    读取0x6B 确认数据:0x30
    写入0x6B ACK 数据:0x2E 0x80


    我使用 USBCPD 网络工具生成了 TPS25750和 TPS25751的图像、并且在创建此问题时在上面发布了配置 json 文件(两者都是相同的)。

    我还发现从 Web 应用程序生成的图像与桌面应用程序不同。  

    最棒的、Sai

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

    嗨、Sai、

    您是否能够说明您确定"不工作"的原因? 我想尝试在终端上测试 EVM、看看我是否可以复制该行为。

    谢谢。此致、

    Chris

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

    Chris、您好!

    感谢您的留言。

    我正在尝试使用我设计的 PCB 为7V 3.5Ah 电池充电、其中包含 TPS25751和 BQ25798。 我使用 USBCPD 工具生成了配置config.json文件(如下所示)、并使用以下值初始化 BQ 寄存器:

    config.json 

    "调查问卷":{
    "器件":"TPS25751"、
    "答案":[
    null、
    0、
    0、
    0、
    0、
    1、
    3、
    0、
    1、
    1、
    1、
    0、
    0、
    0、
    8.4、
    1、
    0.04、
    0.4、
    0
    ]、
    "VendorID":"0000"、
    "ProductID":"0000"、
    "版本":"1.0.0.2"
    }
    }

    BQ25798寄存器值:

    IPRECHG = 10 (因为步长为40mA)
    ITERM = 1 (因为步长为40mA)
    ICHG = 200 (因为步长为10mA)
    VINDPM = 190 (因为 步长为100mV)
    IINDPM = 70 (因为步长为10mA)

    在前一个设计中、我使用了 TPS25750。借助通过 USBCPD 工具生成的上述寄存器值和图像、我能够毫无问题地为电池充电。 但是、切换到 TPS25751后、系统无法使用这些配置。

    如果您需要更多详细信息来帮助复制行为、请告诉我。

    谢谢、此致、Sai

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

    Chris、您好!

    再需要注意的是、我们注意到 TPS25751会禁用 ACDRVx、因此 BQ25798无法检测来自 USB 的任何输入。 我们曾尝试明确启用该功能、但 TPS25751会经常禁用该功能。

    我们使用的是 ACDRV、因为 BQ25798有两个输入源。 我们遵循 EVM 中的设计。 如前所述、此设计可以与 TPS25750完美配合使用。

    谢谢、此致、Sai

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

    嗨、Sai、

    您是否认为 ACDRV 可能会妨碍正常运行? 我们似乎可以继续禁用 ACDRV 信号。

    我特别担心的是写入将 ACDRV_DIS 位置为有效的0x12。 由于控制 OTG 模式的 EN_OTG 位、TPS25751会定期更改此寄存器。 我们从不会尝试写入0x13、因此我不会太担心单个 ACDRV_EN 位。

    您是否曾希望 TPS25751使 ACDRV_DIS 位生效?

    我修改了配置、这样该位就永远不会被置为有效、并附加了可以加载到 EEPROM 中的完整闪存二进制文件。  

    e2e.ti.com/.../config_5F00_ACDRV_5F00_DIS_5F00_off.bin

    谢谢。此致、

    Chris

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

    Chris、您好!


    是的、我们能够确认这种强迫 REG_0x12至0x00 (即启用 ACDRV)正在解决此问题。 除了这一点,我们也在强制 REG_0x10至0x80 和  REG_0x0F 至0x82 .

    通过强制使用这3个寄存器、我们至少能够使用两个输入源为电池充电。 但我们不确定这将如何影响 BQ25798的长期工作、也就是强制执行这些寄存器。

    为了让 TPS25751配置 BQ25798、我们生成了一个具有以下配置的映像、并通过强制执行上述三个寄存器(即 Reg_0x12、Reg_0x10和 Reg_0x0F)来进行实验。

    config_noBQ.json:


    "调查问卷":{
    "器件":"TPS25751"、
    "答案":[
    null、
    1、
    0、
    0、
    0、
    1、
    3、
    0、
    1、
    1、
    1、
    0、
    0、
    0、
    8.4、
    1、
    0.04、
    0.4、
    0
    ]、
    "VendorID":"0000"、
    "ProductID":"0000"、
    "版本":"1.0.0.2"
    }
    }

    和、

    配置了 TPS25750且已配置 BQ25798的工作 PCB 在初始启动期间仅将以下值写入 BQ25798;

    写入0x6B ACK 数据:0x10 0x80
    写入0x6B ACK 数据:0x14 0x1C
    写入0x6B ACK 数据:0x11 0x00
    写入0x6B ACK 数据:0x12 0x00
    写入0x6B ACK 数据:0x08 0x0A
    写入0x6B ACK 数据:0x09 0x01
    写入0x6B ACK 数据:0x01 0x03 0x48
    写入0x6B ACK 数据:0x03 0x00 0x64

    而配置了 TPS25751和 BQ25798的新 PCB、则会在初始启动期间将以下值写入 BQ25798;

    写入0x6B ACK 数据:0x01
    读取0x6B ACK 数据:0x03
    写入0x6B ACK 数据:0x10 0x00
    写入0x6B ACK 数据:0x10 0x00
    写入0x6B ACK 数据:0x14 0x1C
    写入0x6B ACK 数据:0x11 0x00
    写入0x6B ACK 数据:0x12 0x80
    写入0x6B ACK 数据:0x08 0x0A
    写入0x6B ACK 数据:0x09 0x01
    写入0x6B ACK 数据:0x01 0x03 0x48
    写入0x6B ACK 数据:0x03 0x00 0x82
    写入0x6B ACK 数据:0x0F 0x00
    写入0x6B ACK 数据:0x12 0x80
    写入0x6B ACK 数据:0x0F 0x00
    写入0x6B ACK 数据:0x0B 0x00
    写入0x6B ACK 数据:0x06 0x00
    写入0x6B ACK 数据:0x03 0x00

    如上面突出显示的值所示;TPS25751使用 CONFIG.json 刷写了映像、会禁用 Reg_0x12中的 ACDRV 以及复位 Reg_0x10和 Reg_0x0F。

    现在、我们要询问 TPS25750和 TPS25751之间其他初始化方式有哪些不同。

    另外、请发送给我"。 c"文件代替二进制文件。

    谢谢、此致、Sai  
     

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

    嗨、Sai、

    请参阅随附的。 C 语言文件中。

    e2e.ti.com/.../config_5F00_ACDRV_5F00_DIS_5F00_off.c

    PD 控制器将覆盖寄存器10和0F、因此、您的写入可能无法正常工作。 包含。 C 文件主要禁用 ACDRV_DIS 置位。

    谢谢。此致、

    Chris

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

    Chris、您好!

    "CONFIG_ACDRV_DIS_OFF.c"未按要求运行。

    正如我在前一线程中说过的、

    我们使用以下配置生成了一个映像、并通过强制将 Reg_0x12、Reg_0x10和 Reg_0x0F 这三个寄存器分别强制设置为0x00、0x80和0x82来进行实验。 然后、我们能够使用两个输入源为电池充电。

    config_noBQ.json:


    "调查问卷":{
    "器件":"TPS25751"、
    "答案":[
    null、
    1、
    0、
    0、
    0、
    1、
    3、
    0、
    1、
    1、
    1、
    0、
    0、
    0、
    8.4、
    1、
    0.04、
    0.4、
    0
    ]、
    "VendorID":"0000"、
    "ProductID":"0000"、
    "版本":"1.0.0.2"
    }
    }

    谢谢、此致、Sai

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

    嗨、Sai、

    您能否提供您的系统(特别是充电架构)的方框图? 我想我对系统设置方式以及 PD 控制器 I2C 配置的预期感到困惑。

    在测试充电时、电源来自哪里? TPS25751是否连接了 USB-C PD 电源?

    当您说"电池充电的两个输入源"时、这两个电源是什么? 您如何管理哪一个提供电源?

    GUI 中提供的 PD 控制器配置旨在根据端口上的 PD 协商来控制电池充电器。 您要求的某些寄存器写入与我们对系统的期望相矛盾、不能轻易修改。

    具体来说、ENCHG 和 ENOTG 位由 PD 控制器根据 USB-C PD 状态(供电或受电)进行控制、并且不会考虑第二个 BQ 电源。 根据您的系统要求、我们可能无法通过 I2C 事件支持辅助源、可能需要 MCU 管理系统中的所有 I2C 通信。


    寄存器0x12:当前设置为0x80、但我共享的最新.c 文件不应再设置位7 (DIS ADC_DRV)。

     -在此模式下、我们主要控制 ENOTG 位、它取决于 USB-C 拉电流/灌电流状态。

    寄存器0x10:当前设置为0x00、您使用的是0x80。

     -这会将备用模式设置为80% VINDPM、这不会影响充电。

    寄存器0x0F:默认为0x00、即写入0x82

     -默认情况下我们禁用该寄存器,当 USB-C 设备检测到源设备已连接并进入灌入模式时,我们将对该寄存器进行配置以启用充电。 不过、我不确定写入0x82如何启用 CHG 模式。

    请告诉我您的系统及其要求、我们可以从中了解如何继续。

    谢谢。此致、

    Chris

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

    Chris、您好!

    请 在共享设计之前将帖子更改为私人。

    谢谢、此致、Sai

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

    嗨、Sai、

    我向您发送了朋友请求、请接受并通过私人消息共享设计。 很遗憾、我无法将该线程转换为私有线程。

    谢谢。此致、

    Chris