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.

[参考译文] Linux:BQ27220:无法基于 TI 监测计通信源代码 slua801.pdf 配置 BQ27220

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/634162/linux-bq27220-cannot-config-bq27220-based-on-ti-gauge-communication-source-code-slua801-pdf

主题中讨论的其他器件:BQ27220

工具/软件:Linux

各位专家:

我尝试根据 TI 电量监测计通信源代码(slua801.pdf)在 BQ27220中设置一些寄存器以实现最低功耗:
-)将 DSG 放松时间设置为零(0x922E)
-)禁用唤醒比较器(运行配置 A [WAKE_EN、WK_TH0、WK_TH1]全部为零)(0x9206)


I reference to BQ27220:Configuration not changed in device e2e.ti.com/.../2331011
但我仍然无法写入/更新 BQ27220配置。
是否有人会检查以下进程(或附加的文件函数 BQ27220_12())并向我提供如何实现正确的命令流的建议。

注意:随附的文件基于 TI Gauge 通信源代码(slua801.pdf)。 但它似乎不能直接用于 BQ27220??

谢谢。

===================

// BQ27220中的尝试示例 :器件中的配置未更改
//操作状态:0x (94)、位2 CFGUPDATE=0
//0x929F MACData (0x40 0x41)= 0xB80B = 3000mAh
//enter_cg_fupdate
nresult = gauge _control (pHandle、0x0090);
睡眠(2);
//操作状态:0x (494)、位2 CFGUPDATE=1
//ref 至 e2e.ti.com/.../2331011
BQ27220_WriteByte (0x3E、0x9f);//设计容量地址:0x929F
BQ27220_WriteByte (0x3F、0x92);
BQ27220_WriteByte (0x40、0x0f);//设计容量= 0x0FCB
BQ27220_WriteByte (0x41、0xcb);//
BQ27220_WriteByte (0x60、0xf4);// 0x9F + 0x92 + 0x0F + 0xCB = 0x020B。 0x020B 或0xFF = 0x0B。 CS = 0xFF - 0x0B = 0xF4
BQ27220_WriteByte (0x61、0x06);// len
//exit_CFGUPDATE
nresult = gauge _control (pHandle、0x0092);
睡眠(2);
//操作状态:0x (94)、位2 CFGUPDATE=0
//0x929F MACData (0x40 0x41)= 0xB80B = 3000mAh、没有变化。
===================
===================
//要将放电放松时间(0x922E)设置为0
//操作状态:0x (94)、位2 CFGUPDATE=0
//0x922E MACData (0x40 0x41)= 0x3C00 = 60s
//enter_cg_fupdate
nresult = gauge _control (pHandle、0x0090);
睡眠(2);
//操作状态:0x (494)、位2 CFGUPDATE=1
//ref 至 e2e.ti.com/.../2331011
BQ27220_WriteByte (0x3E、0x2E);
BQ27220_WriteByte (0x3F、0x92);
BQ27220_WriteByte (0x40、0x00);
BQ27220_WriteByte (0x41、0x00);
BQ27220_WriteByte (0x60、0x3F);// 0xFF -(0x2e + 0x92 + 0x00 + 0x00)或0xFF = 0x3F
BQ27220_WriteByte (0x61、0x06);
//exit_CFGUPDATE
nresult = gauge _control (pHandle、0x0092);
睡眠(2);
//操作状态:0x (94)、位2 CFGUPDATE=0
//0x922E MACData (0x40 0x41)= 0x3C00 = 60s、没有变化
===================

参考至: BQ27220:器件中的配置未更改 

谢谢

Hb

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 HB、
    我们将在周三或周三之前对此进行审查并回复您。
    谢谢
    Onyx
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的序列看起来正确。

    请在写入后读取校验和及其长度。 尝试在写入0x61和发出 EXIT_CFGUPDATE 命令之间添加延迟。

    您在写入时是否遇到任何意外的 nack? 您能否在 I2C 总线上记录实际信号?

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

    在尝试和错误后,我需要添加许多延迟来设置 configs。
    许多人知道如何减少延迟。

    printf ("=================== \n\n");
    printf (" enter_cgf_update \n\r");
    nresult = gauge _control (pHandle、0x0090);
    睡眠(2);
    电池容量= BQ27220_ReadByte (0x3A);
    电池电压 Hb = BQ27220_ReadByte (0x3B);
    电池电压=(uint32_t)(电池电压 HB*256)+(uint32_t)电池电压
    printf ("\t 操作状态:(%d) 0x (%x)\n\r\n、电池电压数字、电池电压数字);
    //========================================================
    BQ27220_WriteByte (0x3E、0x2E);
    睡眠(1);
    BQ27220_WriteByte (0x3F、0x92);
    睡眠(1);
    BQ27220_WriteByte (0x40、0x00);
    睡眠(1);
    BQ27220_WriteByte (0x41、0x00);
    睡眠(1);
    BQ27220_WriteByte (0x60、0x3F);// 0xFF -(0x2e + 0x92 + 0x00 + 0x00)或0xFF = 0x3F
    睡眠(1);
    BQ27220_WriteByte (0x61、0x06);
    睡眠(1);
    nresult = gauge _cmd_read (pHandle、0x60);
    printf ("\t gauge _cmd_read 校验和(0x60)= 0x%04X \n\r\n、nresult);
    睡眠(1);
    //========================================================
    printf (" exit_CFGUPDATE \n\r\n);
    nresult = gauge _control (pHandle、0x0092);
    //========================================================


    Hb