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.

[参考译文] BQ27441EVM-G1A:BQ27441-G1A --AMARENDAR

Guru**** 1758495 points
Other Parts Discussed in Thread: BQ27441EVM-G1A, BQSTUDIO, BQ27200, GPCCHEM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/719995/bq27441evm-g1a-bq27441-g1a----amarendar

器件型号:BQ27441EVM-G1A
主题中讨论的其他器件: BQSTUDIOBQ27200bq27500GPCCHEM

你(们)好

我们使用的是 BQ27441EVM-G1A。

通过使用 EV2300板、我尝试校准我的单节(3.7V/5200mAh)电池。

当我打开 Battery Management Studio 1.3.54.1版本时...设备处于密封模式。 锁定符号能够在 IC 上看到、如此处所附图像中所示。  我尝试使用80008000命令解封。

但它在密封 和非密封模式之间切换。(锁定和解锁)。 无法测量偶数电池参数。 温度寄存器也显示非常高...260度...

请帮助任何人。 如何校准电池。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Amarendar、
    是否将10k 热敏电阻连接到 BIN 引脚。 从屏幕截图中可以看到、电池电压甚至未正确测量。

    确保您具有上述内容、如果仍有问题、请更换 IC。

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

    已连接10K 热敏电阻。 好的、我将更换 IC 并返回给您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Onyx、

    我旁边还有一个问题、
    如何将设计容量、设计能耗、锥率等电池参数永久存储到 FG 中。 从 FG 上拔下电源后、所有值均为默认值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Amarendar
    主机必须具有非易失性存储器、以便在断电时存储这些值、因为这是基于 ROM 的监测计。 请参阅器件的 QSG。 www.ti.com/.../sluuap7.pdf
    谢谢
    Onyx
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Onyx、

    谢谢你。
    我们一方再提出一个问题。

    我正在将 BQ27411-G1A 电池监控器移植到 Android 平台。 (我们使用的是 msm8909 Qualcomm 处理器)我具有支持 BQ27411-g1a 的 bq27xxx 驱动程序源代码。 需要有关在.dtsi 中添加节点的帮助、计划通过 I2C 映射器件。

    请提供器件树源代码或任何参考文档以帮助实现该代码。

    已成功注册驱动程序、但正在持续进行以下调试。

    外壳@msm8909:/$ dmesg | grep battery*
    [0.360130]电池:batterydata_init:创建电池数据设备!
    [4.225815] bq27x00-battery 5-0055:支持版本 启用1.2.0
    [4.231474] bq27x00-battery 5-0055:电池未校准! 忽略容量值
    [4.267607] power_supply bq27x00-battery-0:driver failed to report `charge _full _design' property:-107
    [5.542997] of _batterydata_read_data:加载了钯_1500mAh
    [7.107573] POWER_SUPPLY bq27x00-battery-0:driver failed to report `CHARGE_FULL_design' property:-107
    [11.206674] power_supply bq27x00-battery-0:driver failed to report `charge _full _design' property:-107

    请帮助您将 DTS 参数传递到内核源代码...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Amarendar、
    我将请我的同事、他是一名软件专家。 他会回来。
    谢谢
    Onyx
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此源代码用作 监测计驱动器的示例代码、必须根据特定平台和 Linux 版本进行调整。

    驱动程序树源文件 依赖于平台和 Linux 版本 、遗憾的是、我们没有关于适用于您的平台和 Linux 版本的 DTS 的信息。

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

    您好 、Onyx、

    我能够读取电池参数、 我已按照以下步骤操作。

    我通过 Bqstudio 更新了电池参数、如设计容量、设计能耗、终止电压和锥率。

    然后、在芯片断电的情况下、我启动了我的器件。 我能够读取电池参数。 车床显示正确的值。

    这是基于 ROM 的猜测、因此我能够在探测器件时在内核中加载以下值。 我能够在 dmesg 中读取这些参数。

    但读取时电池参数显示错误。。 就像电池的百分比...

    静态结构 dm_reg bq274xx_dm_regs[]={

           //{64、2、1、0x0F}、    //* Op Config B *
           {82、0、2、16384}、      /* Qmax */ //默认值
           {82、5、1、0x81}、      /*加载选择*/
           {82、10、2、5200}、     /*设计容量*/
           {82、12、2、19240}、     /*设计能源*/
           {82、16、2、3400}、     /*终止电压*/
           {82、27、2、87}、      /*锥度率*/
    };

    我的探头功能如下所示。

    请在这方面帮助我。

    您好 、Onyx、

    我能够读取电池参数、 我已按照以下步骤操作。

    我通过 Bqstudio 更新了电池参数、如设计容量、设计能耗、终止电压和锥率。

    然后、在芯片断电的情况下、我启动了我的器件。 我能够读取电池参数。 车床显示正确的值。

    唯一的问题是基于 ROM 的分页、以便在探测器件时能够在内核中加载以下值。 我能够在 dmesg 中读取这些参数。

    但电池参数显示错误。

    静态结构 dm_reg bq274xx_dm_regs[]={

           //{64、2、1、0x0F}、    //* Op Config B *
           {82、0、2、16384}、      /* Qmax */
           {82、5、1、0x81}、      /*加载选择*/
           {82、10、2、5200}、     /*设计容量*/
           {82、12、2、19240}、     /*设计能源*/
           {82、16、2、3400}、     /*终止电压*/
           {82、27、2、87}、      /*锥度率*/
    };

    /* bq274xx 寄存器*/
    静态 u8 bq274xx_regs[NUM_regs]={
           0x00、  /*控制     */
           0x02、  /* TEMP        */
           0x1E、  /* INT TEMP    */
           0x04、  /*伏特        */
           0x10、  /* AVG 电流    */
           0x06、  /*标志       */
           0xFF、  /* TTE - NA    */
           0xFF、  /* TTF - NA    */
           0xFF、  /* tes - nA   */
           0xFF、  /* TTECP - NA  */
           0x08、  /* NAC         */
           0x0E、  /* FCC         */
           0xFF、  /* CYCT - NA   */
           0xFF、  /* AE - NA     */
           0x1C、  /* SOC         */
           0x3C、  /* DCAP - NA   */
           0x18、  /* AP          */
    };

    我的探头功能如下所示。

    请在这方面帮助我。

    静态 int bq27x00_battery_probe (struct i2c_client *客户端、
                                    const 结构 i2c_device_id *id)

           char *name;
           struct bq27x00_device_info *di;
           int num;
           int retval = 0;
           U8 *寄存器;

           /*获取新电池设备的新 ID */
           /*retval = IDR_PRE_Get (&batter_id、GFP_kernel);
           如果(retval = 0)
                   return -ENOMEM;
           mutex_lock (&battery_mutex);
           RetVal = IDR_GET_NEW (&batter_id、client、&num);
           互斥锁(&battery_mutex);
           如果(retval < 0)
                   返回评估;
           *
           /*获取新电池设备的新 ID */
           mutex_lock (&battery_mutex);
           num = IDR_alloc (&battery_id、client、0、0、GFP_kernel);
           互斥锁(&battery_mutex);
           如果(num < 0)
                   返回 num;

           name = kasprintf (gfp_kernel、"%s"、id->name、num);
           如果(!name){
                   dev_err (&client->dev、"分配设备名称失败\n");
                   RetVal =-ENOMEM;
                   转至 batt_failed_1;
           }

           di = kzalloc (sizeof (*di)、gfp_kernel);

     如果(!di){
                   dev_err (&client->dev、"分配设备信息数据失败\n");
                   RetVal =-ENOMEM;
                   转至 batt_failed_2;
           }

           di->id = num;
           di->dev =&client->dev;
           di->chip = id->driver_data;
           di->bat.name ="battery";//name;
           di->bus.read =&bq27xxx_read_i2c;
           di->bus.write =&bq27xxx_write_i2c;
           di->bus.blk_read = bq27xxx_read_i2c_blk;
           di->bus.bblk_write = bq27xxx_write_i2c_blk;
           di->dm_regs = NULL;
           di->dm_regs_count = 0;

           IF (di->chip =BQ27200)
                   regs = bq27200_regs;
           否则(di->chip =bq27500)
                   regs = bq27500_regs;
           否则(di->chip =BQ27520)
                   regs = bq27520_regs;
           否则(di->chip =BQ2753X)
                   regs = bq2753x_regs;
           否则、如果(di->chip =BQ274XX){
                   regs = bq274xx_regs;
                   di->dm_regs = bq274xx_dm_regs;
                   di->dm_regs_count = array_size (bq274xx_dm_regs);
           PR_INFO ("\nDI->dm_regs[1]=%d、di->dm_regs_count =%d、di->dm_regs[1]、di->dm_regs_count);
           PR_INFO ("\nDI->dm_regs[2]=%d、di->dm_regs_count =%d、di->dm_regs[2]、di->dm_regs_count);
           PR_INFO ("\nDI->dm_regs[3]=%d、di->dm_regs_count =%d、di->dm_regs[3]、di->dm_regs_count);
           PR_INFO ("\nDI->dm_regs[4]=%d、di->dm_regs_count =%d、di->dm_regs[4]、di->dm_regs_count);
           PR_INFO ("\nDI->dm_regs[5]=%d、di->dm_regs_count =%d、di->dm_regs[5]、di->dm_regs_count);
           PR_INFO ("\nDI->dm_regs[6]=%d、di->dm_regs_count =%d、di->dm_regs[6]、di->dm_regs_count);
      }
           否则、如果(di->chip =BQ276XX){
                   /*命令与 bq274xx 相同、只有 DM 不同*/
                   regs = bq276xx_regs;
                   di->dm_regs = bq276xx_dm_regs;
                   di->dm_regs_count = array_size (bq276xx_dm_regs);
           }否则{
                   dev_err (&client->dev、
                           "意外气体 gague:%d\n"、di->chip);
                   regs = bq27520_regs;
           }
           PR_INFO ("di->id =%d、di->chip =%d、bat.name =%s\n"、di->id、di->chip、 名称);
           memcpy (di->regs、regs、NUM_regs);

           DI->FW_VER= bq27x00_battery_read_fw_version (di);
           DEV_INFO (&CLIENT_>DEV,“Gas Guage FW version is 0x%04x\n",di->FW_VER);

           RetVal = bq27x00_powersupply_init (di);
           如果(重新评估)
                   转至 batt_failed_3;

           /*在大约1分钟后安排轮询*/
           schedule_Delayed_work (&di->work、60 * Hz);

           I2C_SET_clientdata (client、di);
           RetVal = sysfs_create_group (&client->dev.kobj、&bq27x00_attr_group);
           如果(重新评估)
                   dev_err (&client->dev、"无法创建 sysfs 文件\n");

           返回0;

    BATT_FAILED_3:

     kfre(di);
    BATT_FAILED_2:
           kfree(名字);
    BATT_FAILED_1:
           mutex_lock (&battery_mutex);
           IDR_REMOVE (&batter_id、num);
           互斥锁(&battery_mutex);

           返回评估;



                                                       

     

     

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

    SOC 是否是唯一读取错误的参数? 您是否通过了 gpcchem 中列出的测试来运行电池、以确保您使用的电量监测计与您的电池单元匹配良好。 这是一个 ROM 监测计、具有有限的化学 ID 以及它可以支持的有限电池。

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

    我没有给你、

    请详尽说明。
    我的问题是、在为器件加电时、我无法更新电池参数、例如设计容量、设计能耗、终止电压和锥率。 引导内核加载电池参数时、我使用以下结构和值。 电量监测计。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Onyx、

    我没有给你、

    请详尽说明。
    我的问题是、在为器件加电时、我无法更新电池参数、例如设计容量、设计能耗、终止电压和锥率。 引导内核加载电池参数时、我使用以下结构和值。 电量监测计。

    静态结构 dm_reg bq274xx_dm_regs[]={

    //{64、2、1、0x0F}、 /* Op Config B */
    {82、0、2、16384}、 /* Qmax */
    {82、5、1、0x81}、 /*加载选择*/
    {82、10、2、5200}、 /*设计容量*/
    {82、12、2、19240}、 /*设计能源*/
    {82、16、2、3400}、 /*终止电压*/
    {82、27、2、87}、 /*锥度率*/
    };
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    TI 不维护 Linux 代码、因此终端系统的驱动程序开发人员可能需要相应地更改该代码。

    驱动程序需要执行以下任务:

    *发出 SET_CFGUPDATE 子命令(将0x13 0x00写入 I2C 寄存器0x00和0x01)

    *等待标志中的 CFGUPMODE 变为1 (从 I2C 寄存器0x06定期(每秒一次)读取并检查位4是否置位)

    *根据您的列表编写子类(例如64、82)。 您的代码(或现有的驱动程序)必须执行数据存储器访问序列(同时计算校验和),该序列来自 http://www.ti.com/lit/ug/sluuac9/sluuac9.pdf 第3.1节,步骤4至11。

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

    e2e.ti.com/.../bq27x00_5F00_battery.cHiDominik、

    正如您所说的、我遵循了与 bq27441第3.1节 TRM 手册相同的程序...但当我断电时、燃油表再次加载其默认参数...

    请找到我的完整内核源代码,并帮助我们进一步...

    以及如何降低燃油回流速率...这意味着当我取下充电器时,它还显示充电状态...持续3分钟(不是每次...)  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amarendar、
    您无法切断电源。 该监测计没有闪存。 如果断电、监测计将进行 POR 并重置为默认值。
    谢谢
    Onyx