<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>nRF52832 + NCS v3.3.1 + MPSL: UARTE disable/enable at runtime breaks BLE connection</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/128688/nrf52832-ncs-v3-3-1-mpsl-uarte-disable-enable-at-runtime-breaks-ble-connection</link><description>Environment: 
 
 
 SoC: nRF52832 
 
 
 SDK: nRF Connect SDK v3.3.1 (Zephyr) 
 
 
 CONFIG_MPSL=y 
 
 
 CONFIG_PM=n (not supported on nRF52832) 
 
 
 Goal: Completely disable the UARTE peripheral during idle to reduce power consumption (~0.3–0.4 mA overhead</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Sat, 11 Jul 2026 03:43:14 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/128688/nrf52832-ncs-v3-3-1-mpsl-uarte-disable-enable-at-runtime-breaks-ble-connection" /><item><title>RE: nRF52832 + NCS v3.3.1 + MPSL: UARTE disable/enable at runtime breaks BLE connection</title><link>https://devzone.nordicsemi.com/thread/569015?ContentTypeID=1</link><pubDate>Sat, 11 Jul 2026 03:43:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8c9e2271-185f-4c2d-826b-f5866e4a05f5</guid><dc:creator>Nordfield</dc:creator><description>&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chip: nRF52832 (QFAA)&lt;/li&gt;
&lt;li&gt;SDK: nRF Connect SDK (NCS) v3.3.1 based on Zephyr RTOS&lt;/li&gt;
&lt;li&gt;SoftDevice: S140 (integrated in Zephyr build, MPSL enabled)&lt;/li&gt;
&lt;li&gt;Toolchain: nRF Connect for Desktop&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Application Overview:&lt;/strong&gt;&lt;br /&gt;We are developing a BLE UART transparent transmission module (NUS service). The module works as a BLE Peripheral, receiving AT commands and data from a host device via BLE, and forwarding them to a target device via UART, and vice versa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UART Working Mode:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UART baudrate: configurable from 4800 to 921600 via AT commands (runtime changeable)&lt;/li&gt;
&lt;li&gt;UART pins: TX=P0.06, RX=P0.08&lt;/li&gt;
&lt;li&gt;When UART is actively transmitting/receiving data, it operates normally in interrupt-driven mode&lt;/li&gt;
&lt;li&gt;When UART is idle for a configurable timeout (default 3 minutes), the module should enter low-power sleep mode:
&lt;ul&gt;
&lt;li&gt;UART peripheral should be fully powered down / disabled to minimize leakage current&lt;/li&gt;
&lt;li&gt;RX pin is configured as GPIO wake source (edge-triggered interrupt) to detect incoming data and wake the module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When data arrives on RX pin during sleep:
&lt;ul&gt;
&lt;li&gt;GPIO interrupt triggers&lt;/li&gt;
&lt;li&gt;UART peripheral is re-enabled and re-initialized&lt;/li&gt;
&lt;li&gt;Normal UART communication resumes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Power Consumption Requirement:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Target idle current: as close to the nRF52832 base current as possible (~0.3mA or less)&lt;/li&gt;
&lt;li&gt;The old firmware (nRF5 SDK 17.0 + SoftDevice S132, no MPSL) achieves this by calling&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;app_uart_close()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;nrf_drv_uart_uninit()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;nrf_uarte_disable()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to fully power down the UARTE peripheral during sleep, and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;uart_init()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to fully re-initialize on wake. This works perfectly with no BLE issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt;&lt;br /&gt;In the NCS/Zephyr + MPSL architecture, any direct UARTE register operations (including&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;nrf_uarte_disable()&lt;/code&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;nrf_uarte_int_disable()&lt;/code&gt;, STOPRX/STOPTX tasks) conflict with MPSL shared resources and cause BLE connection failures. Even the Zephyr UART Async API (&lt;code&gt;uart_rx_disable()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;/&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;uart_rx_enable()&lt;/code&gt;) causes BLE connection failures on nRF52832.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What We Need:&lt;/strong&gt;&lt;br /&gt;A&lt;span&gt;&amp;nbsp;&lt;/span&gt;recommended approach to fully power down the UARTE peripheral during idle periods on nRF52832 with NCS/Zephyr + MPSL, and re-enable it on GPIO wake, without breaking BLE connectivity. Specifically:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is there a safe API or driver-level method to completely disable UARTE (similar to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;nrf_drv_uart_uninit()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;in nRF5 SDK) that is compatible with MPSL?&lt;/li&gt;
&lt;li&gt;If direct register access is not safe, what is the correct Zephyr driver approach to power down UART when idle and restore it on wake?&lt;/li&gt;
&lt;li&gt;Are there any known limitations or workarounds for UART Async API coexistence with BLE on nRF52832?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Additional Note:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CONFIG_PM is not available on nRF52832 (Zephyr power management framework not supported for this SoC)&lt;/li&gt;
&lt;li&gt;LFCLK source: internal RC oscillator (no external 32.768kHz crystal)&lt;/li&gt;
&lt;li&gt;P0.09 and P0.10 are used as GPIO (LED and BUTTON), requiring UICR.NFCPINS to be configured for GPIO mode&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>