Interrupt-driven UART doesn't work with PM_DEVICE_RUNTIME

I upgraded from v2.7.0 to v2.8.0 of the nRF Connect SDK and noticed that the UART was no longer working.

It seemed the UART receives one byte and calls exit. Transmit doesn't work at all using interrupt.

The echo_bot example worked for me and I figured out the culprit was the power management configuration.

Way to reproduce:

Create echo_bot example using v2.8.0 SDK

Add to prj.conf:

CONFIG_PM_DEVICE=y
CONFIG_PM_DEVICE_RUNTIME=y
Tested on the nRF25840-DK.
 
It seems only the interrupt API is affected by this. Polling and Async API work fine.
Parents
  • PSA: For those like me who had the misfortune for enabling `CONFIG_PM_DEVICE_RUNTIME` without realizing how many drivers are completely borked when Power Domain is turned on, which including "nordic,nrf-uarte" drivers, my tip to you is to switch to legacy hardware async uart, which had been battle-tested before the days of Zephyr. 


    CONFIG_UART_ASYNC_API=y
    CONFIG_UART_0_ASYNC=y
    CONFIG_UART_0_NRF_HW_ASYNC=y
    CONFIG_UART_0_NRF_HW_ASYNC_TIMER=1
    CONFIG_UART_NRFX_UARTE_LEGACY_SHIM=y

Reply
  • PSA: For those like me who had the misfortune for enabling `CONFIG_PM_DEVICE_RUNTIME` without realizing how many drivers are completely borked when Power Domain is turned on, which including "nordic,nrf-uarte" drivers, my tip to you is to switch to legacy hardware async uart, which had been battle-tested before the days of Zephyr. 


    CONFIG_UART_ASYNC_API=y
    CONFIG_UART_0_ASYNC=y
    CONFIG_UART_0_NRF_HW_ASYNC=y
    CONFIG_UART_0_NRF_HW_ASYNC_TIMER=1
    CONFIG_UART_NRFX_UARTE_LEGACY_SHIM=y

Children
No Data
Related