NCS UART uart_poll_out with nordic,nrf-uart faulty TX, but works nordic,nrf-uarte

Hi folks,

The blocking transmit function uart_poll_out() works as expected with UARTE, but not with UART.

For our project low power is critical. Thats why I need to use UART (~300 uA) instead of UARTE (~1300 uA). Baud is very low, so DMA does not benefit us.

brd_test.overlay file -> uart0 ->  compatible = "nordic,nrf-uart";

Figure. UART - faulty transmission

brd_test.overlay file -> uart0 ->  compatible = "nordic,nrf-uarte";

Figure. UARTE - transmission OK.

I also tried calling uart_irq_tx_ready() inside ISR -without effect.



I took the echo_bot example and modified it. Here are the files that i modified (i removed RX code for cleanness sake):

5852.main.cpp7028.prj.confbrd_test.overlaybrd_test.dtsi

# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(echo_bot_2)

target_sources(app PRIVATE src/main.cpp)

Second issue is that calling uart_irq_tx_enable(uart_dev) ends in signal handler. Please test it by adding uart_irq_tx_enable() inside uart_tx(). I hoped to work around the faulty transmission by using interrupt driven api, but I cant even enable the tx interrupt in the first place.

Third issue is being able to disable receiver (only async api has RX enable/disable). Unfortunately I couldn't get the async api it to receive in a stable manner. Thats another rant.
For interrupt driven driver I managed to get the sleep power consumption down 2.7 uA by calling pm_device_action_run() manually (as seen in the code). Are there any caveats doing it?

Parents
  • Hi

    Here is the entire project folder (build folder deleted). I added CMake Preset for quick build configuration for PCA10040 DK (i have 3.0.0 2023.22).

    Build and flash it. Connect oscilloscope on pin P0.22. The partial TX (as seen on image of my original post) runs every 2 seconds.

    Then modify "nordic,nrf-uart" in brd_test.overlay to "nordic,nrf-uarte" and TX works as expected. 

     echo_bot_2.zip

Reply
  • Hi

    Here is the entire project folder (build folder deleted). I added CMake Preset for quick build configuration for PCA10040 DK (i have 3.0.0 2023.22).

    Build and flash it. Connect oscilloscope on pin P0.22. The partial TX (as seen on image of my original post) runs every 2 seconds.

    Then modify "nordic,nrf-uart" in brd_test.overlay to "nordic,nrf-uarte" and TX works as expected. 

     echo_bot_2.zip

Children
No Data
Related