主题中讨论的其他器件:BQ27421-G1
验证我的校验和时遇到问题。 首先、我想说、根据使用的基准、执行校验和计算似乎有四种不同的方法。 到目前为止、我参考了以下文档并对每种方法执行了错误测试、但我被一个总体问题所阻止(校验和寄存器读取为零、除非我连续读取两次、在这种情况下我得到0xAC)。
- www.ti.com/.../slua790.pdf
- 《BQ27421-G1技术参考》
- BQ27421-G1快速入门指南
所有这些都同意、您需要独立计算校验和、然后将其写入校验和寄存器、然后再将块存储器数据推送到 ROM (我认为)。 但是、第一个参考似乎认为这个计算可以独立于之前的校验和寄存器值。 根据第一个参考、您可以简单地将块数据地址、写入的数据字节相加、反转和并将其写入寄存器。 我已经尝试过这种方法、但它不起作用。 这样我就可以尝试其他方法,这些方法包括获取先前的校验和寄存器值,将其反转,有时减去旧的数据字节值,然后对结果执行 mod(),然后... 等等。 另一种方法不涉及除法或余数。 它只是要求您反转旧的校验和寄存器值、减去旧的数据值字节、添加新的数据值字节、再次反转该数字、并将 LSB 写入校验和寄存器。
我将尝试这两种方法、但正如我所说的、我的校验和寄存器始终读为零、除非我连续两次读取(而一行两次并不意味着在同一 I2C 命令中读取两个数据库、 我的意思是在最后一个完成后立即对同一个寄存器执行 I2C 写入命令)、在这种情况下、我第二次获得0xAC。 根据我的理解、我应该期望接近0xE8的值、因为这是您对-G1B 的预期值。
还有人遇到过这种情况吗? 我可以确认我写入数据的速度不会太快或数据丢失、因为我的循环会根据我的监听器读取数据并正确发送数百次数据。
我还可以确认我的0x06标志为我提供了10011000、所以我在 CFGUPMODE 中、检测到电池、并且设置了 OCVTAKEN。
