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.

BQ25892: Stops ADC conversions on occasion

Part Number: BQ25892

Tool/software:

Hi there, 

I hope someone can help me with an issue I am seeing with the BQ25892.The BMIC is connected to a host MCU via I2C and the host MCU writes down a config on power up. 
The host MCU continues to poll the CONV_START flag ro check if a new ADC conversion has completed then it reads the all the assosiated ADC registers to get the status of the power
The host will then log this to the console an example status is shown here: 

Status
--------------
State     : Not charging
Mains     : Fault (0)
VBus      : 2600mV
VSys      : 3704mV
VSys(min) : 3000mV
Batt      : Connected (0)
Capacity  : 50%
VBatt     : 3684mV Avg=3704mV
IBatt     : 0000mA Avg=0000mA
Temp      : 22.6°C

Faults
--------------
Watchdog  : Ok (0)
Battery   : Ok (0)
Boost     : Ok (0)
Thermal   : Ok (0)
Charge    : Ok 
   Input  : 0 
   Timer  : 0 
   Therm  : 0 
NTC       : Ok 
   Cold   : 0 
   Cool   : 0 
   Warm   : 0 
   Hot    : 0 

I am noticing on occasion with some batteries I have tested that the ADC stops converting without raising any faults or indicating in any way that its not converting.
The only indictation is that the ADC converting flag (CONV_START) doesn't clear to indicate that an ADC conversion has completed.
The chip registers can be inspected (read from and written to) via I2C fine. The chip can be also soft reset but this makes no difference.
The only way I can get it to start operating as expected is to remove the battery or remove VBUS.




Here is the schematic of the BMIC circuit with battery and PSU connections highlighted.



The only settings that differ from the default ones are as follows:

// BQ25892 Register settings
#define BQ25892_REG03_SETTING 			0x5A		// Reset the watchdog, Min system voltage (Vsys min) set to 3.5V (default)
#define BQ25892_REG07_SETTING 			0x8D		// Disable the watchdog
#define BQ25892_REG00_SETTING 			0x3A		// Disable the ILIM pin which is used to set the current limit to 829mA (390/470R). Set max input current limit to 3A 
#define BQ25892_REG04_SETTING 			0x0B		// Fast charge current limit set to 704mA
#define BQ25892_REG05_SETTING 			0x02		// Precharge current limit set to 64mA, Termination charge current limit set to 192mA
#define BQ25892_REG02_SETTING 			0x5D		// Start a continous ADC conversion



A register dump of all the registers can be found here:

Registers 
--------------
Address 0x00: 3A
Address 0x01: 06
Address 0x02: DD
Address 0x03: 1A
Address 0x04: 0B
Address 0x05: 02
Address 0x06: 5E
Address 0x07: 8D
Address 0x08: 03
Address 0x09: 44
Address 0x0A: 73
Address 0x0B: 56
Address 0x0C: 00
Address 0x0D: 12
Address 0x0E: 47
Address 0x0F: 47
Address 0x10: 5B
Address 0x11: 98
Address 0x12: 00
Address 0x13: 3A
Address 0x14: 05


Any help or guidance would be greatly appreciated

Regards
Trevor

  • Hello Trevor,

    Thanks for reaching out. I'll review this and follow up with you tomorrow, 3/13.

    Best regards,

    Alec

  • Hello Trevor,

    Thanks for sharing your schematic and register dump.

    You are correct that when the ADC is in continuous conversion mode, the CONV_START bit updates to indicate when a conversion is in progress. It sounds like most of the time you are able to use this behavior to log ADC readings from the device, but then sometimes the CONV_START bit stays 1, meaning you are unable to log the ADC readings. Is my understanding of the problem correct? This behavior seems unexpected.

    You also noted that this issue occurs with different batteries. While I don't expect the battery itself to be the root cause, battery voltage can certainly impact behavior. As mentioned in section 8.2.8 of the datasheet, ADC measurements are only active when VBAT > SYS_MIN. From the provided register dump, it appears that your SYS_MIN setting is 3.5V and your battery voltage is read to be around 3.7V, but is this always the case?

    How frequently are you polling CONV_START? I'm wondering if this could be software-related. It's possible that CONV_START is updating as expected, but you're polling at a time that makes it appear to be stuck at 1.

    You also mentioned that removing the input source or battery resolves the issue. Could you clarify whether the issue only occurs when both an input source and battery are connected? Or does the issue persist until the input source is removed and reconnected? What is the input voltage and battery voltage when this issue occurs?

    Best regards,

    Alec

  • Hello Trevor,

    I wanted to check if you still need help with this issue. Let me know if you have any updates or further questions.

    Best regards,

    Alec

  • Hi Alec,

    Thank you for taking the time to review my issue.. and apologies for the delayed reply..

    I'll try to answer your questions in order..

    1. Yes your understanding is correct, we log ADC readings from the BQ25892 and yes sometimes the CONV_START bit remains '1' meaning we can't log readings anymore. This does not recover until either VBUS or the battery is removed.

    2. The battery voltage at which I have seen this issue varies from ~3.7-4.0v.

    Our application requires the battery to work from 3.5v to 4.2v..

    I should also add, that when VBUS is present we set the SYSMIN to 3.5v and when VBUS is removed we set it to 3.0v.

    3. We poll CONV_START every second.You make an interesting point with regard to polling, If I'm understanding you correctly you are saying that the CONV_START will set and clear itself on each ADC conversation cycle, regardless of whether the bit is read or not..If this is the case there certainly is a hole in our logic there.. 

    So I will need to fix this in any case, even if it's not the root cause issue.. 

    I will retest and let you know my findings 

    4. The issue only occurs when both VBUS and the battery is connected, if either is disconnected the problem goes away..

    When this happens VBUS is 4.8v and the battery voltage is 3.7-4.0V

    I am out of office for the next 10days but as soon as I am back I will retest with a fix for point 3 and let you know my findings.

    Regards

    Trevor

  • Hi Trevor,

    Thanks for the information. We can continue when you're back.

    Best regards,

    Alec

  • Hi Alec,

    I'm back looking into this issue again and I implemented a fix for point 3 above.

    I changed the code to perform one shot ADC conversions (as described in DS snippet below) i.e. the CONV_RATE remains cleared and the code sets the CONV_START bit to begin a conversion and then polls the CONV_START bit once a second until it clears indicating the conversion has completed.
    The registers are read and parsed and then the process begins again.

    Unfortunately this does not fix the issue I have been seeing.. 





  • Hi Trevor,

    Thanks for reaching out.

    The conversion time (tconv) is 8ms (typical), but I see that the datasheet description mentions the 1s maximum.

    It's likely that polling every second is too slow to catch the CONV_START bit clearing if it's being set again.

    Best regards,

    Alec

  • Hi Alec, 

    Thanks for your response 

    I have changed the code to perform single shot ADC conversions it is my understanding that when using this method when I set the CONV_START bit to start the conversion it will clear once the conversion has completed no other conversions will be performed until I explicitly set the bit again in this case it shouldn't matter how often I poll I just need to wait for the bit too clear right? 

    Regards 

    Trevor 

  • Hi Trevor,

    Yes, your understanding is correct. When the ADC is in one-shot mode, you can set CONV_START to start the conversion, and the bit will automatically clear once the conversion completes.

    This seems like a much simpler approach than polling CONV_START in continuous mode.

    Best regards,

    Alec

  • Thanks for confirming, Alec.

    Unfortunately, this doesn't seem to have any effect on the issue I'm experiencing.

    To recap:

    I currently have a battery connected to the system along with VBUS, and in this setup, ADC conversions appear to stop, with the CONV_START bit remaining set. However, if I remove the battery, the ADC conversions resume. Similarly, if I disconnect VBUS, the conversions start working again. But when both are connected, the issue persists.

    Do you know of any other possible reasons why ADC conversions might stop with CONV_START remaining set under these conditions?

    Again thanks for you help so far

    Regards

    Trevor





  • Hi Trevor,

    The CONV_START bit stays high during input source detection, so it's possible the behavior that you're seeing is related to that.

    It's helpful to know that this issue only occurs while VBUS and BAT are connected. I double-checked your register dump and schematic, but I don't see any obvious issues.

    I'll investigate this further and try to recreate this behavior on an EVM.

    Let me know if there are any other details that might be important to know. I appreciate everything you've shared so far.

    Best regards,

    Alec

  • Hi Alec,

    I took some traces of VBUS, VSYS and VBAT when in the condition of the CONV_START bit being stuck..


    So here is the trace when CONV_START is set and remains set. 
    There's a dip on both VSYS and VBAT every ~43mS. I'm sure if this helps at all or is even related 

    and for comparision here it is normally



    Thanks again for your help so far.. Have a nice weekend!

    Regards

    Trevor

  • Hi Trevor,

    Thanks for sharing these waveforms. They're very helpful and related to the ADC behavior you're seeing.

    The ADC in the BQ25892 operates by sampling the input signal over a period of time and averaging those samples to produce a stable reading. For this process to work correctly, the input (such as VBAT) needs to remain relatively stable during the sampling window.

    If VBAT has excessive ripple or is changing rapidly, the ADC cannot settle on a valid result. Since the input is varying too much while the ADC is trying to measure it, the final reading may not accurately reflect the true voltage or no valid reading may be produced at all.

    Do you know what's causing the oscillations in the waveform where the issue occurs? For example, is a pulsed load being enabled? If we can get those waveforms to look cleaner, we can resolve the ADC issue.

    Have a nice weekend as well!

    Best regards,

    Alec

  • Hi Alec,

    It seems the battery that was exhibiting the issue was making poor contact with the onboard connector. Once the connection was properly secured, it started working again.

    From my previous experience with ADC measurements, the sampling should simply capture the input voltage at the moment of sampling — the shape of the input signal shouldn't matter. The behavior you're describing is unexpected and a bit concerning, as it suggests a battery could be connected but not making proper contact, with no easy way to detect this condition.

    One possible approach to monitor this would be to implement a guard timer in the code. The timer could be reset at each ADC interval, and if the ADC stops converting for an extended period, a fault could be raised.

    I am interested on your thoughts on this

    Regards

    Trevor

  • Hi Trevor,

    The ADC in the BQ25892 is designed for high-accuracy measurements of slowly varying DC signals, as commonly found in battery charger applications. Because of this, there are inherent trade-offs when the input signal is rapidly changing or unstable.

    This article explains this in more detail: How delta-sigma ADCs work, Part 1

    Your idea sounds like a reasonable software solution for flagging potential loose battery connections. Are loose connections something you expect could occur in your application? And just to confirm, are you only seeing the ADC stop converting with this particular battery?

    Best regards,

    Alec

  • Thanks, Alec.

    Loose connectors wouldn’t normally be expected—the connector linking the battery to the main PCB is typically a tight fit and isn't meant to be unplugged frequently in our application. However, since I used this battery for testing and was repeatedly plugging and unplugging it, it’s possible that I may have slightly loosened the terminals. As a result, the connection might not be as solid as usual.

    So far, I’ve only observed this issue with this particular battery.

    Regards
    Trevor

  • Hi Trevor,

    Got it, that makes sense. It sounds like a loose battery connection was the root cause here.

    Let me know if you have any other questions or run into anything else.

    Best regards,

    Alec

  • Thanks Alec.. 

    Regards