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.

[参考译文] BQ27220:BQ27220校验和计算

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/615263/bq27220-bq27220-checksum-calculation

器件型号:BQ27220

BQ27220校验和计算:

我尝试使用外部 MCU 写入 I2C 命令、将 BQ27220的设计容量从默认的3000mAh 设置为13200mAh、以更新 BQ27220的 RAM 区域。 但是、当我按照 bq27220技术参考手册(sluubd4.pdf) www.ti.com/.../sluubd4第6章 TRM 中描述的16个步骤操作时。 但是 、如果我按照其中的步骤操作、则回读数据是错误的。

然后、我在这里找到了论坛讨论:Bq27220:无法更新数据存储器参数 e2e.ti.com/.../585243
我按照以下所述的步骤操作:

“更新:使其正常工作! 示例中存在错误、在步骤8之后、您需要重复步骤5和6、否则参数地址中存在0x0200偏移量。 当您读取 dataLen 时、地址指针会改变、您不再处于正确的位置。 用于写入数据存储器的 TI 文档非常差、很难理解其工作原理、因为"3.1访问数据存储器"一段是错误的、只是其他电池电量监测计的复制/粘贴..."

这次、我让它演示了13200mAH 的正确设计容量。 我希望 TI 能改进 bq27220技术参考手册、以便在示例中显示正确的步骤。

 我遇到的另一个问题是校验和计算:
我对校验和计算有点困惑。 到目前为止、我找到了两种计算校验和的方法:
方法1)校验和为(255–x)、其中 x 是每个字节上的 BlockData()(0x40至0x5F)的8位总和
基准。
方法2)计算新校验和的快速方法使用数据
使用新旧数据求和字节替换方法。
请参阅所示方法的代码。
temp = mod (255–old_Chksum–old_DC_MSB–old_DC_LSB、256);
new_Chksum = 255–mod (temp + 0x04 + 0Xb0、256);

我使用这两种方法来计算校验和、但我不明白为什么我使用这两种方法来获得不同的校验和。 我不确定它们是否应该最终得到相同的校验和。 是否有专家对此进行确认? 让我来向您展示我的计算方法:

方法1:

这是 blockData (0x40到0x5F):0b B8 03 84 0e 74 00 64 0e 9f 00 95 03 63 0f be 01 3c 09 00 0b D7 01 0d 39 01 0d AD 01 10 4D

我得到校验和= 0xD2、在寄存器0x60读取的校验和为0xA1。 我不理解如何计算该校验和。

方法2:

我使用方法2计算校验和、结果与0xA1匹配。 [ temp==MOD (((255-161-11-184)、256)= 155、new checkS=255 -[MOD ((155+51+144)、256)]= 255 -94 =161 (0xA1)、这与我从寄存器0x60中读取的内容相匹配。

我的问题是、为什么使用方法1计算校验和 时出现错误的校验和? 我是否确实再次读取了错误的寄存器???

此致、

公里/小时

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    计算校验和时、必须包含块地址。 这就是您在方法1中未获得正确校验和的原因。

    以下是更新参数的直接示例:
    更新特定参数的一种简单方法是以下序列:

    1.进入 CFG_UPDATE 模式
    2.将地址和参数数据写入0x3E+(自动递增)
    3、计算校验和:0xFF -(地址和数据之和)或0xFF
    4、将校验和写入0x60、将总长度(地址+参数数据+校验和+长度)写入0x61
    5. Exite CFG_UPDATE 模式

    示例:将 OT Chg 时间设置为8秒:
    OT Chg 时间地址= 0x9234
    数据= 0x08

    2.将0x34 0x92 0x08写入从0x3E 开始的寄存器
    校验和= 0xFF -(0x34 + 0x92 + 0x08)或0xFF = 0xFF - 0xCE = 0x31
    4、将0x31写入0x60、将0x05 (=2字节地址、1字节数据、1字节校验和、1字节长度)写入0x61
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dominik:

    谢谢、这清楚地表明了我的疑问。

    非常有帮助

    此致、
    公里/小时

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

    我能否与您确认以下事项:
    1.现在、我能够正确写入设计容量寄存器。 但是,在经过许多周期的充满电至完全放电后,FCC [FullChargeCapacity()]仍读取默认值3000mAh。

    BQ27220似乎无法检测电池何时充满电或电量耗尽。 我是否遗漏了任何步骤?
    注意:终端用户不想使用 OTP 方法。

    此致、
    公里/小时