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.

[参考译文] BQ76972:TS3 写入配置

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1532194/bq76972-ts3-write-configurations

器件型号:BQ76972

工具/软件:

TI 团队大家好、

我尝试根据 BQ76972 的技术参考手册编写配置、但很遗憾我收到错误消息、因为我还检查了波形。 因为 BMS IC 不确认 I2C 写入 0x3E、这是我如何开始存储器写入。 此外、我根据参考手册输入了完全相同的地址和命令。 我写入子类“0x80"和“和偏移“0x5C",“,来自、来自“0x92FF-0x92A3 = 0x5C“。 这里为 0x92A3、因为它是子类“0x80"的“的起始基地址。 所以、请帮助我进行任何更正。

我附上了代码并要求

void BQ76972_Unseal(I2C_HandleTypeDef *hi2c3)
{
	char message[64];
	uint8_t unseal_key1[] = { 0x14, 0x04 };
	uint8_t unseal_key2[] = { 0x72, 0x36 };

	if(HAL_I2C_Mem_Write(hi2c3, BQ76972_I2C_ADDR_WRITE, 0x00, I2C_MEMADD_SIZE_8BIT, unseal_key1, 2, 100) == HAL_OK)
    {
    	snprintf(message, sizeof(message),"Unseal success\r\n");
		RS485_Transmit((uint8_t*)message, strlen(message));
    }
    else
	{
		snprintf(message, sizeof(message), "Unseal Step 1 failed\r\n");
		RS485_Transmit((uint8_t*)message, strlen(message));
	}
    HAL_Delay(5);
    HAL_I2C_Mem_Write(hi2c3, BQ76972_I2C_ADDR_WRITE, 0x74, I2C_MEMADD_SIZE_8BIT, unseal_key2, 4, 100);
    HAL_Delay(5);
}

void BQ76972_Enter_ConfigUpdate(I2C_HandleTypeDef *hi2c3)
{
	char config_msg_1[30];
    uint8_t cfgupdate_cmd[] = { 0x90, 0x00 }; // Subcommand = 0x0090
	if(HAL_I2C_Mem_Write(hi2c3, BQ76972_I2C_ADDR_WRITE, CMD_SUBCOMMAND, I2C_MEMADD_SIZE_8BIT, cfgupdate_cmd, 2, 100) == HAL_OK)
	{
		snprintf(config_msg_1, sizeof(config_msg_1),"Config. mode success\r\n");
		RS485_Transmit((uint8_t*)config_msg_1, strlen(config_msg_1));
	}
    HAL_Delay(5);
}

void BQ76972_WriteTS3Config(I2C_HandleTypeDef *hi2c3)
{
	char wr_ts3_msg[64];
	// Step 1: Set offset and subclass
    uint8_t offset_subclass[2] = { 0x5C, 0x80 };

    if(HAL_I2C_Mem_Write(hi2c3, BQ76972_I2C_ADDR_WRITE, 0x3E, I2C_MEMADD_SIZE_8BIT, offset_subclass, 2, 100) == HAL_OK)
    {
    	snprintf(wr_ts3_msg, sizeof(wr_ts3_msg),"Offset and Subclass pass\r\n");
		RS485_Transmit((uint8_t*)wr_ts3_msg, strlen(wr_ts3_msg));

    }
    else
    {
    	snprintf(wr_ts3_msg, sizeof(wr_ts3_msg),"Offset and Subclass fail\r\n");
		RS485_Transmit((uint8_t*)wr_ts3_msg, strlen(wr_ts3_msg));
		return;
    }

    HAL_Delay(2); // allow time for memory map

    // Step 2: Write TS3 config value into data buffer (0x40)
    uint8_t ts3_cfg_value = 0x03;
    if(HAL_I2C_Mem_Write(hi2c3, BQ76972_I2C_ADDR_WRITE, 0x40, I2C_MEMADD_SIZE_8BIT, &ts3_cfg_value, 1, 100) != HAL_OK)
    {
    	snprintf(wr_ts3_msg, sizeof(wr_ts3_msg),"TS3 Data Write fail\r\n");
		RS485_Transmit((uint8_t*)wr_ts3_msg, strlen(wr_ts3_msg));
		return;
    }

    HAL_Delay(2);

    // Step 3: Write length = 0x01 to 0x61 (tells BQ to commit 1 byte)
    uint8_t len = 0x01;
    if(HAL_I2C_Mem_Write(hi2c3, BQ76972_I2C_ADDR_WRITE, 0x61, I2C_MEMADD_SIZE_8BIT, &len, 1, 100) != HAL_OK)
    {
    	snprintf(wr_ts3_msg, sizeof(wr_ts3_msg),"Length commit fail\r\n");
		RS485_Transmit((uint8_t*)wr_ts3_msg, strlen(wr_ts3_msg));
		return;
    }
    HAL_Delay(5);

    snprintf(wr_ts3_msg, sizeof(wr_ts3_msg),"TS3 Config. Write Success\r\n");
	RS485_Transmit((uint8_t*)wr_ts3_msg, strlen(wr_ts3_msg));


}
供参考的 D 输出数据。

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

    您好!  

     有关寄存器以及如何与器件通信的说明、请参阅技术参考手册 (www.ti.com/.../sluuby2b.pdf)。 我们可以回答有关器件的具体问题、但我们希望我们的客户能够查看/调试其代码。 如果您在使用微控制器时遇到问题、请联系 MCU 团队。 如果您对 TRM 有任何具体问题、请发布另一个同样的主题。 谢谢你。  

    请参阅编程指南以获得可用于调试的帮助和示例 (https://www.ti.com/lit/an/sluaa11b/sluaa11b.pdf)、还请确保 MCU 上的 I2C IRQ 支持时钟延展以确保正常运行。  

    此致、  

    Arelis G. Guerrero