NPM1100 Charge expected behaviour questions

Hello, and thank you for your time. We have designed an NPM1100 into a product, and are unclear on if the behaviour of the charge pin is correct (nor indeed what exactly is the expected behaviour).

Our expectation is the following: when charging is actively occurring, thats to say current is flowing into the battery, the charge pin should be active (low). In all other cases, the charge pin should be inactive (high).

We have noticed the charge pin low when there is no Vusb and our device is operating off the battery. Is this correct, that the charge pin is active when charging could potentially occur (battery voltage within the charge range) even if it is not actually occurring?

Thank you!

  • Hi

    As per the spec. the GPIOs don't have a difference in the internal pullups. Have you tried connecting it to any other pin to see if this is specific to P0.18 or if you see this behavior no matter what the pin config. As per the nPM1100 spec, the CHG pin should be connected to a host GPIO in a weak pull-up configuration, so how have you configured P0.18 exactly? Also, just to make sure, you don't have any mentions of QSPI in your project file otherwise (enabling it in kconfigs or calling the peripheral in the source code for example)?

    Best regards,

    Simon

  • Hello and thank you again for your reply and your help.

    When we test with other GPIOs, everything works exactly as expected.

    We configure 0.18 as follows:

    chargeind: charge_ind {
                gpios = <&gpio0 18 (GPIO_ACTIVE_HIGH|GPIO_PULL_UP)>;
                label = "Batt charging";
                // zephyr,code = <INPUT_KEY_0>;
            };

    In my main I then do:

    #define BATT_CRG_NODE DT_ALIAS(chargeind)
    static const struct gpio_dt_spec batt_charging = GPIO_DT_SPEC_GET(BATT_CRG_NODE, gpios);
    static struct gpio_callback batt_charging_cb_data;

    And finally

    gpio_pin_configure_dt(&batt_charging, GPIO_INPUT | GPIO_PULL_UP);

    I double checked and I do not enable QSPI in my configs, although I do enable the regular spi peripheral (but not on 0.18 obviously).

    I am using MCU Boot; could it be that I need to do config_qspi=n in the mcuboot config?

    Thank you for your help!

  • Hi i_4556,

    You suspect right that MCUboot has different configuration compared to the application. However, since you don't seem to be using QSPI external flash in your project, in most case, QSPI should not be enabled in MCUboot,

    Nevertheless, since disabling QSPI explicitly in the application yielded you some result, you could try to do so for MCUboot as well.

    Please also remember to check if QSPI is actually enabled/disabled in MCUboot by looking into the .config and zephyr.dts files in <build directory>/mcuboot/zephyr.

    Hieu

  • I think we may have found the source of the problem; I used your suggestion of checking the zephyr.dts files in both my application and the mcuboot. It is disabled in my application, but enabled in mcuboot.

    How do I disable QSPI in mcuboot? I have no real experience working with mcuboot, other than some tweaks in the mcuboot prj.config file... I am using SDK 2.5.0 and Visual Studio Code if that matters...

    This looks a lot like this issue here:  SDK 2.3.0 - can't disable qspi in DT overlay file?

    Do I just need to create a file called mcuboot.overlay in my mcuboot folder, and then add

    &qspi {
        status = "disabled";
    };

    to it?

  • i_4556 said:
    Do I just need to create a file called mcuboot.overlay in my mcuboot folder, and then add

    This is almost it. The correct file you should create is <project root>/child_image/mcuboot.overlay.

    For more information regarding configuring child images, please refer to this documentation:
    Multi-image builds — nRF Connect SDK 2.6.1 documentation (nordicsemi.com)

Related