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.

[参考译文] BQ76920:CRC 生成和 I2C 从器件地址

Guru**** 2537350 points
Other Parts Discussed in Thread: BQ76920, BQ76952

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/937558/bq76920-crc-generation-and-i2c-slave-addess

器件型号:BQ76920
主题中讨论的其他器件: BQ76952

你(们)好  

我在 sluc583.zip 文件中找到了您的示例代码:bq769x0_I2C_SAMPLE_CODE_With CRC

我的问题是:为什么在计算 CRC 字节之前 I2C 从地址乘以2? 例如:

int I2CWriteRegisterByteWithCRC (unsigned char I2CSlaveAddress、unsigned char 寄存器、unsigned char 数据)

unsigned char DataBuffer[4];
unsigned int SentByte = 0;

DataBuffer[0]= I2CSlaveAddress << 1;  ?????
DataBuffer[1]=寄存器;
DataBuffer[2]=数据;
DataBuffer[3]= CRC8 (DataBuffer、3、CRC_KEY);

return (I2CSendBytes (I2CSlaveAddress、DataBuffer + 1、3、SentByte));

I2CSendBytes 使用 I2CSlaveAddress、但计算得出的 CRC 字节不是使用该地址(0x08、但0x10)计算得出的、然后该命令应该被拒绝!

此致

Lars Jensen
LINAK A/S

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

    您好 Lars、

    我不是该示例程序的作者、但我怀疑这是 MCU 写入8位的方式。 BQ76920数据表显示 I2C 地址为7位加上一个 R/W 位。 MCU 使用8位地址(包含 R/W 位)、因此需要将这些位移位一个位置。

    在另一个不同器件的示例中、BQ76952数据表显示了一个包含 R/W 位的8位 I2C 地址、并将该地址定义为0x10 (该地址与 BQ76920的地址实际上相同)。

    因此、对于这两个器件、CRC 实际上是在一个8位地址上计算的。

    此致、

    Matt

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

    非常感谢您的快速回复。

    此致

    Lars Jensen
    LINAK A/S