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.

[参考译文] BQ25890:充电终止行为:当 IBAT 仍为>1A 时、Chrg_STAT 变为2'B11

Guru**** 2493565 points
Other Parts Discussed in Thread: BQ25890

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/710542/bq25890-charge-termination-behaviour-chrg_stat-goes-to-2-b11-when-ibat-is-still-1a

器件型号:BQ25890

你(们)好。

我正在开发一款使用微控制器通过 I2C 配置的 BQ25890为4.2V 锂电池充电的产品。 我看到的是电池没有完成饱和充电。 相反、BQ25890会报告充电周期已完成、方法是将 CHRG_STAT 设置为2'B11、此时它仍在提供大量电流。

我可以通过 UART 连接到微控制器、也可以打印寄存器读取和写入。 写入报告为十六进制值列表(每个寄存器一个)。 充电时的原始 UART 输出为:

W:0x00 0x66 0x06 0x40 0x5a 0x27 0x10 0x5e

这是通过 I2C 写入的8个字节。 第一个是地址、因此这表示:

  1. 将 REG00设置为0x66 (EN_HIZ=0;EN_ILIM=1;IINLIM=2A)
  2. 将 REG01设置为0x06 (BHOT=0、BCOLD=0、VINDPM_OS=600mV)
  3. 将 REG02设置为0x40 (CONV_START=0、CONV_RATE = 1、BOOST_FREQ=0、ICO_EN=HVDCP_EN=MAXC_EN=FORCE_DPDM=AUTO_DPDM_EN=0)
  4. 将 REG03设置为0x5a (BAT_LOADEN=0、WD_RST=1、OTG_CONFIG=0、CHG_CONFIG=1、SYS_MIN=3.5V)
  5. 将 REG04设置为0x27 (EN_PUMPX=0、ICHG=2.496A)
  6. 将 REG05设置为0x10 (IPRECHG=128mA、ITERM=64mA)
  7. 将 REG06设置为0x5e (VREG=4.208、BATLOWV=1、VRECHG=0)

该配置告诉充电器在没有巧妙 USB 握手的情况下以高达2.5A 的输入电流充电至4.2V 的电压(因为实际上有一个12V 大电源为整个批次供电)。

除了写入配置数据、固件还读取状态信息(REG0B 至 REG12)并通过 UART 转储。 以下是充电完成前通过 UART 写入的最后一个读数:

R:0x16 0x00 0x52 0x5f 0x60 0x33 0xdc 0x1a

从 REG0B 开始、这意味着:

  1. REG0B=0x16 (CHRG_STAT=2'B10、PG_STAT=1)
  2. REG0C=0x00 (未报告故障)
  3. REG0D=0x52 (FORCE_VINDPM=0、VINDPM=4.4V)
  4. REG0E=0x5f (THERM_STAT=0、BATT=4.204V)
  5. REG0F=0x60 (SYSV=4.224V)
  6. REG10=0x33 (TSPCT=23.715%)
  7. REG11=0xdc (VBUS_GD=1、VBUSV=11.8V)
  8. REG12=0x1A (ICHGR=1.3A)

固件旨在写入此"请充电"配置、直到它看到 CHRG_STAT 转到2'B11 (这意味着充电已完成)、此时 LED 变为绿色、向用户报告我们已完成。 固件仍会继续写入 BQ25890 (以避免看门狗跳闸)、但现在会将 CHG_CONFIG=0设置为禁用充电。

遗憾的是、使用此设置后、充电会在充电完成之前停止:我的工作台电源显示我们仍在提供较大的充电电流。 查看通过 UART 报告的寄存器内容(见上文)、我们可以看到、当 ICHRGR=1.3A 时、充电完成、对于终止电流(!)来说、这是相当高的。

我更改了代码、以便在充电完成时、我们不会对芯片执行任何写入操作、并让充电器运行更长时间、而不会通知它禁用充电。 这是生成的 UART 跟踪、大约每秒条目一次。 我已在右侧添加了注释。

R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x33 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x33 0xdc 0x1a
R:0x1E 0x00 0x52 0x5f 0x60 0x33 0xDE 0x00 // CHRG_STAT=2'B11:我们已经完成了充电?
R:0x1E 0x00 0x52 0x58 0x64 0x33 0xDE 0x00
R:0x1E 0x00 0x52 0x58 0x64 0x33 0xDE 0x00
R:0x1E 0x00 0x52 0x58 0x5d 0x33 0xDE 0x00
R:0x1E 0x00 0x52 0x58 0x5d 0x34 0xDE 0x00
R:0x1E 0x00 0x52 0x58 0x5b 0x34 0xDE 0x00
R:0x1E 0x00 0x52 0x58 0x5b 0x34 0xDE 0x00
R:0x16 0x00 0x52 0x58 0x5b 0x34 0xDE 0x00
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1b //哦,我们没有! 让我们再充电一些。
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1b
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1b
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1b
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x1E 0x00 0x52 0x5f 0x60 0x33 0xDE 0x00 //现在我们完成了吗?
R:0x1E 0x00 0x52 0x58 0x63 0x33 0xDE 0x00
R:0x16 0x00 0x52 0x58 0x5c 0x33 0xDE 0x00
R:0x1E 0x00 0x52 0x58 0x5c 0x33 0xDE 0x00
R:0x1E 0x00 0x52 0x58 0x5b 0x34 0xDE 0x00
R:0x1E 0x00 0x52 0x58 0x5c 0x34 0xDE 0x00
R:0x16 0x00 0x52 0x58 0x5b 0x34 0xDE 0x00
R:0x16 0x00 0x52 0x58 0x5b 0x34 0xDE 0x00
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1b //明显不……
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1b
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1b
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x35 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x1a
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19
R:0x16 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19
R:0x1E 0x00 0x52 0x5f 0x60 0x34 0xdc 0x19

您可以看到充电状态开关打开和关闭。 CHRG_STAT 寄存器在每行的第一个十六进制值中可见:当十六进制值为0x16时为2'B10 (这意味着快速充电)、当十六进制值为0x1E 时为2'B11 (这意味着充电完成)。

有人能不能建议为什么会发生这种循环行为? 以及我的固件如何区分"我正在从充电中中断、因为 "和"我们真的完成了。 告诉用户。"?

非常感谢、

鲁珀特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅位于 github.com/.../bq2589x 上的 bq2589x 充电器示例驱动程序。 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经了解了这一点、还了解了主线 Linux 内核中的驱动程序。 我还没有设法确定他们为什么工作正常。 我的问题包含的配置和状态寄存器跟踪与数据表中的预期不符。 如果有人能解释一下它们的含义、我将不胜感激。

    尤其是、为什么 IC 在电池充满电之前停止充电? 如果有其他一些可帮助诊断的配置/状态寄存器、我可以修补固件并提供更多信息进行响应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们以前没有观察到任何 CHRG_STAT 寄存器错误和充电器终止错误。 您能否提供详细的测试程序来重复您描述的行为? 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因为我们一段时间没有听到任何回声。 此线程被视为已关闭。 谢谢!