XIAO nRF52840 Sense - Charging consistently stalls at 3.7V, never reaches 4.2V

Hi all,

I’m having a persistent charging issue with my XIAO nRF52840 Sense and would appreciate any insight.

Setup:

  • Board: XIAO nRF52840 Sense
  • Battery: 2-pin LiPo (JST 1.25mm connector, no TS wire)
  • Charging via USB-C, tested with both a PC port and a standalone USB wall adapter

Symptom:
The battery voltage consistently stalls around 3.7V and never progresses further toward the expected 4.2V full-charge voltage. The charge indicator (via P0.17 CHARGE_LED pin) shows “charging” for a while, then switches to “not charging” and stays there - the voltage does not continue climbing.

If I unplug the USB cable and wait at least ~10 seconds before reconnecting, charging resumes briefly, and the voltage ticks up a small amount - but it reliably stalls again at the same ~3.7V point. Repeating this cycle many times has not gotten the battery past 3.7V.

What I’ve already ruled out:

  • No heat from the board or battery during/after charging attempts
  • Verified continuity and voltage on all relevant pins (VCC/GND to battery connector) with a multimeter - all normal, 3.3V present as expected
  • Tested with a completely bare-minimum sketch (empty loop(), no BLE, no sensor polling) to rule out firmware/current-draw interference - same stall behavior occurs
  • Confirmed via datasheet that the charge IC is the BQ25101 (250mA linear charger, 4.2V charge voltage, 3-phase precharge/CC/CV charging)
  • Reconnecting the cable (power-cycling VBUS) does trigger a brief resumption of charging, consistent with the datasheet’s note that cycling input power resets the CHG pin state - but the underlying stall recurs almost immediately at the same voltage

Question:
Has anyone else observed charging reliably stalling at a specific voltage (not just slow tapering near 4.2V, but a hard stop well before it)? Is this a known behavior/limitation of the BQ25101 on this board, or does it point to something specific I should check (e.g., is a TS thermistor required even though the board ships supporting 2-pin batteries by default)?

Any guidance would be greatly appreciated. Thanks!

Hi there,

And Welcome here…

So , ,what you are seeing is NOT normal, Read up on the charge controller,
it does some tricks at the end of the cycle , to drop into Trickle charge for the last portion. CV mode.
The chip has a saftey timer in it too, so if the Battery is too big of a load and will take too long , you get that. or if the chip is getting HOT , you’ll get that.
Here is the formal.

I notice you don’t say the battery size ?
A hard stall at 3.7V is actually not standard behavior for the BQ25101 linear charger. Standard LiPo charging remains in the Constant Current (CC) phase all the way up to 4.2V before entering the Constant Voltage (CV) phase to taper current. Stalling at 3.7V and recovering only after unplugging VBUS strongly points to the BQ25101 tripping an internal safety fault.

Here are the top three things causing this:

  1. Fast-Charge Safety Timer Timeout: The BQ25101 features an internal hardware safety timer. If your LiPo capacity is relatively large (>500 mAh) and the charge current on the XIAO is set to a low default (~100–250 mA), the battery takes longer to climb to 4.2V than the timer allows. Once the timer expires, the IC shuts off, turns off P0.17 (CHARGE_LED), and stays locked until power-cycling VBUS resets the timer.

  2. Floating TS (Temperature Sense) Pin: Because you are using a 2-pin battery without an NTC thermistor, check if the TS input on the PCB is floating. If the board’s default TS divider network drifts due to noise, the chip assumes an out-of-spec temperature fault and halts charging.

  3. Battery Age / High Internal Resistance: If the cell is older or has thin connection wires, the voltage drop across the leads during charging tricks the sensor, tripping pre-charge/charge limits prematurely.

To test this: Try charging a smaller (~100–250 mAh) fresh 1S LiPo cell. If the smaller cell charges cleanly to 4.2V before the internal safety timer expires, you are running into the hardware safety timeout on larger capacity batteries.

HTH
GL :slight_smile: PJ :v:

Hi there,

So if it’s Elite battery charging and control you want , check out the “FireHorse” a.k.a. nRF54LM20A with on board PMIC, (Pm1300) 2 18650’s in parallel 8-9 hrs. A single, 2-4 hrs depending on battery chemistry and charge current setting (adjustable in Code)

You can get a preview and video HERE.

HTH
GL :slight_smile: PJ :v:

I deleted reply by mistake…

Thanks for the detailed breakdown - that’s really helpful context on the safety timer and TS pin.

One data point: my battery is 80mAh. At 250mA (the BQ25101’s max), that’s under 20 minutes to full charge in theory, so I’m having trouble seeing how a fast-charge timeout would trigger here - unless the timer window is much shorter than I’m assuming. Do you know the actual timer duration for the BQ25101?

Also, I just found that Seeed’s official wiki mentions a charge current toggle via P0.13 (LOW = 100mA, HIGH = 50mA - Getting Started with Seeed Studio XIAO nRF52840 Series | Seeed Studio Wiki ). I tried explicitly setting it LOW (100mA) and the stall behavior is unchanged - still plateaus around the same voltage. Does that rule out the charge-current angle, or could switching current levels mid-charge itself be triggering some fault state?

Lastly, do you have a source confirming the TS pin is hard-wired to GND on this board? I’ve seen an AI-generated claim to that effect but haven’t been able to verify it against the actual schematic myself, so wanted to check if you’d seen it directly.

Update: tried explicitly setting P0.13 LOW (100mA charge current) as suggested, and the stall behavior is completely unchanged - same voltage plateau, same pattern. This seems to rule out the charge-current/timer angle pretty conclusively, at least for this battery size.

At this point the remaining candidates seem to be either the battery cell itself (age/PCM behavior) or a hardware issue with this specific board/solder joints. Since I don’t have a spare battery or board to swap in for a controlled test, I’m a bit stuck on how to isolate it further - any suggestions on next steps would be appreciated.

Hi there,

So , that is interesting and a peculiar situation ,
Here is the Schematic section from the wiki,

It may be the battery’s own protection BMS, if it has such.
Can you post a picture of it ?

HTH
GL :slight_smile: PJ :v:

I have been testing this with the “fast charge” on (P0.13 Low), connected to various LiPo batteries and charging stayed on (P0.17 low), with current -87mA and voltage to ~4V before current tail off…
Device draws ~10mA (from battery or USB).

So, works as expected. BUT, takes “forever” to charge. I generally use a much higher charge rate (~1A) on my own designs, but unfortunately XIAO’s don’t support that.

Here is some data on charging a 220 mAh battery at a current of 100 mA using the nRF52840. During charging, the battery voltage reaches 4.2 V, but if the battery is worn out, the voltage drops to about 3.7 V immediately after it is removed from the nRF52840. Please compare the voltages during and after charging.

Charging characteristics of XIAO_nRF52840 and XIAO_ESP32C3

Thanks all - this is really helpful for narrowing things down. Given that both the official 220mAh reference graph and ~4V test with P0.13 LOW show normal progression well past 3.7V, it seems like the stall I’m seeing isn’t typical BQ25100 behavior on this board. That points more toward either my specific battery or my specific board being at fault.

Here is a photo of the battery’s protection circuit, and if possible, I’ll get a second battery to test in isolation. Will report back with results.

If you are charging an 80 mAh battery, set the nRF52840’s charging current to 50 mA. Charging a low-capacity battery with a high charging current will accelerate its degradation.

… this battery has onboard charge management circuitry… I am assuming the two systems are fighting each other around system voltage 3v7… IMO HTH

My previous post got deleted but I’m thinking the battery may be at fault. I have tested both “protected” and “standard” batteries and the charge system works, albeit slowly.

The “protection” adds a nice “feature”, low voltage cutoff (<2.5V), something not present on the XIAOs.

For your 80mAh battery, 0.5C is a charge rate of 40mA, so the low settings (50mA) should suffice. Your battery doesn’t look like it is “protected”. So perhaps it’s just faulty?