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.

[参考译文] BQ27Z561-R2:Linux i2c 驱动程序获得的状态寄存器 (BatteryStatus) 有时为 0xFFFF

Guru**** 2466550 points
Other Parts Discussed in Thread: BQ27Z561, BQSTUDIO

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1549605/bq27z561-r2-the-status-register-batterystatus-got-by-linux-i2c-driver-is-0xffff-sometimes

器件型号:BQ27Z561-R2
主题中讨论的其他器件:BQ27Z561BQSTUDIO

工具/软件:

您好、  

我们的产品使用 BQ27z561 作为电量监测计、电量监测计通过 I2C 连接到 CPU、并且我们的操作系统为 Linux(内核 5.15)。

在测试期间、我们使用 I2C 驱动程序(请参阅下面的行)获取寄存器 BatteryStatus () 中的数据。 大多数情况下、该值 是 正确的、例如 0xC0、但有时、我们得到的数据不正确、例如 0xFFFF。

     cache.flags = bq27xxx_read (di、BQ27XXX_REG_flags、has_singe_flag);
BTW、有时  bq27xxx_battery_read_soc () 读取的容量比 100 大得多。
这些异常值将很快更新为正确的值。
我的问题是、为什么有时从 寄存器 BatteryStatus () 获取的容量和数据不正确? 您以前见过这种情况吗?
此致、
Jerry Lv
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jerry、

    此问题已分配、并将在可能的情况下进行审核。

    谢谢您、
    Alan

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

    您好:  

    您多久轮询一次寄存器? 寄存器每秒仅更新一次。 此外、I2C 总线上是否还有其他可能导致冲突的因素?  

    此致、  

    Jonny。  

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

    尊敬的 Jonny:

    感谢您的反馈。

    我正在进行应力测试。 我在内核中修改了一些代码、当应用空间尝试获取任何电量计属性时、它将首先读取状态寄存器。
    同时、我将 BQstudio 连接到我们器件中的测量仪表 I2C 接口。
    然后内核中的一些调试信息如下所示(注意红线):

    Aug 08 10:02:42 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:02:42 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:02:44 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:02:45 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    08 年 8 月 10:03:08 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:===bq27xxx_battery_update reg status=65535 (0xFFFF)、capacity=7995
    Aug 08 10:03:08 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:03:08 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    08 年 8 月 10:03:28 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:===bq27xxx_battery_update reg status=65535 (0xFFFF)、capacity=59
    Aug 08 10:03:38 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    08 年 8 月 10:03:38 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:===bq27xxx_battery_update reg status=65535 (0xFFFF)、capacity=187
    Aug 08 10:04:08 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:04:08 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:04:08 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:04:09 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    08 年 8 月 10:04:09 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:===bq27xxx_battery_update reg status=65535 (0xFFFF)、capacity=53243
    08 年 8 月 10:04:09 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:===bq27xxx_battery_update reg status=65535 (0xFFFF)、capacity=59
    Aug 08 10:04:28 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:04:28 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:04:28 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    Aug 08 10:04:28 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:++bq27xxx_battery_i2c_read err、EBUSY、retry……
    08 年 8 月 10:04:29 Axis-b8a44f22e42d 内核:bq27xxx-battery 0-0055:===bq27xxx_battery_update reg status=65535 (0xFFFF)、capacity=59

    我们有时可以看到状态寄存器显示 0xFFFF、容量实际值为 59%、但有时报告的容量远大于 100%。

    我认为寄存器仅 以 1Hz 的频率更新是可以的。  但是、即使我们以高得多的频率读取寄存器、I2C 也应报告未更改的值、或在发生一些冲突时报告 EBUSY、但不应报告无效值 0xFFFF。

    此致、
    Jerry Lv

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

    您好:  

    不建议以超过 1 秒的速度轮询寄存器。 I2C 总线上还有其他东西吗?  

    此致、  

    Jonny。  

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

    您好、  

    I2C 总线上还有其他一些器件、例如充电器和一些 LED、但其他器件的 I2C 通信不是那么忙。
    我认为最重要的影响是通过飞线连接的 BQstudio、一旦连接了 BQstudio、这些错误状态就会频繁发生。

    如果我们以超过 1 秒的速度轮询寄存器、会有什么副作用?

    BR、
    Jerry  

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

    您好:  

    寄存器每秒仅更新一次、因此如果轮询速度超过 1 秒、您将获得相同的信息。 您看到的这种行为可能是由于总线上的连接噪声或冲突造成的。 您是否能够涵盖通信线路?  

    此致、  

    Jonny。