no device npm1300_ek (one button sample) with nRF52 DK on I2C Bus

I try to get the one button sample to work. There were several details missing to be able to compile and run this sample, which was very frustrating. After editing/updating the

prj.conf: CONFIG_I2C=y

CMakeLists.txt: set(SHIELD npm1300_ek)

nrf52dk_nrf52832.overlay:

 #include <zephyr/dt-bindings/pinctrl/nrf-pinctrl.h>

 &i2c1 {
 status = "okay";
 pinctrl-0 = <&i2c1_default>;
 pinctrl-1 = <&i2c1_sleep>;
 pinctrl-names = "default", "sleep";
 clock-frequency = <I2C_BITRATE_STANDARD>; 
 //clock-frequency = <10000>;
 };
 
 &i2c1_default {
 group1 {
 psels = <NRF_PSEL(TWIM_SDA, 0, 26)>,
 <NRF_PSEL(TWIM_SCL, 0, 27)>;
 bias-pull-up;
 };
};

&i2c1_sleep {
 group1 {
 psels = <NRF_PSEL(TWIM_SDA, 0, 26)>,
 <NRF_PSEL(TWIM_SCL, 0, 27)>;
 low-power-enable;
 };
};

My zephyr.dts i2c1 snippet:

/* node '/soc/i2c@40004000' defined in zephyr/dts/arm/nordic/nrf52832.dtsi:172 */
		i2c1: i2c@40004000 {
			#address-cells = < 0x1 >;      /* in zephyr/dts/arm/nordic/nrf52832.dtsi:181 */
			#size-cells = < 0x0 >;         /* in zephyr/dts/arm/nordic/nrf52832.dtsi:182 */
			reg = < 0x40004000 0x1000 >;   /* in zephyr/dts/arm/nordic/nrf52832.dtsi:183 */
			interrupts = < 0x4 0x1 >;      /* in zephyr/dts/arm/nordic/nrf52832.dtsi:184 */
			easydma-maxcnt-bits = < 0x8 >; /* in zephyr/dts/arm/nordic/nrf52832.dtsi:185 */
			zephyr,pm-device-runtime-auto; /* in zephyr/dts/arm/nordic/nrf52832.dtsi:187 */
			compatible = "nordic,nrf-twi"; /* in zephyr/boards/nordic/nrf52dk/nrf52dk_nrf52832.dts:188 */
			status = "okay";               /* in ../../../../mnt/df01dc22-f3bf-40d5-9858-752a58c9832d/devprojects/nordicsemi/npm13xx_one_button/build/npm13xx_one_button/zephyr/boards/nrf52dk_nrf52832.overlay:9 */
			pinctrl-0 = < &i2c1_default >; /* in ../../../../mnt/df01dc22-f3bf-40d5-9858-752a58c9832d/devprojects/nordicsemi/npm13xx_one_button/build/npm13xx_one_button/zephyr/boards/nrf52dk_nrf52832.overlay:10 */
			pinctrl-1 = < &i2c1_sleep >;   /* in ../../../../mnt/df01dc22-f3bf-40d5-9858-752a58c9832d/devprojects/nordicsemi/npm13xx_one_button/build/npm13xx_one_button/zephyr/boards/nrf52dk_nrf52832.overlay:11 */
			pinctrl-names = "default",
			                "sleep";       /* in ../../../../mnt/df01dc22-f3bf-40d5-9858-752a58c9832d/devprojects/nordicsemi/npm13xx_one_button/build/npm13xx_one_button/zephyr/boards/nrf52dk_nrf52832.overlay:12 */
			clock-frequency = < 0x186a0 >; /* in ../../../../mnt/df01dc22-f3bf-40d5-9858-752a58c9832d/devprojects/nordicsemi/npm13xx_one_button/build/npm13xx_one_button/zephyr/boards/nrf52dk_nrf52832.overlay:13 */
		};

with claudes assistance/support i got it to compile and run. But an i2c scan i2c0 shows no device at all.

What minimal required steps/configuration have to setup to get I2C enabled and detect devices on the bus should be?

Trying with the nrf-connect (Ubuntu) Linux-Desktop app (2x USB -C, 1x LiPo Battery) i get NPM detected, the LiPo Battery to and can change parameters for ex. the LED's live, so the BOARD is working.

Any support/hint/help is appreciated.

  • HI, i tried some LOG_DBG and some LED switching....with worked partially but is confusing too.

    static const struct device *leds_npm = NPM13XX_DEVICE(leds);
    
    int main(void)
    {
    
    	k_sleep(K_MSEC(100));
    	LOG_DBG("=====Boot complete=====");
    
    	int err = i2c_is_ready_dt(&i2c_spec);
    
    	k_sleep(K_MSEC(1000));	
    	
    	printk("====One Button===\n");
    	//printk("PMIC Init Status: %d\n", device_init(pmic->state));
    	LOG_DBG("I2C bus state: %d", err);
    	LOG_DBG("I2C0 state: %p", (void*)i2c->state);
    	LOG_DBG("LEDs name: %s\n", leds_npm->name);
    	k_sleep(K_MSEC(100));
    	LOG_DBG("LEDs ready: %d\n", device_is_ready(leds));
    	k_sleep(K_MSEC(100));
    	LOG_DBG("PMIC name: %s", (pmic->name));	
    	LOG_DBG("PMIC state: %p", (void*)pmic->state);
    	//LOG_DBG("PMIC config: %s", pmic->ops);
    	LOG_DBG("Charger name: %s", (charger->name));	
    
    	/*
    	if (!device_is_ready(leds)) {
    		printk("Error: led device is not ready\n");
    		//return 0;		
    	}
    
    	if (!configure_events()) {
    		printk("Error: could not configure events\n");
    		//return 0;
    	}*/
    
    	while (1) {
    		led_on(leds_npm, 2U);
    		k_msleep(flash_time_ms);
    		led_off(leds_npm, 2U);
    		k_msleep(flash_time_ms);
    	}
    }

    The amber LED is blinking, removing SDA/SDC or Jumper on P17 results in no blinking.

    Adding another LED1 by:

    -adapt npm1300.overlay with: >nordic,led1-mode="host";<

    pristine rebuild DOESN'T work, against expectation. Why?

    The LED is "not ready", but switching in a while loop, so the I2C signal from nRF52 DK is obviously working. Confusing.

  • Hi,

     

    Here is the .hex that I used for testing:

    8400.zephyr.hex 

    And here is a picture of my setup:

    It is similar to yours, and I also tried setting up similar to your setup (P15 header), and still did not see any issues.

     

    Could you try my .hex file and see if this behaves similar?

     

    Kind regards,

    Håkon

  • HI, thanks for the file, but how do i flash the hexfile onto my nRF52 DK in VS Code?

  • You can use nrfutil from cmd line:

    nrfutil device program --firmware zephyr.hex

     

    Or you can use the nRF connect for desktop -> "Programmer" application if you want a graphical interface.

     

    Kind regards,

    Håkon

  • *** Booting nRF Connect SDK v3.3.0-ba167d9f3db4 ***
    *** Using Zephyr OS v4.3.99-fd9204a02d52 ***
    Set up button at gpio@50000000 pin 13
    V: 4.165 I: 0.0001 T: 24.79
    Charger Status: 5, Error: 0, VBUS: connected
    V: 4.165 I: 0.0003 T: 24.79
    Charger Status: 5, Error: 0, VBUS: connected
    V: 4.165 I: 0.0001 T: 24.79
    Charger Status: 5, Error: 0, VBUS: connected
    V: 4.165 I: 0.0001 T: 24.79

Related