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:如何进入配置模式?

Guru**** 2393725 points
Other Parts Discussed in Thread: BQ76952, BQ76952EVM

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1498263/bq76952-how-to-enter-config-mode

器件型号:BQ76952

工具/软件:

大家好:  

我无法使用  BQ76952进入配置模式、实际上我无法向寄存器写入任何内容。 我完成了各种测试、所有寄存器保持不变。  0x00 Control Status ()命令返回该值"100101000000000"、0x12 Battery Status ()返回该值"1111110010001100"、有时会切换到该值"1100010010000100 "。 我将 ESP32与 I2C 配合使用

我非常感谢您的帮助。 谢谢:)

#include <Wire.h>

// BQ76952 I2C address (7-bit)
#define BQ76952_I2C_ADDR 0x08

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22, 400000); 

  delay(2000);

  uint16_t subcmdStatus = readWord(0x00);  
  Serial.print("Subcommand Status (0x00): ");
  Serial.println(subcmdStatus, BIN);  /

  uint16_t batteryStatus = readWord(0x12);
  Serial.print("batteryStatus (0x12): ");
  Serial.println(batteryStatus, BIN);

  delay(500); 

  enterConfigUpdateMode();
}

void loop() {
  delay(1000);  
}

uint16_t readWord(uint8_t reg) {
  Wire.beginTransmission(BQ76952_I2C_ADDR);  
  Wire.write(reg);                           
  Wire.endTransmission(false);               

  Wire.requestFrom(BQ76952_I2C_ADDR, 2);  
  if (Wire.available() == 2) {
    uint8_t lsb = Wire.read();
    uint8_t msb = Wire.read();
    return (msb << 8) | lsb;  
  }
  return 0xFFFF;  
}

void enterConfigUpdateMode() {
  writeSubcommand(0x0090);  // ENTER_CFG_UPDATE
  delay(100);

  // Wait for CFGUPDATE bit to be set in BatteryStatus (0x12), bit 0
  bool entered = false;
  for (int i = 0; i < 50; i++) {
    uint16_t batteryStatus = readWord(0x12);
    Serial.print("batteryStatus (0x12): ");
    Serial.println(batteryStatus, BIN);
    if (batteryStatus & (1 << 0)) {
      Serial.println("Entered CONFIG_UPDATE mode.");
      entered = true;
      break;
    }
    delay(100);
  }

  if (!entered) {
    Serial.println("Failed to enter CONFIG_UPDATE mode.");
  } else {
    delay(1000);
    writeSubcommand(0x0092);  // EXIT_CFG_UPDATE
    delay(100);
    Serial.println("Exited CONFIG_UPDATE mode.");
    delay(1000);
    uint16_t batteryStatus = readWord(0x12);
    Serial.print("batteryStatus (0x12): ");
    Serial.println(batteryStatus, BIN);
  }
}

void writeSubcommand(uint16_t command) {
  Wire.beginTransmission(0x08);               // Correct I2C address (0x08)
  Wire.write(0x3E);                           // Subcommand register (0x00)
  Wire.write((byte)command & 0x00FF);         // LSB
  Wire.write((byte)(command >> 8) & 0x00FF);  // MSB
  Wire.endTransmission();
  delay(10);  // Short delay after sending
}

e2e.ti.com/.../1447.SCH_5F00_Schematic1_5F00_2025_2D00_04_2D00_03.pdf

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

    尊敬的 Adam:

    您已成功通信、这意味着 BQ76952未处于 SHUTDOWN 或 TS2软关断模式。  

    "1111110010001100"表示已触发保护。 也许您可以在进入 CFG_UPDATE 模式之前从 BQ76952上电添加一些延迟。 300ms 是一个良好的开始。 然后、首先读取电池状态以查看是否触发了任何保护。

    BRS

    KIAN

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

    嘿、Kian、

    感谢您的回复!

    我增加了延迟、但没有任何变化。 在进入  CFG_UPDATE 模式后、我可以询问 Battery Status() 命令的最后一位不应该是1吗?  "1100010010000100" 与"1100010010000101"  。 如果不处于睡眠模式、则位15应显示0、但在每次测量中、位15应为1。

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

    由于某种原因、 SEC1和 SEC0位都为0、表示器件尚未初始化。 如何解决这个问题?

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

    尊敬的 Adam:

    是的、中的最后一位 0x12 BATTERY STATUS () 如果器件进入 CFG_UPDATE 模式、则会设置该位。 位15在该问题中并不重要。 应该检查位13、12和位8-9。  

    您能否在启动期间检查 REG18电压? 您能否导出操作的事务日志?

    BRS

    KIAN

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

    尊敬的 Kian:

    位13、12都为零、位8、9也都为零。  

     REG18 电压稳定在1.8V。  

    您能否说明一下什么  是事务日志以及它需要哪些数据? 我有一个自定义代码、因此不确定它是什么。  

    谢谢。  

    好极了

    Adam

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

    尊敬的 Adam:

    Excel 格式的逻辑分析仪事务日志对我来说很有用。 或者、您可以检查 BQ76952EVM 上的代码

    BRS

    KIAN

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

    嘿、Kian、  

    我没有 BQ76952EVM 开发板。 只是一个带有 BQ7695202 芯片的定制 PCB、是否有任何我可以读取的寄存器可帮助我们找出问题并在此处发布它们?  

    好极了

    Adam

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

    尊敬的 Adam:

    建议您在 TI.com 上购买 EVM。 我建议您检查 REG18电压、看看它是否始终稳定。

    如果是、电池状态是用于显示 AFE 状态的关键寄存器。 您还需要仔细检查 AFE 是否对子命令进行确认。  

    逻辑分析仪日志有助于分析通信误差。  

    BRS

    KIAN