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.

[参考译文] BQ27426:对 BlockDataChecksum 进行了澄清

Guru**** 2460850 points
Other Parts Discussed in Thread: BQ27426

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/567045/bq27426-clarification-on-blockdatachecksum

器件型号:BQ27426

您好!


我正在尝试使 BQ27426的 RAM 保存/恢复代码正常工作(特别是、我尝试将状态子类和 Ra 子类存储到非易失性存储器、然后将它们写回器件)。 我认为该过程工作正常、但我仍然不确定校验和的工作方式。

技术参考说明 BlockDataChecksum 保存了当前可寻址的32个字节总和的 LSB、并且我应该在写入以将数据传输到 RAM 后写入校验和的补码(255 -(校验和& 0xFF)。 该文档中有一些示例、展示了如何通过读取旧校验和并读取将要替换的旧数据来计算新校验和、但如果可能、我希望尽量避免这种情况。 我还想通过计算我的末尾的校验和来检查我读取的数据是否正确

我特别不确定这一切是如何工作的、因为 State 子类和 Ra 子类的长度都小于32字节(分别为31和30字节)。 我是否应该添加填充和写入/读取整个32个字节? 在设置子类和偏移后、我是否需要等待一段时间才能读取数据并计算校验和、或者我是否可以立即开始读取/写入? 现在、我将在设置子类和偏移量、计算校验和(通过添加所有字节然后获取 LSB)之后立即读取状态子类的31个字节、并且它与 BlockDataChecksum 的值不匹配。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最简单的方法是将整个32字节块读入本地缓冲区、修改该缓冲区中的数据、计算整个缓冲区的校验和、将所有32个字节写回、然后写入校验和。

    子类可能具有私有的附加参数(TRM 中未记录)、因此如果要计算整个块的校验和、您将始终必须读取整个块。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    按"块"、您是指32字节吗?

    我不修改子类的内容、只是定期将其存储在非易失性存储器中、然后在监测计发生功率损耗时(如果 ITPOR 位置位)将其恢复。 在这种情况下、我是否可以简单地假设子类的实际长度实际上是32个(一整数个块)的倍数、那么32个字节表示状态、32个字节表示 Ra、并读取/写入整个32个字节? 或者、我应该读取整个块、只存储/替换技术参考中记录的字节、计算整个块的校验和、然后写回?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、整个块始终为32字节。

    子类=命令0x3E
    块#=命令0x3F

    子类可以是32字节的倍数。 如果您只想存储子类、我应该从该子类中读取所有块(块数= TRM / 32中的最高偏移量)、当恢复子类时、编写块(以及每个块的校验和)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢 Dominik。

    最后一个问题、虽然有一点不相关:注意到 ITPOR 位已设置、并且恢复了先前保存的状态表和 Ra 表后、我是否仍然需要设置正确的 Chem ID? 如果是、我是在更新表之前还是之后执行该操作是否重要? 我很好奇、因为 TRM 指出更改 Chem ID 会更新 RAM 值。 在更改 Chem ID 后、我是否需要等待一位才能恢复其余值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    上电复位后、请在(!)之前发送命令以选择 ChemID 更新 Ra 和状态子类。 监测计必须从 ROM 中提取正确的化学表、以便如果您未发送 ChemID 命令、监测计将使用默认表、该表(假设您不使用默认的 Chemistry)将与您的电池不兼容。