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.

[参考译文] BQ27510-G3:校验和问题

Guru**** 2494635 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/714815/bq27510-g3-issue-with-checksum

器件型号:BQ27510-G3

大家好、

我们的一位客户使用 BQ27510-G3并在校验和中获取错误、所附的是所遵循的编程序列。 您能不能再回顾一下这一点、并提供专家意见方面的帮助。

e2e.ti.com/.../Writing-into-BQ27510-data-flash.docx

此致、Shinu Mathew。

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

    在步骤6中、您将哪些数据写入0x42?  使用您的设置(子类0x22、块0)、位置 0x42和0x43保持充电电压(采用大端字节序格式)。 您的文档仅显示 I2C->WRITE (0x42)、但不显示实际值。

    步骤7写入0x68、但这是数据还是地址不清楚? 假设它是数据、步骤6和步骤7意味着您需要写入充电电压。 如果我们要将其设置为4200mV (=0x1068)、则必须执行:

    I2C->WRITE (0x42、0x10);MSB 在前

    I2C->WRITE (0x43、0x68);LSB 最后

    在写入这两个值之前、您应该读取旧值(从地址0x42和0x43读取)和旧校验和(从地址0x60读取)。 您需要这些值来计算新的校验和。

    在写入这两个值后、我们必须计算校验和:

    temp = mod (255–old_checksum–old_msb– old_LSB、256)

    new_checksum = 255–mod (temp + new_msb (0x10) + new_LSB (0x68)、256)

    然后、您必须将 new_checksum 写入0x60。 如果正确、监测计将 ACK 并将新数据从其临时缓冲区复制到其工作数据存储器中。

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

    感谢您的回复。

    是的、在步骤7中、我们写入的实际值为0x68、读取的是旧值、根据旧值、我们仅计算了新校验和、并在0x60位置写入了新校验和。 但没有变化。

    此问题的可能原因是什么。

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

    如果测量仪表与整个块的预期校验和不匹配、则不会获取新的校验和。 因此计算校验和时出错。

    请附上通信协议的更正版本(根据我之前的回复)、我将分析您的流程。

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

    尝试了两到三种方法来计算校验和以进行交叉验证、在所有方法中都得到相同的答案、

    在第一种方法中、尝试使用公式、使用旧校验和(如 TRM 中给出的)计算新校验和、
    在第2种方法中、从整个块(地址从0x40到0x5F)读取数据、然后对其进行求和(假设求和的 LSB 为 x)、因此校验和为(FF - x)、然后替换地址中的值、然后计算校验和。

    对于这两种方法、新校验和得到了相同的答案。

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

    请添加准确的序列、我将对其进行分析。