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: Read the built-in NTC temperature of BQ25798

Part Number: BQ25798
Other Parts Discussed in Thread: TPS25751

Tool/software:

Hi teams,

We encountered the following problem when reading the built-in NTC temperature of BQ25798: the hot air gun blows the charger IC, but the temperature remains the same
The steps we read are as follows:
① Enable ADC, write 0xC4 to REG2E_ADC_Control Register (Offset=2Eh)
② Read REG41_TDIE-ADC Register (Offset=41h) register
③ Cycle every 10 seconds
But we found that when we used a hot air gun to blow the charger IC, the data read back remained unchanged at 45. Due to Bit Step Size: 0.5 ℃, the actual temperature value was 45 * 0.5=22.5, which does not match our actual value
May I ask what is the reason for this situation? How should it be resolved?

Best Regards!

Iris

  • Hi Iris,

    That is odd.  I have do this exact test and have seen the ADC TIE temp increase and then the charger enters thermal shutdown.  Do the other ADC registers read correctly?

    Regards,

    Jeff

  • Hi Jeff,

    May I ask if you have actually read the Read REG41_TDIE-ADC Register (Offset=41h) register to see what the temperature reading is?

    ① The readings of other ADCs are normal, such as step 1 Enable ADC, write 0xC4 to REG2E_ADC_Control Register (Offset=2Eh). After setting it up, I read the register again and found that the value was the same as the one written
    ② Can you show me your code so that I can compare and see if there is any problem, or I can show my code so that you can take a look
    ③ Is it possible that additional registers need to be configured?

    It's really strange to use a hot air gun to blow the charger IC, and the temperature read back remains constant and at room temperature

    (ps,The data read back needs to be multiplied by 0.5, which is not reflected in this code. I have made corresponding processing elsewhere)

    static uint16_t read_reg(const msdk_device_t *dev, bq25798_reg_t reg, uint8_t reg_width)
    {
        int ret;
        uint8_t data[2] = {0};
        bq25798_cfg_t *dev_config = (bq25798_cfg_t *) dev->config;
    
        ret = msdk_i2c_read_reg(dev_config->i2c_dev, dev_config->i2c_addr, reg, data, reg_width);
        if (ret != MSDK_STATUS__OK) {
            MSDK_LOG_ERR("read_reg failed addr: 0x%x", reg);
        }
    
        if (reg_width == 1) {
            return data[0];
        } else {
            return (uint16_t)(data[0] << 8 | data[1]);
        }
    }
    static void get_tdie_temp(const msdk_device_t *dev, int16_t *tdie_temp)
    {
        uint16_t data = 0;
    
        data = read_reg(dev, 0x41, 2);
        MSDK_LOG_DBG("bq25798 get_tdie_temp: %d  data);
    
        *tdie_temp = (int16_t)data;
    }

    Best Regards!

    Iris

  • Hi Iris,

    Are you periodically writing to the WD timer or have watchdog disabled?  If not, the EN_ADC resets to 0 when watchdog timer expires.


    Regards,

    Jeff

  • Hi Jeff

    We have watchdog disabled. During initialization, we write the REG10_Charger_Control_1 Register (Offset=10h) to 0xA0, where the corresponding bit0~2 is 0, which means disabled

    We conducted a test and read REG10_Charger_Controlle_1 Register and REG41_TDIE-ADC Register every ten seconds. The watchdog was disabled and the temperature read back remained unchanged

    Best Regards!

    Iris

  • Hi Iris,

    So, even if the converter has a 4A load on SYS with input power at VBUS (i.e. the converter is switching and providing this load current), T_DIE does not increase?  

    Regards,

    Jeff

  • Hi Jeff

    We have identified the issue and are using the one short mode. After reading once, the one short mode will set EN_ADC to 0. It is necessary to set EN_ADC before reading

    Best Regadrs!

    Iris

  • Hi Jeff,

    When we use a hot air gun to blow the charger IC during testing, it always triggers a USB insertion detection interrupt. What is the reason for this?
    If you don't use a hot air gun to blow, it won't trigger the USB insertion detection interrupt.

    Best Regards!

    Iris

  • HI Iris,

    This is a TPS25751 issue. I will move this post to that team.

    Regards,

    Jeff

  • Hi Iris, 

    In your TPS25751 JSON config, did you enable the Plug Insert or Removal [3] interrupt event in register Interrupt Mask for I2Ct_IRQ (0x16)? 

    During the hot air gun test, are you plugging or disconnecting anything at the USB Type-C port? 

    If the interrupt event is enabled, can you read back Status register (0x1a) so we can take a look at what has changed? It would be best to get Status (0x1a) register dump before and after you apply the hot air gun. 

    Thanks and Regards,

    Raymond Lin

  • Hi Raymond Lin,

    1)yes,I enable the Plug Insert or Removal [3] interrupt event in register Interrupt Mask for I2Ct_IRQ (0x16)

    2)After entering the interrupt, the USB insertion status and sink/source will continuously change,And after entering an interrupt, it enters the interrupt loop.

    The attachment is the captured log.

     20250725_TDIE_INTERRUPT.txt

    Best Regards!

    Iris

  • Hi Iris, 

    When the hot air gun is applied, are you or the customer plugging/unplugging anything at the port or is the port always in an unconnected state? 

    Also is it possible to read back TPS25751 Status register (0x1A) before and after the interrupt triggers?

    Something in status register is updating (i.e. plug/unplug, data role change, etc.) so will be very helpful to see the before and after interrupt register dump. The logs you provided didn't show any register read after the interrupt is checked and cleared. 

    Thanks and Regards,

    Raymond Lin