请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:BQ76952工具/软件:
您好、
我正在尝试根据 TRM 中的以下说明来实施完整性检查、以验证我读取的寄存器值(例如 CC_GAIN)是否是 AFE 实际发送的内容。

以下快照显示了基于我当前实施的通信序列、这会导致校验和匹配失败。 请您指出我的遗漏之处。
1.请求 CC_GAIN (0x91A8)

2.读取 4 字节数据

3.读取 0x60 处的校验和

以下是根据描述计算校验和的函数、“校验和是通过 0x3E、0x3F 以及缓冲区数据计算得出的、它不包括 0x60 和 0x61 中的校验和或长度。“ 突出显示的部分中突出显示的内容。 (参数`cmd`是写入 0x3E 和 0x3F 的内容。)
uint8_t checksum_with_cmd(const uint16_t cmd, const uint8_t * const p_buf, const uint8_t len)
{
uint8_t i;
uint8_t checksum = 0;
checksum += (uint8_t)(cmd & 0xff) ;
checksum += (uint8_t)(cmd >> 8 & 0xff);
for (i = 0; i < len; i++)
{
checksum += p_buf[i];
}
checksum = 0xff & ~checksum;
return checksum;
}
在此示例中、AFE 返回 0x2F、而我的`checksup_with_cmd ()`函数返回 0x99、其计算在 (0xA8、0x91、0x52、0x27、0x74 0x40)。
谢谢您、
李庆宰
