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计算校验和 时出现错误的校验和? 我是否确实再次读取了错误的寄存器???
此致、
公里/小时