Per (+) Trouble with nPM1300EK - Nordic Q&A - Nordic DevZone - Nordic DevZone, I've disconnected TWI from the board while doing the battery profiling and that worked successfully (thanks!). Unfortunately, this has given me a new problem: Without J4 (the nPM controller USB) connected, the TWI bus doesn't seem to work properly. Disconnecting J4 causes my nRF54l15 to think the TWI bus isn't ready. My firmware prints:
[00:00:00.533,869] <inf> main: twi30 bus device is ready
[00:00:00.533,881] <dbg> pmic_npm1300: pmic_npm1300_init: pmic_dev=0x3b0e8, charger_dev=0x3b1e4, pmic_gpio_dev=0x3b10c
[00:00:00.533,899] <dbg> pmic_npm1300: pmic_npm1300_init: pmic_dev->name=pmic@6b, ready=0
[00:00:00.533,914] <dbg> pmic_npm1300: pmic_npm1300_init: charger_dev->name=NPM1300_CHARGER, ready=0
[00:00:00.533,929] <dbg> pmic_npm1300: pmic_npm1300_init: pmic_gpio_dev->name=gpio, ready=0
[00:00:00.533,945] <wrn> pmic_npm1300: PMIC core device not ready (attempt 1/3)
[00:00:00.533,950] <wrn> pmic_npm1300: PMIC charger device not ready (attempt 1/3)
[00:00:00.533,954] <wrn> pmic_npm1300: PMIC GPIO device not ready (attempt 1/3)
[00:00:00.584,022] <wrn> pmic_npm1300: PMIC core device not ready (attempt 2/3)
[00:00:00.584,027] <wrn> pmic_npm1300: PMIC charger device not ready (attempt 2/3)
[00:00:00.584,031] <wrn> pmic_npm1300: PMIC GPIO device not ready (attempt 2/3)
[00:00:00.634,100] <wrn> pmic_npm1300: PMIC core device not ready (attempt 3/3)
[00:00:00.634,105] <wrn> pmic_npm1300: PMIC charger device not ready (attempt 3/3)
[00:00:00.634,109] <wrn> pmic_npm1300: PMIC GPIO device not ready (attempt 3/3)
[00:00:00.634,113] <err> pmic_npm1300: PMIC core device is not ready after retries
[00:00:00.634,118] <wrn> main: PMIC init failed (-19)
[00:00:01.134,214] <err> main: Raw I2C probe failed (-5) reading PMIC @0x6b:0x00
The related code is just:
for (int attempt = 0; attempt < PMIC_INIT_RETRIES; attempt++) {if (!device_is_ready(pmic_dev)) {LOG_WRN("PMIC core device not ready (attempt %d/%d)", attempt + 1, PMIC_INIT_RETRIES);}if (!device_is_ready(charger_dev)) {LOG_WRN("PMIC charger device not ready (attempt %d/%d)", attempt + 1, PMIC_INIT_RETRIES);}if (!device_is_ready(pmic_gpio_dev)) {LOG_WRN("PMIC GPIO device not ready (attempt %d/%d)", attempt + 1, PMIC_INIT_RETRIES);}if (device_is_ready(pmic_dev) && device_is_ready(charger_dev) && device_is_ready(pmic_gpio_dev)) {break;}if (attempt < PMIC_INIT_RETRIES - 1) {k_msleep(PMIC_INIT_RETRY_DELAY_MS);}}
If I connect J4, it works as expected, with or without PowerUP running. I can even connect it between retries and it will start working. If I disconnect J4, it will stop working (getting fuel gauging info fails).
The block diagram for the nPM1300EK indicates that the TWI bus connects directly to the nPM1300, so it doesn't seem like the controller should be needed. I'm currently running off of battery power, but it doesn't matter if J3 is connected or not. When I check the voltages of various lines, everything seems as I'd expect:
- nRF54l15DK VDDIO lines = 3.3V
- nPM1300EK VDDIO = 3.3V
- nPM1300EK buck1 and buck2 = 3.3V
- nPM1300EK VSYS = ~4.1V (battery is charged)
FWIW, here are pictures of the boards:


The nRF54l15 is powered from buck2 of the nPM1300EK. TWI is using P0.3 and P0.4. The other wires are for other peripherals.
Here's the section from the device overlay:
// Use I2C to talk to the PMIC&i2c30 {compatible = "nordic,nrf-twim";status = "okay";clock-frequency = <I2C_BITRATE_STANDARD>;pinctrl-0 = <&i2c30_default>;pinctrl-1 = <&i2c30_sleep>;pinctrl-names = "default", "sleep";npm1300: pmic@6b {compatible = "nordic,npm1300";reg = <0x6b>;npm1300_gpio: gpio {compatible = "nordic,npm1300-gpio";gpio-controller;#gpio-cells = <2>;ngpios = <5>;};npm1300_charger: charger {compatible = "nordic,npm1300-charger";label = "NPM1300_CHARGER";term-microvolt = <4200000>;term-warm-microvolt = <4100000>;current-microamp = <200000>;dischg-limit-microamp = <1000000>;vbus-limit-microamp = <500000>;thermistor-ohms = <10000>;thermistor-beta = <3380>;charging-enable;};regulators {compatible = "nordic,npm1300-regulator";npm1300_buck1: BUCK1 {regulator-min-microvolt = <600000>;regulator-max-microvolt = <3300000>;regulator-init-microvolt = <3300000>;regulator-boot-on;regulator-always-on;status = "okay";};npm1300_buck2: BUCK2 {regulator-min-microvolt = <600000>;regulator-max-microvolt = <3300000>;regulator-init-microvolt = <3300000>;regulator-boot-on;regulator-always-on;status = "okay";};};};};
How can I get the TWI bus working successfully without J4 connected? Does the controller chip do some configuration to the nPM1300 that is making it work? I'm pretty stumped.