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:I2C 地址更改失败

Guru**** 2458980 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1378650/bq76952-i2c-address-change-failure

器件型号:BQ76952

工具与软件:

我正在尝试在我的定制板上将 i2c 默认地址从0x08更改为0x11。

在 根据 OTP 编程手册写入 I2CARES 寄存器并运行 OTP 之后。

根据手册、在 OTP_WRITE 之后读取地址0x40会返回0x08、但旧地址会保留。

请提供任何建议。

下面的部分代码。 使用网页上提供的 STM32示例代码。

一些虚拟变量添加用于绑定目的

CommandSubcommands (SET_CFGUPDATE);
uint16_t ReadData = BQ769x2_ReadRegister (I2CAddress);
void I2C_WriteReg (uint8_t reg、uint8_t* data、uint8_t length);

BQ769x2_SetRegister (I2CAddress、0x0011、2);

CommandSubcommands (EXIT_CFGUPDATE);
ReadData = BQ769x2_ReadRegister (I2CAddress);

子命令(OTP_WR_CHECK、0x00、R);
uint8_t optdata_0 = RX_32byte[0];
uint8_t optdata_1 = RX_32byte[1];

CommandSubcommands (SET_CFGUPDATE);
DirectCommands (BatteryStatus、0x00、R);
uint8_t batteystat_0 = RX_DATA[0];
uint8_t battystat_1 = RX_DATA[1];

if ((battystat_0 & 0x80)==0x00){
子命令(OTP_WR_CHECK、0x00、R);
if (RX_32byte[0]=>= 0x80){

子命令(OTP_WRITE、0x00、R);
HAL_DELAY (100);
uint8_t OTP = RX_32byte[0];
if (otp = 0x80){
printf ("成功");
}

}
}
CommandSubcommands (EXIT_CFGUPDATE);
CommandSubcommands (BQ769x2_RESET);

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

    您好!

    如果更改后读回 I2C 地址寄存器、它是新值吗?

    此致、

    Thomas Rainey

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

    是的、它会显示新值。

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

    您好!

    器件的默认地址为0x10 (写入)和0x11 (读取)、其中最低有效位是末尾的 R/W 位

    不含 R/W 位的器件地址为0x08。 在您的案例中、地址为0x11 (00010001)。 您需要在它的末尾添加一个写入位。 因此、地址将为0x22 (00100010)。  

    您可以参考 [常见问题解答] BQ76952:BQ769x2系列的 I2C 器件地址是什么? 以了解有关器件地址的更多详细信息。

    此致、

    Thomas Rainey

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

    我仍然可以使用默认地址为0x08的0x10与芯片通信。 尽管将 I2CMadres 的地址更改为0x11并执行 OTP 写入(回读为0x80)以指示成功。 不知道我缺少什么。 无法与0x22通信

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

    您好!

    不同封装选项  BQ769x2_SetRegister (I2CAddress、0x22、1);

    您可能想要尝试发送  SWAP_COMM_MODE()  在进行 OTP 之前、这将 触发器件更改 I2C 地址、并允许您在对器件进行 OTP 操作之前确认与新地址的通信有效。

    此致、

    Thomas Rainey