Power consumption on UART

Hello,

I'm trying to reduce the power conception of my custom board with a nrf52840 and a 4g modem on uart.

For this test, I reduce the code to a loop (modem is off)


        k_msleep(5000);
        pm_device_action_run(modem_uart, PM_DEVICE_ACTION_RESUME);
        k_msleep(5000);
        pm_device_action_run(modem_uart, PM_DEVICE_ACTION_SUSPEND);
 
If I disable the rx to the uart on modem pins with disable-rx; on dts file:
Current is  30µA on suspend, 1.5mA on resume -> this is what I expect but I need RX 
 
If I put the uart on others pins(unconnected) with RX enable:
Current is  30µA on suspend, 1.5mA on resume -> it's OK
 
If I put the uart on the modem pin.
Current is  500µA on suspend, 1.5mA on resume.
 
I assume modem have a ON lvl on its TX even when off and draws current.
But I can't explain why it is not disconnected when the suspend happens. This is the purpose of "low-power-enable": disconnect the pin and put it as a input.
Why I have a difference between disable-rx and low-power-enable options?
 
uart pins in DTS file:
 uart1_default: uart1_default {
         group1 {
             psels = <NRF_PSEL(UART_TX, 1, 7)>,
                        <NRF_PSEL(UART_RX, 1, 4)>;
         };
     };
     
uart1_sleep: uart1_sleep {
        group1 {
            psels = <NRF_PSEL(UART_TX, 1,7)>,<NRF_PSEL (UART_RX, 1,4)>;
            low-power-enable;
        };
    };
 
I tried async uart, with uart_rx_disable before suspend but idle current is now 3mA! I tried the low power uart but current is 500µ too.
How can I have a low current of 30uA  with the suspend mechanism ( or other solution)
Thanks you
Parents
  • Hi Sylvain,

    If I put the uart on the modem pin.
    Current is  500µA on suspend, 1.5mA on resume.

    Which modem pin are you using? Are you sure that P1.04 is not used for anything else?

    Can you post me your zephyr.dts file from your build\zephyr  folder?

  • Rx is on Uart Tx of the modem  and TX is on Uart Rx.

    I don't understand why disable-rx option has a different power consumption than low-power enable.

    Find my zephyr.dts below, thanks

    /dts-v1/;
    
    / {
        #address-cells = < 0x1 >;
        #size-cells = < 0x1 >;
        model = "Custom Plank Board";
        compatible = "vendor,custom-plank";
        chosen {
            zephyr,entropy = &cryptocell;
            zephyr,flash-controller = &flash_controller;
            zephyr,console = &cdc_acm_uart0;
            zephyr,sram = &sram0;
            zephyr,flash = &flash0;
            zephyr,user = &gpio0;
            zephyr,shell-uart = &cdc_acm_uart0;
            zephyr,uart-mcumgr = &cdc_acm_uart0;
            zephyr,code_partition = &slot0_partition;
        };
        aliases {
            pwm-led0 = &pwm_led0;
            modem = &modem;
            gnss = &gnss;
            lte = &lte;
        };
        soc {
            #address-cells = < 0x1 >;
            #size-cells = < 0x1 >;
            compatible = "nordic,nrf52840-qiaa", "nordic,nrf52840", "nordic,nrf52", "simple-bus";
            interrupt-parent = < &nvic >;
            ranges;
            nvic: interrupt-controller@e000e100 {
                #address-cells = < 0x1 >;
                compatible = "arm,v7m-nvic";
                reg = < 0xe000e100 0xc00 >;
                interrupt-controller;
                #interrupt-cells = < 0x2 >;
                arm,num-irq-priority-bits = < 0x3 >;
                phandle = < 0x1 >;
            };
            systick: timer@e000e010 {
                compatible = "arm,armv7m-systick";
                reg = < 0xe000e010 0x10 >;
                status = "disabled";
            };
            ficr: ficr@10000000 {
                compatible = "nordic,nrf-ficr";
                reg = < 0x10000000 0x1000 >;
                #nordic,ficr-cells = < 0x1 >;
                status = "okay";
            };
            uicr: uicr@10001000 {
                compatible = "nordic,nrf-uicr";
                reg = < 0x10001000 0x1000 >;
                status = "disabled";
            };
            sram0: memory@20000000 {
                compatible = "mmio-sram";
                reg = < 0x20000000 0x40000 >;
            };
            clock: clock@40000000 {
                compatible = "nordic,nrf-clock";
                reg = < 0x40000000 0x1000 >;
                interrupts = < 0x0 0x1 >;
                status = "okay";
            };
            power: power@40000000 {
                compatible = "nordic,nrf-power";
                reg = < 0x40000000 0x1000 >;
                interrupts = < 0x0 0x1 >;
                status = "okay";
                #address-cells = < 0x1 >;
                #size-cells = < 0x1 >;
                gpregret1: gpregret1@4000051c {
                    #address-cells = < 0x1 >;
                    #size-cells = < 0x1 >;
                    compatible = "nordic,nrf-gpregret";
                    reg = < 0x4000051c 0x1 >;
                    status = "okay";
                };
                gpregret2: gpregret2@40000520 {
                    #address-cells = < 0x1 >;
                    #size-cells = < 0x1 >;
                    compatible = "nordic,nrf-gpregret";
                    reg = < 0x40000520 0x1 >;
                    status = "okay";
                };
            };
            radio: radio@40001000 {
                compatible = "nordic,nrf-radio";
                reg = < 0x40001000 0x1000 >;
                interrupts = < 0x1 0x1 >;
                status = "okay";
                ieee802154-supported;
                ble-2mbps-supported;
                ble-coded-phy-supported;
                tx-high-power-supported;
                ieee802154: ieee802154 {
                    compatible = "nordic,nrf-ieee802154";
                    status = "disabled";
                };
            };
            uart0: uart@40002000 {
                compatible = "nordic,nrf-uarte";
                reg = < 0x40002000 0x1000 >;
                interrupts = < 0x2 0x1 >;
                status = "disabled";
                disable-rx;
            };
            i2c0: i2c@40003000 {
                compatible = "nordic,nrf-twi";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40003000 0x1000 >;
                clock-frequency = < 0x186a0 >;
                interrupts = < 0x3 0x1 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "okay";
                pinctrl-0 = < &i2c0_default >;
                pinctrl-1 = < &i2c0_sleep >;
                pinctrl-names = "default", "sleep";
                pca9420_pmic@61 {
                    compatible = "zephyr,pca9420_pmic";
                    reg = < 0x61 >;
                };
                lsm6ds0_detection@6a {
                    compatible = "zephyr,lsm6ds0_detection";
                    input-gpios = < &gpio1 0xf 0x0 >;
                    reg = < 0x6a >;
                };
            };
            spi0: spi@40003000 {
                compatible = "nordic,nrf-spim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40003000 0x1000 >;
                interrupts = < 0x3 0x1 >;
                max-frequency = < 0x7a1200 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "disabled";
            };
            i2c1: i2c@40004000 {
                compatible = "nordic,nrf-twim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40004000 0x1000 >;
                clock-frequency = < 0x186a0 >;
                interrupts = < 0x4 0x1 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "disabled";
            };
            spi1: spi@40004000 {
                compatible = "nordic,nrf-spim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40004000 0x1000 >;
                interrupts = < 0x4 0x1 >;
                max-frequency = < 0x7a1200 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "disabled";
            };
            nfct: nfct@40005000 {
                compatible = "nordic,nrf-nfct";
                reg = < 0x40005000 0x1000 >;
                interrupts = < 0x5 0x1 >;
                status = "disabled";
            };
            gpiote: gpiote0: gpiote@40006000 {
                compatible = "nordic,nrf-gpiote";
                reg = < 0x40006000 0x1000 >;
                interrupts = < 0x6 0x5 >;
                status = "okay";
                instance = < 0x0 >;
                phandle = < 0xa >;
            };
            adc: adc@40007000 {
                compatible = "nordic,nrf-saadc";
                reg = < 0x40007000 0x1000 >;
                interrupts = < 0x7 0x1 >;
                status = "disabled";
                #io-channel-cells = < 0x1 >;
            };
            timer0: timer@40008000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x40008000 0x1000 >;
                cc-num = < 0x4 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0x8 0x1 >;
                prescaler = < 0x0 >;
            };
            timer1: timer@40009000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x40009000 0x1000 >;
                cc-num = < 0x4 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0x9 0x1 >;
                prescaler = < 0x0 >;
                phandle = < 0xb >;
            };
            timer2: timer@4000a000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x4000a000 0x1000 >;
                cc-num = < 0x4 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0xa 0x1 >;
                prescaler = < 0x0 >;
            };
            rtc0: rtc@4000b000 {
                compatible = "nordic,nrf-rtc";
                reg = < 0x4000b000 0x1000 >;
                cc-num = < 0x3 >;
                interrupts = < 0xb 0x1 >;
                status = "disabled";
                clock-frequency = < 0x8000 >;
                prescaler = < 0x1 >;
            };
            temp: temp@4000c000 {
                compatible = "nordic,nrf-temp";
                reg = < 0x4000c000 0x1000 >;
                interrupts = < 0xc 0x1 >;
                status = "okay";
            };
            rng: random@4000d000 {
                compatible = "nordic,nrf-rng";
                reg = < 0x4000d000 0x1000 >;
                interrupts = < 0xd 0x1 >;
                status = "okay";
            };
            ecb: ecb@4000e000 {
                compatible = "nordic,nrf-ecb";
                reg = < 0x4000e000 0x1000 >;
                interrupts = < 0xe 0x1 >;
                status = "okay";
            };
            ccm: ccm@4000f000 {
                compatible = "nordic,nrf-ccm";
                reg = < 0x4000f000 0x1000 >;
                interrupts = < 0xf 0x1 >;
                length-field-length-8-bits;
                status = "okay";
            };
            wdt: wdt0: watchdog@40010000 {
                compatible = "nordic,nrf-wdt";
                reg = < 0x40010000 0x1000 >;
                interrupts = < 0x10 0x1 >;
                status = "okay";
            };
            rtc1: rtc@40011000 {
                compatible = "nordic,nrf-rtc";
                reg = < 0x40011000 0x1000 >;
                cc-num = < 0x4 >;
                interrupts = < 0x11 0x1 >;
                status = "disabled";
                clock-frequency = < 0x8000 >;
                prescaler = < 0x1 >;
            };
            qdec: qdec0: qdec@40012000 {
                compatible = "nordic,nrf-qdec";
                reg = < 0x40012000 0x1000 >;
                interrupts = < 0x12 0x1 >;
                status = "disabled";
            };
            comp: comparator@40013000 {
                compatible = "nordic,nrf-comp";
                reg = < 0x40013000 0x1000 >;
                interrupts = < 0x13 0x1 >;
                status = "disabled";
                #io-channel-cells = < 0x1 >;
            };
            egu0: swi0: egu@40014000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40014000 0x1000 >;
                interrupts = < 0x14 0x1 >;
                status = "okay";
            };
            egu1: swi1: egu@40015000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40015000 0x1000 >;
                interrupts = < 0x15 0x1 >;
                status = "okay";
            };
            egu2: swi2: egu@40016000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40016000 0x1000 >;
                interrupts = < 0x16 0x1 >;
                status = "okay";
            };
            egu3: swi3: egu@40017000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40017000 0x1000 >;
                interrupts = < 0x17 0x1 >;
                status = "okay";
            };
            egu4: swi4: egu@40018000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40018000 0x1000 >;
                interrupts = < 0x18 0x1 >;
                status = "okay";
            };
            egu5: swi5: egu@40019000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40019000 0x1000 >;
                interrupts = < 0x19 0x1 >;
                status = "okay";
            };
            timer3: timer@4001a000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x4001a000 0x1000 >;
                cc-num = < 0x6 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0x1a 0x1 >;
                prescaler = < 0x0 >;
            };
            timer4: timer@4001b000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x4001b000 0x1000 >;
                cc-num = < 0x6 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0x1b 0x1 >;
                prescaler = < 0x0 >;
            };
            pwm0: pwm@4001c000 {
                compatible = "nordic,nrf-pwm";
                reg = < 0x4001c000 0x1000 >;
                interrupts = < 0x1c 0x1 >;
                status = "okay";
                #pwm-cells = < 0x3 >;
                pinctrl-0 = < &pwm0_default >;
                pinctrl-1 = < &pwm0_sleep >;
                pinctrl-names = "default", "sleep";
                phandle = < 0xc >;
            };
            pdm0: pdm@4001d000 {
                compatible = "nordic,nrf-pdm";
                reg = < 0x4001d000 0x1000 >;
                interrupts = < 0x1d 0x1 >;
                status = "disabled";
            };
            acl: acl@4001e000 {
                compatible = "nordic,nrf-acl";
                reg = < 0x4001e000 0x1000 >;
                status = "okay";
            };
            flash_controller: flash-controller@4001e000 {
                compatible = "nordic,nrf52-flash-controller";
                reg = < 0x4001e000 0x1000 >;
                partial-erase;
                #address-cells = < 0x1 >;
                #size-cells = < 0x1 >;
                flash0: flash@0 {
                    compatible = "soc-nv-flash";
                    erase-block-size = < 0x1000 >;
                    write-block-size = < 0x4 >;
                    reg = < 0x0 0x100000 >;
                    partitions {
                        compatible = "fixed-partitions";
                        #address-cells = < 0x1 >;
                        #size-cells = < 0x1 >;
                        boot_partition: partition@0 {
                            label = "mcuboot";
                            reg = < 0x0 0xc000 >;
                        };
                        slot0_partition: partition@c000 {
                            label = "image-0";
                            reg = < 0xc000 0x76000 >;
                        };
                        slot1_partition: partition@82000 {
                            label = "image-1";
                            reg = < 0x82000 0x76000 >;
                        };
                        storage_partition: partition@f8000 {
                            label = "storage";
                            reg = < 0xf8000 0x4000 >;
                        };
                    };
                };
            };
            ppi: ppi@4001f000 {
                compatible = "nordic,nrf-ppi";
                reg = < 0x4001f000 0x1000 >;
                status = "okay";
            };
            mwu: mwu@40020000 {
                compatible = "nordic,nrf-mwu";
                reg = < 0x40020000 0x1000 >;
                status = "okay";
            };
            pwm1: pwm@40021000 {
                compatible = "nordic,nrf-pwm";
                reg = < 0x40021000 0x1000 >;
                interrupts = < 0x21 0x1 >;
                status = "disabled";
                #pwm-cells = < 0x3 >;
            };
            pwm2: pwm@40022000 {
                compatible = "nordic,nrf-pwm";
                reg = < 0x40022000 0x1000 >;
                interrupts = < 0x22 0x1 >;
                status = "disabled";
                #pwm-cells = < 0x3 >;
            };
            spi2: spi@40023000 {
                compatible = "nordic,nrf-spim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40023000 0x1000 >;
                interrupts = < 0x23 0x1 >;
                max-frequency = < 0x7a1200 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "disabled";
            };
            rtc2: rtc@40024000 {
                compatible = "nordic,nrf-rtc";
                reg = < 0x40024000 0x1000 >;
                cc-num = < 0x4 >;
                interrupts = < 0x24 0x1 >;
                status = "disabled";
                clock-frequency = < 0x8000 >;
                prescaler = < 0x1 >;
            };
            i2s0: i2s@40025000 {
                compatible = "nordic,nrf-i2s";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40025000 0x1000 >;
                interrupts = < 0x25 0x1 >;
                status = "disabled";
            };
            usbd: zephyr_udc0: usbd@40027000 {
                compatible = "nordic,nrf-usbd";
                reg = < 0x40027000 0x1000 >;
                interrupts = < 0x27 0x1 >;
                num-bidir-endpoints = < 0x1 >;
                num-in-endpoints = < 0x7 >;
                num-out-endpoints = < 0x7 >;
                num-isoin-endpoints = < 0x1 >;
                num-isoout-endpoints = < 0x1 >;
                status = "okay";
                cdc_acm_uart0: cdc_acm_uart0 {
                    compatible = "zephyr,cdc-acm-uart";
                    current-speed = < 0x38400 >;
                };
            };
            uart1: uart@40028000 {
                compatible = "nordic,nrf-uarte";
                reg = < 0x40028000 0x1000 >;
                interrupts = < 0x28 0x1 >;
                status = "okay";
                current-speed = < 0x1c200 >;
                pinctrl-0 = < &uart1_default >;
                pinctrl-1 = < &uart1_sleep >;
                pinctrl-names = "default", "sleep";
                modem: modem {
                    compatible = "quectel,bg600";
                    mdm-power-gpios = < &gpio0 0x2 0x0 >;
                    mdm-status-gpios = < &gpio1 0xd 0x0 >;
                    mdm-dtr-gpios = < &gpio1 0x1 0x0 >;
                    status = "okay";
                    gnss: gnss {
                        compatible = "quectel,bg600-gnss";
                        status = "okay";
                    };
                    lte: lte {
                        compatible = "quectel,bg600-lte";
                        status = "okay";
                    };
                };
            };
            qspi: qspi@40029000 {
                compatible = "nordic,nrf-qspi";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40029000 0x1000 >, < 0x12000000 0x8000000 >;
                reg-names = "qspi", "qspi_mm";
                interrupts = < 0x29 0x1 >;
                status = "disabled";
            };
            pwm3: pwm@4002d000 {
                compatible = "nordic,nrf-pwm";
                reg = < 0x4002d000 0x1000 >;
                interrupts = < 0x2d 0x1 >;
                status = "disabled";
                #pwm-cells = < 0x3 >;
            };
            spi3: spi@4002f000 {
                compatible = "nordic,nrf-spim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x4002f000 0x1000 >;
                interrupts = < 0x2f 0x1 >;
                max-frequency = < 0x1e84800 >;
                easydma-maxcnt-bits = < 0x10 >;
                rx-delay-supported;
                rx-delay = < 0x2 >;
                status = "disabled";
            };
            gpio0: gpio@50000000 {
                compatible = "nordic,nrf-gpio";
                gpio-controller;
                reg = < 0x50000000 0x200 0x50000500 0x300 >;
                #gpio-cells = < 0x2 >;
                status = "okay";
                port = < 0x0 >;
                gpiote-instance = < &gpiote >;
                phandle = < 0x9 >;
            };
            gpio1: gpio@50000300 {
                compatible = "nordic,nrf-gpio";
                gpio-controller;
                reg = < 0x50000300 0x200 0x50000800 0x300 >;
                #gpio-cells = < 0x2 >;
                ngpios = < 0x10 >;
                status = "okay";
                port = < 0x1 >;
                gpiote-instance = < &gpiote >;
                phandle = < 0x4 >;
            };
            cryptocell: crypto@5002a000 {
                compatible = "nordic,cryptocell", "arm,cryptocell-310";
                reg = < 0x5002a000 0x1000 >, < 0x5002b000 0x1000 >;
                reg-names = "wrapper", "core";
                interrupts = < 0x2a 0x1 >;
                status = "okay";
            };
        };
        pinctrl: pin-controller {
            compatible = "nordic,nrf-pinctrl";
            i2c0_default: i2c0_default {
                phandle = < 0x2 >;
                group1 {
                    psels = < 0x16002b >, < 0x18002a >;
                    bias-pull-up;
                };
            };
            i2c0_sleep: i2c0_sleep {
                phandle = < 0x3 >;
                group1 {
                    psels = < 0x16002b >, < 0x18002a >;
                };
            };
            uart0_default: uart0_default {
                group1 {
                    psels = < 0x4 >, < 0x401ff >;
                };
                group2 {
                    psels = < 0x2001a >, < 0x601ff >;
                };
            };
            uart1_default: uart1_default {
                phandle = < 0x7 >;
                group1 {
                    psels = < 0x27 >, < 0x20024 >, < 0x401ff >, < 0x601ff >;
                };
            };
            uart1_sleep: uart1_sleep {
                phandle = < 0x8 >;
                group1 {
                    psels = < 0x27 >, < 0x20024 >;
                    low-power-enable;
                    bias-disable;
                };
            };
            pwm0_default: pwm0_default {
                phandle = < 0x5 >;
                group1 {
                    psels = < 0x2c0023 >;
                };
            };
            pwm0_sleep: pwm0_sleep {
                phandle = < 0x6 >;
                group1 {
                    psels = < 0x2c0023 >;
                    low-power-enable;
                };
            };
        };
        rng_hci: entropy_bt_hci {
            compatible = "zephyr,bt-hci-entropy";
            status = "okay";
        };
        sw_pwm: sw-pwm {
            compatible = "nordic,nrf-sw-pwm";
            status = "disabled";
            generator = < &timer1 >;
            clock-prescaler = < 0x0 >;
            #pwm-cells = < 0x3 >;
        };
        cpus {
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            cpu@0 {
                device_type = "cpu";
                compatible = "arm,cortex-m4f";
                reg = < 0x0 >;
                #address-cells = < 0x1 >;
                #size-cells = < 0x1 >;
                itm: itm@e0000000 {
                    compatible = "arm,armv7m-itm";
                    reg = < 0xe0000000 0x1000 >;
                    swo-ref-frequency = < 0x1e84800 >;
                };
            };
        };
        zephyr,user {
            usb-gpios = < &gpio1 0x9 0x11 >;
        };
        pwmleds {
            compatible = "pwm-leds";
            pwm_led0: pwm_led_0 {
                pwms = < &pwm0 0x0 0x1312d00 0x0 >;
            };
        };
    };

Reply
  • Rx is on Uart Tx of the modem  and TX is on Uart Rx.

    I don't understand why disable-rx option has a different power consumption than low-power enable.

    Find my zephyr.dts below, thanks

    /dts-v1/;
    
    / {
        #address-cells = < 0x1 >;
        #size-cells = < 0x1 >;
        model = "Custom Plank Board";
        compatible = "vendor,custom-plank";
        chosen {
            zephyr,entropy = &cryptocell;
            zephyr,flash-controller = &flash_controller;
            zephyr,console = &cdc_acm_uart0;
            zephyr,sram = &sram0;
            zephyr,flash = &flash0;
            zephyr,user = &gpio0;
            zephyr,shell-uart = &cdc_acm_uart0;
            zephyr,uart-mcumgr = &cdc_acm_uart0;
            zephyr,code_partition = &slot0_partition;
        };
        aliases {
            pwm-led0 = &pwm_led0;
            modem = &modem;
            gnss = &gnss;
            lte = &lte;
        };
        soc {
            #address-cells = < 0x1 >;
            #size-cells = < 0x1 >;
            compatible = "nordic,nrf52840-qiaa", "nordic,nrf52840", "nordic,nrf52", "simple-bus";
            interrupt-parent = < &nvic >;
            ranges;
            nvic: interrupt-controller@e000e100 {
                #address-cells = < 0x1 >;
                compatible = "arm,v7m-nvic";
                reg = < 0xe000e100 0xc00 >;
                interrupt-controller;
                #interrupt-cells = < 0x2 >;
                arm,num-irq-priority-bits = < 0x3 >;
                phandle = < 0x1 >;
            };
            systick: timer@e000e010 {
                compatible = "arm,armv7m-systick";
                reg = < 0xe000e010 0x10 >;
                status = "disabled";
            };
            ficr: ficr@10000000 {
                compatible = "nordic,nrf-ficr";
                reg = < 0x10000000 0x1000 >;
                #nordic,ficr-cells = < 0x1 >;
                status = "okay";
            };
            uicr: uicr@10001000 {
                compatible = "nordic,nrf-uicr";
                reg = < 0x10001000 0x1000 >;
                status = "disabled";
            };
            sram0: memory@20000000 {
                compatible = "mmio-sram";
                reg = < 0x20000000 0x40000 >;
            };
            clock: clock@40000000 {
                compatible = "nordic,nrf-clock";
                reg = < 0x40000000 0x1000 >;
                interrupts = < 0x0 0x1 >;
                status = "okay";
            };
            power: power@40000000 {
                compatible = "nordic,nrf-power";
                reg = < 0x40000000 0x1000 >;
                interrupts = < 0x0 0x1 >;
                status = "okay";
                #address-cells = < 0x1 >;
                #size-cells = < 0x1 >;
                gpregret1: gpregret1@4000051c {
                    #address-cells = < 0x1 >;
                    #size-cells = < 0x1 >;
                    compatible = "nordic,nrf-gpregret";
                    reg = < 0x4000051c 0x1 >;
                    status = "okay";
                };
                gpregret2: gpregret2@40000520 {
                    #address-cells = < 0x1 >;
                    #size-cells = < 0x1 >;
                    compatible = "nordic,nrf-gpregret";
                    reg = < 0x40000520 0x1 >;
                    status = "okay";
                };
            };
            radio: radio@40001000 {
                compatible = "nordic,nrf-radio";
                reg = < 0x40001000 0x1000 >;
                interrupts = < 0x1 0x1 >;
                status = "okay";
                ieee802154-supported;
                ble-2mbps-supported;
                ble-coded-phy-supported;
                tx-high-power-supported;
                ieee802154: ieee802154 {
                    compatible = "nordic,nrf-ieee802154";
                    status = "disabled";
                };
            };
            uart0: uart@40002000 {
                compatible = "nordic,nrf-uarte";
                reg = < 0x40002000 0x1000 >;
                interrupts = < 0x2 0x1 >;
                status = "disabled";
                disable-rx;
            };
            i2c0: i2c@40003000 {
                compatible = "nordic,nrf-twi";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40003000 0x1000 >;
                clock-frequency = < 0x186a0 >;
                interrupts = < 0x3 0x1 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "okay";
                pinctrl-0 = < &i2c0_default >;
                pinctrl-1 = < &i2c0_sleep >;
                pinctrl-names = "default", "sleep";
                pca9420_pmic@61 {
                    compatible = "zephyr,pca9420_pmic";
                    reg = < 0x61 >;
                };
                lsm6ds0_detection@6a {
                    compatible = "zephyr,lsm6ds0_detection";
                    input-gpios = < &gpio1 0xf 0x0 >;
                    reg = < 0x6a >;
                };
            };
            spi0: spi@40003000 {
                compatible = "nordic,nrf-spim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40003000 0x1000 >;
                interrupts = < 0x3 0x1 >;
                max-frequency = < 0x7a1200 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "disabled";
            };
            i2c1: i2c@40004000 {
                compatible = "nordic,nrf-twim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40004000 0x1000 >;
                clock-frequency = < 0x186a0 >;
                interrupts = < 0x4 0x1 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "disabled";
            };
            spi1: spi@40004000 {
                compatible = "nordic,nrf-spim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40004000 0x1000 >;
                interrupts = < 0x4 0x1 >;
                max-frequency = < 0x7a1200 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "disabled";
            };
            nfct: nfct@40005000 {
                compatible = "nordic,nrf-nfct";
                reg = < 0x40005000 0x1000 >;
                interrupts = < 0x5 0x1 >;
                status = "disabled";
            };
            gpiote: gpiote0: gpiote@40006000 {
                compatible = "nordic,nrf-gpiote";
                reg = < 0x40006000 0x1000 >;
                interrupts = < 0x6 0x5 >;
                status = "okay";
                instance = < 0x0 >;
                phandle = < 0xa >;
            };
            adc: adc@40007000 {
                compatible = "nordic,nrf-saadc";
                reg = < 0x40007000 0x1000 >;
                interrupts = < 0x7 0x1 >;
                status = "disabled";
                #io-channel-cells = < 0x1 >;
            };
            timer0: timer@40008000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x40008000 0x1000 >;
                cc-num = < 0x4 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0x8 0x1 >;
                prescaler = < 0x0 >;
            };
            timer1: timer@40009000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x40009000 0x1000 >;
                cc-num = < 0x4 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0x9 0x1 >;
                prescaler = < 0x0 >;
                phandle = < 0xb >;
            };
            timer2: timer@4000a000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x4000a000 0x1000 >;
                cc-num = < 0x4 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0xa 0x1 >;
                prescaler = < 0x0 >;
            };
            rtc0: rtc@4000b000 {
                compatible = "nordic,nrf-rtc";
                reg = < 0x4000b000 0x1000 >;
                cc-num = < 0x3 >;
                interrupts = < 0xb 0x1 >;
                status = "disabled";
                clock-frequency = < 0x8000 >;
                prescaler = < 0x1 >;
            };
            temp: temp@4000c000 {
                compatible = "nordic,nrf-temp";
                reg = < 0x4000c000 0x1000 >;
                interrupts = < 0xc 0x1 >;
                status = "okay";
            };
            rng: random@4000d000 {
                compatible = "nordic,nrf-rng";
                reg = < 0x4000d000 0x1000 >;
                interrupts = < 0xd 0x1 >;
                status = "okay";
            };
            ecb: ecb@4000e000 {
                compatible = "nordic,nrf-ecb";
                reg = < 0x4000e000 0x1000 >;
                interrupts = < 0xe 0x1 >;
                status = "okay";
            };
            ccm: ccm@4000f000 {
                compatible = "nordic,nrf-ccm";
                reg = < 0x4000f000 0x1000 >;
                interrupts = < 0xf 0x1 >;
                length-field-length-8-bits;
                status = "okay";
            };
            wdt: wdt0: watchdog@40010000 {
                compatible = "nordic,nrf-wdt";
                reg = < 0x40010000 0x1000 >;
                interrupts = < 0x10 0x1 >;
                status = "okay";
            };
            rtc1: rtc@40011000 {
                compatible = "nordic,nrf-rtc";
                reg = < 0x40011000 0x1000 >;
                cc-num = < 0x4 >;
                interrupts = < 0x11 0x1 >;
                status = "disabled";
                clock-frequency = < 0x8000 >;
                prescaler = < 0x1 >;
            };
            qdec: qdec0: qdec@40012000 {
                compatible = "nordic,nrf-qdec";
                reg = < 0x40012000 0x1000 >;
                interrupts = < 0x12 0x1 >;
                status = "disabled";
            };
            comp: comparator@40013000 {
                compatible = "nordic,nrf-comp";
                reg = < 0x40013000 0x1000 >;
                interrupts = < 0x13 0x1 >;
                status = "disabled";
                #io-channel-cells = < 0x1 >;
            };
            egu0: swi0: egu@40014000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40014000 0x1000 >;
                interrupts = < 0x14 0x1 >;
                status = "okay";
            };
            egu1: swi1: egu@40015000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40015000 0x1000 >;
                interrupts = < 0x15 0x1 >;
                status = "okay";
            };
            egu2: swi2: egu@40016000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40016000 0x1000 >;
                interrupts = < 0x16 0x1 >;
                status = "okay";
            };
            egu3: swi3: egu@40017000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40017000 0x1000 >;
                interrupts = < 0x17 0x1 >;
                status = "okay";
            };
            egu4: swi4: egu@40018000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40018000 0x1000 >;
                interrupts = < 0x18 0x1 >;
                status = "okay";
            };
            egu5: swi5: egu@40019000 {
                compatible = "nordic,nrf-egu", "nordic,nrf-swi";
                reg = < 0x40019000 0x1000 >;
                interrupts = < 0x19 0x1 >;
                status = "okay";
            };
            timer3: timer@4001a000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x4001a000 0x1000 >;
                cc-num = < 0x6 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0x1a 0x1 >;
                prescaler = < 0x0 >;
            };
            timer4: timer@4001b000 {
                compatible = "nordic,nrf-timer";
                status = "disabled";
                reg = < 0x4001b000 0x1000 >;
                cc-num = < 0x6 >;
                max-bit-width = < 0x20 >;
                interrupts = < 0x1b 0x1 >;
                prescaler = < 0x0 >;
            };
            pwm0: pwm@4001c000 {
                compatible = "nordic,nrf-pwm";
                reg = < 0x4001c000 0x1000 >;
                interrupts = < 0x1c 0x1 >;
                status = "okay";
                #pwm-cells = < 0x3 >;
                pinctrl-0 = < &pwm0_default >;
                pinctrl-1 = < &pwm0_sleep >;
                pinctrl-names = "default", "sleep";
                phandle = < 0xc >;
            };
            pdm0: pdm@4001d000 {
                compatible = "nordic,nrf-pdm";
                reg = < 0x4001d000 0x1000 >;
                interrupts = < 0x1d 0x1 >;
                status = "disabled";
            };
            acl: acl@4001e000 {
                compatible = "nordic,nrf-acl";
                reg = < 0x4001e000 0x1000 >;
                status = "okay";
            };
            flash_controller: flash-controller@4001e000 {
                compatible = "nordic,nrf52-flash-controller";
                reg = < 0x4001e000 0x1000 >;
                partial-erase;
                #address-cells = < 0x1 >;
                #size-cells = < 0x1 >;
                flash0: flash@0 {
                    compatible = "soc-nv-flash";
                    erase-block-size = < 0x1000 >;
                    write-block-size = < 0x4 >;
                    reg = < 0x0 0x100000 >;
                    partitions {
                        compatible = "fixed-partitions";
                        #address-cells = < 0x1 >;
                        #size-cells = < 0x1 >;
                        boot_partition: partition@0 {
                            label = "mcuboot";
                            reg = < 0x0 0xc000 >;
                        };
                        slot0_partition: partition@c000 {
                            label = "image-0";
                            reg = < 0xc000 0x76000 >;
                        };
                        slot1_partition: partition@82000 {
                            label = "image-1";
                            reg = < 0x82000 0x76000 >;
                        };
                        storage_partition: partition@f8000 {
                            label = "storage";
                            reg = < 0xf8000 0x4000 >;
                        };
                    };
                };
            };
            ppi: ppi@4001f000 {
                compatible = "nordic,nrf-ppi";
                reg = < 0x4001f000 0x1000 >;
                status = "okay";
            };
            mwu: mwu@40020000 {
                compatible = "nordic,nrf-mwu";
                reg = < 0x40020000 0x1000 >;
                status = "okay";
            };
            pwm1: pwm@40021000 {
                compatible = "nordic,nrf-pwm";
                reg = < 0x40021000 0x1000 >;
                interrupts = < 0x21 0x1 >;
                status = "disabled";
                #pwm-cells = < 0x3 >;
            };
            pwm2: pwm@40022000 {
                compatible = "nordic,nrf-pwm";
                reg = < 0x40022000 0x1000 >;
                interrupts = < 0x22 0x1 >;
                status = "disabled";
                #pwm-cells = < 0x3 >;
            };
            spi2: spi@40023000 {
                compatible = "nordic,nrf-spim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40023000 0x1000 >;
                interrupts = < 0x23 0x1 >;
                max-frequency = < 0x7a1200 >;
                easydma-maxcnt-bits = < 0x10 >;
                status = "disabled";
            };
            rtc2: rtc@40024000 {
                compatible = "nordic,nrf-rtc";
                reg = < 0x40024000 0x1000 >;
                cc-num = < 0x4 >;
                interrupts = < 0x24 0x1 >;
                status = "disabled";
                clock-frequency = < 0x8000 >;
                prescaler = < 0x1 >;
            };
            i2s0: i2s@40025000 {
                compatible = "nordic,nrf-i2s";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40025000 0x1000 >;
                interrupts = < 0x25 0x1 >;
                status = "disabled";
            };
            usbd: zephyr_udc0: usbd@40027000 {
                compatible = "nordic,nrf-usbd";
                reg = < 0x40027000 0x1000 >;
                interrupts = < 0x27 0x1 >;
                num-bidir-endpoints = < 0x1 >;
                num-in-endpoints = < 0x7 >;
                num-out-endpoints = < 0x7 >;
                num-isoin-endpoints = < 0x1 >;
                num-isoout-endpoints = < 0x1 >;
                status = "okay";
                cdc_acm_uart0: cdc_acm_uart0 {
                    compatible = "zephyr,cdc-acm-uart";
                    current-speed = < 0x38400 >;
                };
            };
            uart1: uart@40028000 {
                compatible = "nordic,nrf-uarte";
                reg = < 0x40028000 0x1000 >;
                interrupts = < 0x28 0x1 >;
                status = "okay";
                current-speed = < 0x1c200 >;
                pinctrl-0 = < &uart1_default >;
                pinctrl-1 = < &uart1_sleep >;
                pinctrl-names = "default", "sleep";
                modem: modem {
                    compatible = "quectel,bg600";
                    mdm-power-gpios = < &gpio0 0x2 0x0 >;
                    mdm-status-gpios = < &gpio1 0xd 0x0 >;
                    mdm-dtr-gpios = < &gpio1 0x1 0x0 >;
                    status = "okay";
                    gnss: gnss {
                        compatible = "quectel,bg600-gnss";
                        status = "okay";
                    };
                    lte: lte {
                        compatible = "quectel,bg600-lte";
                        status = "okay";
                    };
                };
            };
            qspi: qspi@40029000 {
                compatible = "nordic,nrf-qspi";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x40029000 0x1000 >, < 0x12000000 0x8000000 >;
                reg-names = "qspi", "qspi_mm";
                interrupts = < 0x29 0x1 >;
                status = "disabled";
            };
            pwm3: pwm@4002d000 {
                compatible = "nordic,nrf-pwm";
                reg = < 0x4002d000 0x1000 >;
                interrupts = < 0x2d 0x1 >;
                status = "disabled";
                #pwm-cells = < 0x3 >;
            };
            spi3: spi@4002f000 {
                compatible = "nordic,nrf-spim";
                #address-cells = < 0x1 >;
                #size-cells = < 0x0 >;
                reg = < 0x4002f000 0x1000 >;
                interrupts = < 0x2f 0x1 >;
                max-frequency = < 0x1e84800 >;
                easydma-maxcnt-bits = < 0x10 >;
                rx-delay-supported;
                rx-delay = < 0x2 >;
                status = "disabled";
            };
            gpio0: gpio@50000000 {
                compatible = "nordic,nrf-gpio";
                gpio-controller;
                reg = < 0x50000000 0x200 0x50000500 0x300 >;
                #gpio-cells = < 0x2 >;
                status = "okay";
                port = < 0x0 >;
                gpiote-instance = < &gpiote >;
                phandle = < 0x9 >;
            };
            gpio1: gpio@50000300 {
                compatible = "nordic,nrf-gpio";
                gpio-controller;
                reg = < 0x50000300 0x200 0x50000800 0x300 >;
                #gpio-cells = < 0x2 >;
                ngpios = < 0x10 >;
                status = "okay";
                port = < 0x1 >;
                gpiote-instance = < &gpiote >;
                phandle = < 0x4 >;
            };
            cryptocell: crypto@5002a000 {
                compatible = "nordic,cryptocell", "arm,cryptocell-310";
                reg = < 0x5002a000 0x1000 >, < 0x5002b000 0x1000 >;
                reg-names = "wrapper", "core";
                interrupts = < 0x2a 0x1 >;
                status = "okay";
            };
        };
        pinctrl: pin-controller {
            compatible = "nordic,nrf-pinctrl";
            i2c0_default: i2c0_default {
                phandle = < 0x2 >;
                group1 {
                    psels = < 0x16002b >, < 0x18002a >;
                    bias-pull-up;
                };
            };
            i2c0_sleep: i2c0_sleep {
                phandle = < 0x3 >;
                group1 {
                    psels = < 0x16002b >, < 0x18002a >;
                };
            };
            uart0_default: uart0_default {
                group1 {
                    psels = < 0x4 >, < 0x401ff >;
                };
                group2 {
                    psels = < 0x2001a >, < 0x601ff >;
                };
            };
            uart1_default: uart1_default {
                phandle = < 0x7 >;
                group1 {
                    psels = < 0x27 >, < 0x20024 >, < 0x401ff >, < 0x601ff >;
                };
            };
            uart1_sleep: uart1_sleep {
                phandle = < 0x8 >;
                group1 {
                    psels = < 0x27 >, < 0x20024 >;
                    low-power-enable;
                    bias-disable;
                };
            };
            pwm0_default: pwm0_default {
                phandle = < 0x5 >;
                group1 {
                    psels = < 0x2c0023 >;
                };
            };
            pwm0_sleep: pwm0_sleep {
                phandle = < 0x6 >;
                group1 {
                    psels = < 0x2c0023 >;
                    low-power-enable;
                };
            };
        };
        rng_hci: entropy_bt_hci {
            compatible = "zephyr,bt-hci-entropy";
            status = "okay";
        };
        sw_pwm: sw-pwm {
            compatible = "nordic,nrf-sw-pwm";
            status = "disabled";
            generator = < &timer1 >;
            clock-prescaler = < 0x0 >;
            #pwm-cells = < 0x3 >;
        };
        cpus {
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            cpu@0 {
                device_type = "cpu";
                compatible = "arm,cortex-m4f";
                reg = < 0x0 >;
                #address-cells = < 0x1 >;
                #size-cells = < 0x1 >;
                itm: itm@e0000000 {
                    compatible = "arm,armv7m-itm";
                    reg = < 0xe0000000 0x1000 >;
                    swo-ref-frequency = < 0x1e84800 >;
                };
            };
        };
        zephyr,user {
            usb-gpios = < &gpio1 0x9 0x11 >;
        };
        pwmleds {
            compatible = "pwm-leds";
            pwm_led0: pwm_led_0 {
                pwms = < &pwm0 0x0 0x1312d00 0x0 >;
            };
        };
    };

Children
Related