UARTE between two nrf54l15dk not working

Hallo, we are evaluating the UART peripheral of the nrf54l15. As a first step, we are trying to get two DK to communicate with each other, unfortunately without success.

Our setup: NCS v3.1.0

First DK (receiver):

Overlay:

/ {
  chosen {
    /delete-property/ zephyr,console;
    /delete-property/ zephyr,shell-uart;
    /delete-property/ zephyr,uart-mcumgr;
    /delete-property/ zephyr,bt-mon-uart;
    /delete-property/ zephyr,bt-c2h-uart;
  };
};

&spi00 {
  status = "disabled";
};

&uart20 {
  status = "okay";
  current-speed = <921600>;
  pinctrl-0 = <&uart20_default>;
  pinctrl-1 = <&uart20_sleep>;
  pinctrl-names = "default", "sleep";
};

&pinctrl {
  /omit-if-no-ref/ uart20_default: uart20_default {
    group1 {
      psels = <NRF_PSEL(UART_TX, 1, 4)>,
        <NRF_PSEL(UART_RTS, 1, 6)>;
    };

    group2 {
      psels = <NRF_PSEL(UART_RX, 1, 5)>,
        <NRF_PSEL(UART_CTS, 1, 7)>;
      bias-pull-up;
    };
  };

  /omit-if-no-ref/ uart20_sleep: uart20_sleep {
    group1 {
      psels = <NRF_PSEL(UART_TX, 1, 4)>,
        <NRF_PSEL(UART_RX, 1, 5)>,
        <NRF_PSEL(UART_RTS, 1, 6)>,
        <NRF_PSEL(UART_CTS, 1, 7)>;
      low-power-enable;
    };
  };
};

&pwm_led1 {
};
prj.conf
CONFIG_GPIO=y


CONFIG_LOG=y
CONFIG_USE_SEGGER_RTT=y
CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_BACKEND_UART=n
CONFIG_UART_CONSOLE=n
CONFIG_RTT_CONSOLE=y
CONFIG_SEGGER_RTT_BUFFER_SIZE_UP=2048

CONFIG_SERIAL=y
CONFIG_UART_ASYNC_API=y
CONFIG_UART_USE_RUNTIME_CONFIGURE=y
Second DK (sender):

/ {
  chosen {
    /delete-property/ zephyr,console;
    /delete-property/ zephyr,shell-uart;
    /delete-property/ zephyr,uart-mcumgr;
    /delete-property/ zephyr,bt-mon-uart;
    /delete-property/ zephyr,bt-c2h-uart;
  };
};

&spi00 {
  status = "disabled";
};

&uart20 {
  status = "okay";
  current-speed = <921600>;
  pinctrl-0 = <&uart20_default>;
  pinctrl-1 = <&uart20_sleep>;
  pinctrl-names = "default", "sleep";
};

&pinctrl {
  /omit-if-no-ref/ uart20_default: uart20_default {
    group1 {
      psels = <NRF_PSEL(UART_TX, 2, 2)>,
          <NRF_PSEL(UART_RTS, 2, 5)>;
    };
    group2 {
      psels = <NRF_PSEL(UART_RX, 2, 0)>,
          <NRF_PSEL(UART_CTS, 2, 4)>;
      bias-pull-up;
    };
  };

  /omit-if-no-ref/ uart20_sleep: uart20_sleep {
    group1 {
      psels = <NRF_PSEL(UART_TX, 2, 2)>,
              <NRF_PSEL(UART_RX, 2, 0)>,
              <NRF_PSEL(UART_RTS, 2, 5)>,
              <NRF_PSEL(UART_CTS, 2, 4)>;
      low-power-enable;
    };
  };
};
&pwm_led1 {
};
Same proj. config.
We are using the asyinc API.
Output from the receiver:
00> [00:00:14.420,570] <inf> uart_test: UART event received: type 6
00> --- 19 messages dropped ---
00> [00:00:14.420,969] <inf> uart_test: UART_RX_STOPPED: 4
00> --- 20 messages dropped ---
00> [00:00:14.421,359] <inf> uart_test: UART_RX_STOPPED: 4
00> --- 19 messages dropped ---
00> [00:00:14.421,743] <inf> uart_test: UART_RX_STOPPED: 4
00> --- 19 messages dropped ---
00> [00:00:14.422,014] <inf> uart_test: UART event received: type 4
00> --- 19 messages dropped ---
00> [00:00:14.422,397] <inf> uart_test: UART event received: type 4
00> --- 18 messages dropped ---
00> [00:00:14.422,702] <inf> uart_test: UART_RX_STOPPED: 4
00> --- 19 messages dropped ---
00> [00:00:14.423,083] <inf> uart_test: UART_RX_STOPPED: 4
00> --- 19 messages dropped ---
00> [00:00:14.423,468] <inf> uart_test: UART_RX_STOPPED: 4
00> --- 19 messages dropped ---
00> [00:00:14.423,851] <inf> uart_test: UART_RX_STOPPED: 4
CONSTLAT is enabled, as we are doing cross power domain uart. THE QSPI is disconnected via Board Configurator. We also tried UART00 at sender, with no different. We tried different baudrates and with and without hw-flow-control. Where is our mistake?
Parents
  • Hi,

    The pins and UART instance look good. On the second (sender) DK you use P2 for UARTE20, which is in another power domain. So constant latency mode must be used, and also dedicated pins (where you are using the correct dedicated pins).

    The only thing that sticks out is that you should have CONFIG_NRF_SYS_EVENT=y enabled for cross domain use (among other things this handles constant latency). Does that help? If not, can you share in what way UART communication does not work, and perhaps share logic analyzer traces?

Reply
  • Hi,

    The pins and UART instance look good. On the second (sender) DK you use P2 for UARTE20, which is in another power domain. So constant latency mode must be used, and also dedicated pins (where you are using the correct dedicated pins).

    The only thing that sticks out is that you should have CONFIG_NRF_SYS_EVENT=y enabled for cross domain use (among other things this handles constant latency). Does that help? If not, can you share in what way UART communication does not work, and perhaps share logic analyzer traces?

Children
Related