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.

[参考译文] BQ76952:读取 0x60 作为校验和

Guru**** 2466550 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1552061/bq76952-reading-0x60-for-checksum

器件型号: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)。

谢谢您、

李庆宰

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

    原始编写器更新:

    因此、我找到了线程 BQ76972:0x60 校验和和 0x61 数据长度、其中它表示校验和是用于写入而不是读取。 但是、这与 TRM 的内容相矛盾:

    哪一项是真的? 我的方法似乎有什么问题?