nRF91 UART Sleep Current – AT Host deinit & pm_device_action_run() for Low Power

Hi support team,

We are using nRF9151 with NCS v2.7.0 for our IoT product. During power optimization, we observed:

  • Even after disabling UART RX interrupt using uart_irq_rx_disable(), the sleep current does not reduce.

  • We confirmed CONFIG_PM_DEVICE=y, CONFIG_PM_DEVICE_RUNTIME=y, and other PM settings are enabled.

  • Disabling logging or the AT Host library does reduce current significantly, but we need the AT Host for modem communication.

Our Current Understanding:

  • The AT Host library keeps UART RX active via continuous reception tasks to handle AT command responses and URCs.

  • Calling uart_irq_rx_disable() only disables the interrupt but does not stop RX DMA or UARTE reception, so the peripheral remains fully powered.

  • We tried using:

pm_device_action_run(uart_dev, PM_DEVICE_ACTION_SUSPEND);

But we are unsure if the nRF91 UARTE driver implements the required PM hooks to allow suspend/resume.

Current Measurements:

  • Average current in PSM with UART active: ~630 µA

  • Target sleep current: <10 µA

When we disable the AT Host or deinitialize UART completely, we observe significantly lower sleep current, but we lose modem communication capability.

Our Goal:

We want to:

  1. Fully disable or suspend UART (UARTE) during deep sleep to achieve ~4–10 µA sleep current.

  2. Reinitialize or resume it before the next modem communication cycle.

Questions:

  1. Does the nRF91 UARTE driver support PM device suspend/resume using pm_device_action_run() in NCS v2.7.0?

  2. If not, is there any recommended approach to fully deinitialize UART while using AT Host, and reinitialize it safely before modem communication?

Modem firmware: 2.0.1

NCS Version : 2.7.0

Related