nPM1300 will not charge a 1000 mAh LiPo: VBUS and VBAT present, BCHGCHARGESTATUS stays 0x00

Setup

  • nRF54L15 custom board, nPM1300 PMIC on I2C at 0x6B
  • nRF Connect SDK v2.9.2, board target nrf54l15dk/nrf54l15/cpuapp
  • Battery: 1000 mAh 3.7 V single-cell LiPo, two-wire pack (no thermistor)
  • USB-C input on the board's own connector

Symptom

The battery does not charge. Left connected to USB-C for six hours with no change in voltage or reported percentage (stuck at 4%).

BCHGCHARGESTATUS reads 0x00 throughout - bit 0 (BATTERYDETECTED) never asserts, so no charging phase is ever entered. BCHGERRREASON reads 0x00, so no error is being flagged either.

Measurements with USB-C connected

Point Measured Expected
VBUS, PMIC pin 21 5.0 V ~5 V
VBAT, PMIC pin 19 3.3 V 3.0-4.2 V
NTC, PMIC pin 18 tied to GND via 10 kΩ -
VSYS 3.3 V 3.3v

So the input is present, the cell is present, and a thermistor substitute is fitted. The PMIC still reports no battery detected.

Firmware readings over I2C

Battery: 4%  29.2 C (die)  3710 mV  22 mA  chg 0x00
charger status 0x00
charger error  0x00

Temperature is read from SENSOR_CHAN_DIE_TEMP, because SENSOR_CHAN_GAUGE_TEMP returns a value outside the valid range (approximately -88 C) and the firmware falls back. This was true both before and after fitting the 10 kΩ at the NTC pin - the NTC channel still reads out of range.BATTERYDETECTED (bit 0) is inconsistent across boards and does not correlate with whether a 10 kΩ NTC substitute is fitted. One board with no NTC resistor reports 0x01 at 3666 mV; another with the resistor fitted reports a fully charged cell. A third reported 0x00 at 3710 mV.

Devicetree

dts
npm1300_charger: charger {
    compatible = "nordic,npm1300-charger";
    term-microvolt = <4200000>;
    term-warm-microvolt = <4100000>;
    current-microamp = <500000>;
    dischg-limit-microamp = <1000000>;
    vbus-limit-microamp = <500000>;
    thermistor-ohms = <10000>;
    thermistor-beta = <3380>;
    charging-enable;
};

Question

1. Why does BATTERYDETECTED stay clear with 3.3 V on VBAT? What conditions must be met for the nPM1300 to assert it? Does battery detection require the charger to be actively running, or should it assert whenever a cell is present?

2. What is the correct configuration for a two-wire pack with no thermistor? Is a fixed 10 kΩ from the NTC pin to GND the right substitute, and should thermistor-ohms/thermistor-beta remain as above when doing that? Is there a way to disable NTC monitoring entirely so it cannot block charging?

3. Why does SENSOR_CHAN_GAUGE_TEMP still read out of range after fitting the resistor? Should a fixed 10 kΩ produce a valid ~25 C reading on that channel?

4. Reading charge current direction. SENSOR_CHAN_GAUGE_AVG_CURRENT appears to return magnitude only - every reading in every log has been positive, including while the battery was visibly discharging. Is the sign available, and if not, what is the recommended way to distinguish charging from discharging besides BCHGCHARGESTATUS?

5. Reading back LED state. The three LEDs (LEDDRV0-2 in host mode) are driven successfully via the Zephyr LED API. Is there a way to read back their current on/off state from the PMIC, or must the application track it?

Available on request

Full schematic, app.overlay, prj.conf, and raw register dumps.

What I am trying to achieve

Reliable battery percentage, battery temperature, and a correct charging/discharging indication, plus readable LED state - all over I2C from the nRF54L15.We also do not deep the voltage output of 1.8v So we are using the VSET2 for 3.3v

5734.app.overlay1524.prj.confSchematic

  • Hello,

    From the table 

    VBUS is 5V and VSYS is 3.3V. This is not correct as when VBUS is connected, VSYS should also be 5V. You need to check the soldering issues; for example on the VBUS side. If you have any nPM1300 you can check the operation. 

    There are the answers of the questions from the PMIC team:


    1. Why does BATTERYDETECTED stay clear with 3.3 V on VBAT?

    Battery detection is disabled in latest silicon. The bit status is not valid.

    2. What is the correct configuration for a two-wire pack with no thermistor? 

    You can use 10kohm fixed resistor, or connect NTC to GND and disable NTC completely. If a thermistor is not used, the NTC pin must be tied directly to ground or through a resistor. The functionality must be disabled in register BCHGDISABLESET.  

    3. Why does SENSOR_CHAN_GAUGE_TEMP still read out of range after fitting the resistor?

    Yes it should, check soldering issues.

    4. SENSOR_CHAN_GAUGE_AVG_CURRENT has sign that shows whether charging or discharging. Negative means battery discharging in latest NCS 3.1.1. - in the old 2.9.2 the polarity is opposite. Please check the latest drivers and samples - there have been update on the sign. The current measurement itself is an unsigned magnitude. The driver reads the IBAT_STAT register to see is it charging or discharging and chooses the sign. Not also that at very light loads the current measurement is not accurate for discharging.

    5. Application should track it

Related