nRF54LM20A GPIO and GPIO-KEYS

Hello,

I am having an issue with nRF54LM20 rev B silicon where the gpio interrupts are not consistent for key functions with either code similar to the button demo or gpio-keys. I have tried with both CONFIG_PM_DEVICE_RUNTIME set to Y and N and I still need to use polling mode. Currently my keys are on gpio1 and I updated the edge sense mask. Is there something I am missing. I am on sdk 3.4.1. I now know that gpio2 can not be used since there is not GPIOTE and that will be changed on the next rev.

buttons: buttons {
        compatible = "gpio-keys";
        status = "okay";
        debounce-interval-ms = <20>;
        no-disconnect; /* FORCES PINS TO STAY CONNECTED */
        polling-mode;

        button0: button_0 {
            gpios = <&gpio1 22 (  GPIO_ACTIVE_HIGH | GPIO_INT_WAKEUP)>;
            label = "Push button 0";
            zephyr,code = <INPUT_KEY_3>;
        };

        button1: button_1 {
            gpios = <&gpio1 29 (GPIO_PULL_UP | GPIO_ACTIVE_LOW | GPIO_INT_WAKEUP)>;
            label = "Push button 1";
            zephyr,code = <INPUT_KEY_4>;
        };

        button2: button_2 {
            gpios = <&gpio1 5 (GPIO_PULL_UP | GPIO_ACTIVE_LOW | GPIO_INT_WAKEUP)>;
            label = "Push button 2";
            zephyr,code = <INPUT_KEY_1>;
        };

        button3: button_3 {
            gpios = <&gpio2 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
            label = "Push button 3";
            zephyr,code = <INPUT_KEY_2>;
        };
    };
&gpio1 {
    status = "okay";
    sense-edge-mask = <0x20400020>; /* Pin 5, 22, and 29 bitmask */
};
Thanks
Ed
Parents
  • Hi,

     

    It sounds like you might be running into the same issue as described here?

     RE: button with "gpio-keys" not fired when CONFIG_PM_DEVICE_RUNTIME=y 

     

    Could you try to add the reference and see if this helps?

     

    Kind regards,

    Håkon

  • I had already tried that with and without the config with CONFIG_PM_DEVICE_RUNTIME=n and CONFIG_PM_DEVICE_RUNTIME=y. The button presses are only consistent when running in polled mode. Is there an nrf54lm20 errata?

    I have this in my UI init.

    pm_device_runtime_get(DEVICE_DT_GET(DT_PATH(buttons)));
  • Hi,

     

    I created a sample to try to recreate the issue:

    hello_gpio_keys.zip

    Log output: 

    *** Booting nRF Connect SDK v3.4.0-99553055607b ***
    *** Using Zephyr OS v4.4.0-bf801e4e3d19 ***
    [00:00:00.002,579] <inf> input_sample: CONFIG_PM_DEVICE_RUNTIME 1
    [00:00:00.002,596] <inf> input_sample: Hello World! nrf54lm20dk/nrf54lm20b/cpuapp
    
    [00:00:01.517,189] <inf> input_sample: Button event code 11: pressed=1
    
    [00:00:01.661,232] <inf> input_sample: Button event code 11: pressed=0
    
    [00:00:02.898,903] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:03.077,559] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:04.005,519] <inf> input_sample: Button event code 3: pressed=1
    
    [00:00:04.175,010] <inf> input_sample: Button event code 3: pressed=0
    
    [00:00:04.465,464] <inf> input_sample: Button event code 4: pressed=1
    
    [00:00:04.580,186] <inf> input_sample: Button event code 4: pressed=0

     

    I also used 

    sense-edge-mask

    on the whole of P1 port.

     

    Could you elaborate on what you observe? I do not think I am able to reproduce the issue.

     

    Kind regards,

    Håkon

  • As expected the button on port 2 does not work without polling. I am seeing missed presses on button 2 and 3 at about 50% missed presses where in polling all are caught. Button 0 crashes the device which also does not happen in polling mode.

    Non-polling

    *** Booting nRF Connect SDK v3.4.1-b20f8619ba9a ***
    *** Using Zephyr OS v4.4.2-33fa6a7aac6a ***
    [00:00:00.012,031] <inf> input_sample: CONFIG_PM_DEVICE_RUNTIME 1
    [00:00:00.012,049] <inf> input_sample: Hello World! soundbooster/nrf54lm20a/cpuapp
    
    [00:00:10.346,873] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:10.522,889] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:14.149,075] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:14.347,014] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:18.357,915] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:18.576,445] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:24.216,128] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:24.386,400] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:29.545,142] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:29.745,678] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:36.004,203] <err> os: ***** USAGE FAULT *****
    [00:00:36.004,208] <err> os:   Illegal use of the EPSR
    [00:00:36.004,217] <err> os: r0/a1:  0x20003978  r1/a2:  0xe000ed00  r2/a3:  0x20003978
    [00:00:36.004,223] <err> os: r3/a4:  0x00000000 r12/ip:  0x00000000 r14/lr:  0x000050ab
    [00:00:36.004,227] <err> os:  xpsr:  0x60000000
    [00:00:36.004,231] <err> os: Faulting instruction address (r15/pc): 0x00000000
    [00:00:36.004,248] <err> os: >>> ZEPHYR FATAL ERROR 35: Unknown error on CPU 0
    [00:00:36.004,264] <err> os: Current thread: 0x20003d28 (sysworkq)
    [00:00:36.044,865] <err> os: Halting system

    Polling

    *** Booting nRF Connect SDK v3.4.1-b20f8619ba9a ***
    *** Using Zephyr OS v4.4.2-33fa6a7aac6a ***
    [00:00:18.762,216] <inf> input_sample: CONFIG_PM_DEVICE_RUNTIME 1
    [00:00:18.762,233] <inf> input_sample: Hello World! soundbooster/nrf54lm20a/cpuapp
    
    [00:00:23.035,979] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:23.276,754] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:24.480,604] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:24.681,247] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:25.985,416] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:26.186,058] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:28.573,689] <inf> input_sample: Button event code 4: pressed=1
    
    [00:00:28.794,395] <inf> input_sample: Button event code 4: pressed=0
    
    [00:00:30.138,692] <inf> input_sample: Button event code 4: pressed=1
    
    [00:00:30.339,335] <inf> input_sample: Button event code 4: pressed=0
    
    [00:00:31.663,568] <inf> input_sample: Button event code 4: pressed=1
    
    [00:00:31.824,114] <inf> input_sample: Button event code 4: pressed=0
    
    [00:00:33.589,755] <inf> input_sample: Button event code 3: pressed=1
    
    [00:00:33.810,462] <inf> input_sample: Button event code 3: pressed=0
    
    [00:00:35.074,503] <inf> input_sample: Button event code 3: pressed=1
    
    [00:00:35.255,081] <inf> input_sample: Button event code 3: pressed=0
    
    [00:00:36.478,998] <inf> input_sample: Button event code 3: pressed=1
    
    [00:00:36.659,577] <inf> input_sample: Button event code 3: pressed=0
    
    [00:00:37.662,787] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:37.863,430] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:39.047,216] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:39.207,763] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:40.110,653] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:40.291,232] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:40.311,299] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:40.331,360] <inf> input_sample: Button event code 5: pressed=0

    Thanks

    Ed

Reply
  • As expected the button on port 2 does not work without polling. I am seeing missed presses on button 2 and 3 at about 50% missed presses where in polling all are caught. Button 0 crashes the device which also does not happen in polling mode.

    Non-polling

    *** Booting nRF Connect SDK v3.4.1-b20f8619ba9a ***
    *** Using Zephyr OS v4.4.2-33fa6a7aac6a ***
    [00:00:00.012,031] <inf> input_sample: CONFIG_PM_DEVICE_RUNTIME 1
    [00:00:00.012,049] <inf> input_sample: Hello World! soundbooster/nrf54lm20a/cpuapp
    
    [00:00:10.346,873] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:10.522,889] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:14.149,075] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:14.347,014] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:18.357,915] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:18.576,445] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:24.216,128] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:24.386,400] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:29.545,142] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:29.745,678] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:36.004,203] <err> os: ***** USAGE FAULT *****
    [00:00:36.004,208] <err> os:   Illegal use of the EPSR
    [00:00:36.004,217] <err> os: r0/a1:  0x20003978  r1/a2:  0xe000ed00  r2/a3:  0x20003978
    [00:00:36.004,223] <err> os: r3/a4:  0x00000000 r12/ip:  0x00000000 r14/lr:  0x000050ab
    [00:00:36.004,227] <err> os:  xpsr:  0x60000000
    [00:00:36.004,231] <err> os: Faulting instruction address (r15/pc): 0x00000000
    [00:00:36.004,248] <err> os: >>> ZEPHYR FATAL ERROR 35: Unknown error on CPU 0
    [00:00:36.004,264] <err> os: Current thread: 0x20003d28 (sysworkq)
    [00:00:36.044,865] <err> os: Halting system

    Polling

    *** Booting nRF Connect SDK v3.4.1-b20f8619ba9a ***
    *** Using Zephyr OS v4.4.2-33fa6a7aac6a ***
    [00:00:18.762,216] <inf> input_sample: CONFIG_PM_DEVICE_RUNTIME 1
    [00:00:18.762,233] <inf> input_sample: Hello World! soundbooster/nrf54lm20a/cpuapp
    
    [00:00:23.035,979] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:23.276,754] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:24.480,604] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:24.681,247] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:25.985,416] <inf> input_sample: Button event code 2: pressed=1
    
    [00:00:26.186,058] <inf> input_sample: Button event code 2: pressed=0
    
    [00:00:28.573,689] <inf> input_sample: Button event code 4: pressed=1
    
    [00:00:28.794,395] <inf> input_sample: Button event code 4: pressed=0
    
    [00:00:30.138,692] <inf> input_sample: Button event code 4: pressed=1
    
    [00:00:30.339,335] <inf> input_sample: Button event code 4: pressed=0
    
    [00:00:31.663,568] <inf> input_sample: Button event code 4: pressed=1
    
    [00:00:31.824,114] <inf> input_sample: Button event code 4: pressed=0
    
    [00:00:33.589,755] <inf> input_sample: Button event code 3: pressed=1
    
    [00:00:33.810,462] <inf> input_sample: Button event code 3: pressed=0
    
    [00:00:35.074,503] <inf> input_sample: Button event code 3: pressed=1
    
    [00:00:35.255,081] <inf> input_sample: Button event code 3: pressed=0
    
    [00:00:36.478,998] <inf> input_sample: Button event code 3: pressed=1
    
    [00:00:36.659,577] <inf> input_sample: Button event code 3: pressed=0
    
    [00:00:37.662,787] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:37.863,430] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:39.047,216] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:39.207,763] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:40.110,653] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:40.291,232] <inf> input_sample: Button event code 5: pressed=0
    
    [00:00:40.311,299] <inf> input_sample: Button event code 5: pressed=1
    
    [00:00:40.331,360] <inf> input_sample: Button event code 5: pressed=0

    Thanks

    Ed

Children
Related