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.

[参考译文] BQ25798:BQ25798 ACD_Enable 寄存器写入问题

Guru**** 2599745 points
Other Parts Discussed in Thread: BQ25798

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1579324/bq25798-bq25798-acd_enable-register-write-issue

器件型号:BQ25798


我正在尝试使用 bq25798 来读取电池 ADC 值。

根据数据表、我需要启用 REG2E 中的 7 位 ADC_EN 寄存器。

REG2E_ADC_Control 寄存器(偏移= 2Eh)[复位= 30h]-> 8 位数据

通过 I2C 读取读取的当前初始值为 0x30。

但是、当我对 REG2E 执行 I2C 写入来启用 7 位 ADC_EN 寄存器时、

它保持不变、默认值为 0x30。

REG2F_ADC_F[0 Function_Disable_寄存器(偏移= 2Fh)[复位= 0h]

VBAT_ADC_DIS 也被设置为默认值 Enable。

REG10_REG1 Charger_Control_寄存器(偏移= 10h)[复位= 85h]

为防止看门狗自动复位、必须定期调用写入寄存器以保持主机模式并复位看门狗。

尽管正在执行该操作、但 REG2E_ADC_Control 中的 ADC_EN 未启用。

我确认 I2C 通信正常读取/写入。

但是、对 BQ25798 寄存器的写入操作将不起作用。

此外、我想了解一些解决方案和权变措施。

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

    Hi Jonghyo,  

    该充电器的 ADC 没有问题。 如果 VBUS 和 VBAT 电压高于各自的 UVLO 电压并且 EN_ADC 位=1、则 ADC 会在每次在连续模式下读取后更新。 您是否正在将 TI EVM 和通信软件用于此目的、或者您自己的 IC 和软件?   

    此致、

    Jeff

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

    尊敬的 Jeff:

    我将尝试使用开发板上的 BQ25798 来读取电池电压(基于 nrf54l15)。

    不使用 TI EVM、 我仅使用 BQ25798。

    我目前正在开发的电路板使用 3 节 1p 12 伏电池。

    我很好奇如何对电路板 MCU 上的 BQ25798 寄存器执行 I2C 读取/写入操作。

    我通过数据表确认了“在连续模式下每次读取“设置、当 EN_ADC 位为 1 时、您提到了该设置。 当通过 I2C 读取 2E 寄存器时、无法读取电池值、因为 EN_ADC 位为 0。 因此、我要将 EN_ADC 位更改为 1。

    此致、

    Jonghyo

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

    Hi Jonghyo,

    对 REG0x2E[7]的 I2C 写入会启用 ADC。  该位会在 WD 到期时复位、因此主机需要对 WD 计时器位进行 ping 或在 REG0x10[2:0]中禁用 WD 计时器。

    此致、

    Jeff

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

    尊敬的 Jeff:  

    我在每 3 秒执行一次 WD 的同时写入 REG0x2E[7]位、但它没有变化。

    下面的功能会定期对 WD 进行 ping。

    #define BQ25798_REG10_ADDR 0x10
    #define BQ25798_WATCHDOG_MASK 0x07
    #define BQ25798_WDRST_MASK   0x08

    void drv_bq25798_Watchdog_kick (void)
      uint8_t reg10

     
      DRV_BATTERY_READ_reg (BQ25798_REG10_ADDR、&reg10、1);
      printk(“BQ25798_REG10_ADDR 看门狗读取:0x%02x\n“reg10);
      
      reg10 |= BQ25798_WDRST_MASK    // WDRST = 1(看门狗触发)
      reg10 且=~BQ25798_WATCHDOG_MASK;   
      reg10 |= 0x05;            

      DRV_BATTERY_WRITE_reg (BQ25798_REG10_ADDR、&reg10、1);
      printk(“BQ25798_REG10_ADDR WATCHDOG WRTIE:0x%02x\n“reg10);
    }

    此外、写入该位以禁用 REG0x10[2:0]不会更改该值。

    void init_watchdog_reset (void){
      uint8_t reg10
      DRV_BATTERY_READ_reg (0x10、&reg101);
      printk(“BQ25798_REG10_ADDR 看门狗读取:0x%02x\n“reg10);
      reg10 |= 0x08
      reg10 且=~0x08
      reg10 |= 0x00
      DRV_battery_write_reg (0x10、&reg101);
      printk(“BQ25798_REG10_ADDR 看门狗读取:0x%02x\n“reg10);
      k_msleep (50);
      
    }

    我当前的问题是、当我通过 BQ25798 读取电池信息时、​​​​将读取设置为默认值的数据值。
    但是、我无法写入 WD。

    如前所述、对 WD 执行 ping 操作或更改 REG0x10[2:0]位也需要寄存器写入。

    I2C 通信通常会接收读取/写入请求的 ACK。

    我需要帮助了解写入 BQ25798 寄存器为何无法正常工作以及如何修复。

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

    Hi Jonghyo,

    很遗憾、我不是编程人员、因此无法调试您的代码。  关于 16 位寄存器、唯一奇怪的是它们是大字节序、而不是更常见的小字节序。  我建议使用示波器或 Saleae 逻辑分析仪来确认 I2C 写入实际上是您认为应该执行的操作。   

    此致、

    Jeff