NPM1300 on custom board cannot start battery charging

I have a custom board with bl54u and NPM1300. Working fine.

But now replaced with a NPM1304 as it is pin compatible. Worked fine with fuel gauge NPM1300 on SDK 3.0.1.

Now I have upgraded SDK to 3.1.1 and have to use NPM13XX fuel gauge. Works almost ok... But cannot start the battery charging.

On SDK 3.0.1 charging is possible without problem. 

I understand this has nothing to do with the fuel gauge application but more on the HW side. 

What do work is,

program the BL54u with old SDK 3.0.1 fuel gauge and start charging the battery.

Then reprogram with the new SDK 3.1.1 fuel gauge NPM13XX. And charging will continue with new settings.

Not work 

But removing the battery and reconnect it the charging will not work.

I guess old SDK did some config to the NPM1300 as not done for NPM13XX !?

Is this a known bug or is there a new requirement on the HW. I dont use NTC

Use battery for battery_model_20mAh.inc
And using the battery with NPM1304 dk works fine!

schematic attached.

 

&i2c20 {
    status = "okay";
    compatible = "nordic,nrf-twim";
    pinctrl-0 = <&i2c20_default>;
    pinctrl-1 = <&i2c20_sleep>;
    pinctrl-names = "default", "sleep";
    clock-frequency = <I2C_BITRATE_FAST>;
    zephyr,concat-buf-size=<32>;
    zephyr,flash-buf-max-size=<32>;
    aem13920: aem13920@41{
        compatible = "i2c-device";
        reg = < 0x41 >;    
    };
    npm1304_ek_pmic: pmic@6b {
        compatible = "nordic,npm1304";
        reg = <0x6b>;

        npm1304_ek_regulators: regulators {
            compatible = "nordic,npm1304-regulator";

            /* limits are set to min/max allowed values */
            npm1304_ek_buck1: BUCK1 {
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <3300000>;
                retention-microvolt = <1200000>;
            };
        };
            npm1304_ek_charger: charger {
            compatible = "nordic,npm1304-charger";
            term-microvolt = <4150000>;
            term-warm-microvolt = <4000000>;
            current-microamp = <12000>;     // Must be 32000 for NPM1300
            vbus-limit-microamp = <500000>;
            thermistor-ohms = <10000>;
            thermistor-beta = <3380>;
            charging-enable;
            // vbatlow-charge-enable;
            // dischg-limit-microamp = <1000000>; //Must be uncomment for NPM1300 (SDK 3.0.1)
        };
        npm1304_ek_leds: leds {
            compatible = "nordic,npm1304-led";
            nordic,led0-mode = "error";
            nordic,led1-mode = "charging";
            nordic,led2-mode = "host";
        };
    };
};

          current-microamp = <12000>;

            vbus-limit-microamp = <500000>;
            thermistor-ohms = <10000>;
            thermistor-beta = <3380>;
            charging-enable;            // vbatlow-charge-enable;
            // dischg-limit-microamp = <1000000>;
        };
        npm1304_ek_leds: leds {
            compatible = "nordic,npm1304-led";
            nordic,led0-mode = "error";
            nordic,led1-mode = "charging";
            nordic,led2-mode = "host";
        };
    };
};
Parents
  • Hi

    Feedback from the developers on this: If NTC is not used and NTC is connected to GND, you also ened to disable battery temperature monitoring in the SW with the BCHGDISABLESET register. See page 29 in the product specification for details.

    So seems like a patch isn't necessary, but rather a setting in SW is required when NTC is not in use.

    Best regards,

    Simon

  • ah, ok. I will try. Thanks..

    A final question,

    How would a new design look like?

    Should then NTC be connected to GND (with IC2 register write) or to a 10K resistor (without register write)?

    Or should there be a device tree option where you choose 'Not_use_NTC'  regardless of how NTC pin is connected?

  • Just want to confirm the 'patch' worked well... but not very nice as a permanent solution. 
    Anyway, I'm pleased now!!

    For someone else having this issue... one can probably clean it out a bit..

    Add in the npm init() routine 

    struct npm13xx_charger_config {
        const struct device *mfd; 
    };
    // Patch to not using NTC.. we need to tell pmic not to care about temperature
    // chargerbase = 0x03
    // register = 0x06
    // write value = 0x02
    const struct npm13xx_charger_config *const config = charger->config;
    mfd_npm13xx_reg_write(config->mfd,0x03,0x06,0x02);
Reply
  • Just want to confirm the 'patch' worked well... but not very nice as a permanent solution. 
    Anyway, I'm pleased now!!

    For someone else having this issue... one can probably clean it out a bit..

    Add in the npm init() routine 

    struct npm13xx_charger_config {
        const struct device *mfd; 
    };
    // Patch to not using NTC.. we need to tell pmic not to care about temperature
    // chargerbase = 0x03
    // register = 0x06
    // write value = 0x02
    const struct npm13xx_charger_config *const config = charger->config;
    mfd_npm13xx_reg_write(config->mfd,0x03,0x06,0x02);
Children
No Data
Related