<?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>nRF9161 to lowest power mode</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/126149/nrf9161-to-lowest-power-mode</link><description>I am trying to make the nrf9161 go to very low power mode for 10 seconds and then come back online. 
 Actually I would not mind if it were to start all over again when coming back around but currently on my nrf9161dk I cannot achieve &amp;lt; 3.2mA. 
 I could</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 17 Dec 2025 11:28:21 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/126149/nrf9161-to-lowest-power-mode" /><item><title>RE: nRF9161 to lowest power mode</title><link>https://devzone.nordicsemi.com/thread/557194?ContentTypeID=1</link><pubDate>Wed, 17 Dec 2025 11:28:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:73d8443b-0fc4-420a-ad45-c015aa1c8190</guid><dc:creator>Simon D-M</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I haven&amp;#39;t looked into details, but I think that when you enable the asserts, it enables some more debugging stuff which can maybe prevent the chip from going into sleep or also maybe enable some peripherals that were disabled before.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon D-M&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF9161 to lowest power mode</title><link>https://devzone.nordicsemi.com/thread/557172?ContentTypeID=1</link><pubDate>Wed, 17 Dec 2025 09:11:18 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d17f60f3-14f2-4975-b590-8cc9ab0fde63</guid><dc:creator>Mart</dc:creator><description>&lt;p&gt;Thank you for the answer, indeed I had to take a deeper look.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;This now is what I achieved and it gets me running to uA levels, very awesome!&lt;br /&gt;&lt;br /&gt;prj.conf&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;########################################
# Core Zephyr / Kernel
########################################
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048

########################################
# Modem / LTE
########################################
CONFIG_NRF_MODEM_LIB=y
CONFIG_LTE_LINK_CONTROL=y

# Request Power Saving Mode (PSM)
CONFIG_LTE_PSM_REQ=y

# Requested PSM timers (network may override)
# TAU ≈ 1 hour
CONFIG_LTE_PSM_REQ_RPTAU=&amp;quot;00100100&amp;quot;

# Active time ≈ 2 seconds
CONFIG_LTE_PSM_REQ_RAT=&amp;quot;00000101&amp;quot;

########################################
# Logging (DEBUG ONLY)
########################################
CONFIG_LOG=y
CONFIG_LOG_MODE_DEFERRED=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_PRINTK=y

########################################
# Power optimization
########################################
CONFIG_PM=y
CONFIG_PM_DEVICE=y

########################################
# Disable unused features (important!)
########################################
CONFIG_USB_DEVICE_STACK=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n

&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;main.c&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;modem/lte_lc.h&amp;gt;
#include &amp;lt;modem/nrf_modem_lib.h&amp;gt;
#include &amp;lt;zephyr/logging/log.h&amp;gt;

LOG_MODULE_REGISTER(psm_example, LOG_LEVEL_INF);

static void lte_handler(const struct lte_lc_evt *const evt)
{
    switch (evt-&amp;gt;type) {

    case LTE_LC_EVT_NW_REG_STATUS:
        if ((evt-&amp;gt;nw_reg_status == LTE_LC_NW_REG_REGISTERED_HOME) ||
            (evt-&amp;gt;nw_reg_status == LTE_LC_NW_REG_REGISTERED_ROAMING)) {
            LOG_INF(&amp;quot;LTE registered&amp;quot;);
        }
        break;

    case LTE_LC_EVT_RRC_UPDATE:
        LOG_INF(&amp;quot;RRC mode: %s&amp;quot;,
                evt-&amp;gt;rrc_mode == LTE_LC_RRC_MODE_CONNECTED ?
                &amp;quot;Connected&amp;quot; : &amp;quot;Idle&amp;quot;);
        break;

    default:
        break;
    }
}

static int modem_configure(void)
{
    int err;

    LOG_INF(&amp;quot;Initializing modem library&amp;quot;);

    err = nrf_modem_lib_init();
    if (err) {
        LOG_ERR(&amp;quot;Failed to initialize the modem library, error: %d&amp;quot;, err);
        return err;
    }

    LOG_INF(&amp;quot;Connecting to LTE network&amp;quot;);
    err = lte_lc_connect_async(lte_handler);
    if (err) {
        LOG_ERR(&amp;quot;Error in lte_lc_connect_async, error: %d&amp;quot;, err);
        return err;
    }

    return 0;
}

int main(void)
{
    int err;

    LOG_INF(&amp;quot;Starting PSM example&amp;quot;);

    err = modem_configure();
    if (err) {
        LOG_ERR(&amp;quot;Failed to configure the modem&amp;quot;);
        return 0;
    }

    while (1) {
        // Disconnect from LTE to save power
        LOG_INF(&amp;quot;Disconnecting from LTE&amp;quot;);
        err = lte_lc_func_mode_set(LTE_LC_FUNC_MODE_DEACTIVATE_LTE);
        if (err) {
            LOG_ERR(&amp;quot;Failed to deactivate LTE, error: %d&amp;quot;, err);
            return 0;
        }

        // Wait for 20 seconds
        k_msleep(20000);

        // Reconnect to LTE
        LOG_INF(&amp;quot;Reconnecting to LTE&amp;quot;);
        err = lte_lc_func_mode_set(LTE_LC_FUNC_MODE_NORMAL);
        if (err) {
            LOG_ERR(&amp;quot;Failed to activate LTE, error: %d&amp;quot;, err);
            return 0;
        }

        // Wait for 1 second
        k_msleep(1000);
    }

    return 0;
}

&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The only thing that I am not sure about is why having CONFIG_ASSERT=y in my prj.conf drastically increase the power to over mA levels, even during sleep conditions.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF9161 to lowest power mode</title><link>https://devzone.nordicsemi.com/thread/557067?ContentTypeID=1</link><pubDate>Tue, 16 Dec 2025 10:10:55 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:959f6866-9c0b-4b7b-b5e1-5caea0d7496b</guid><dc:creator>Simon D-M</dc:creator><description>&lt;p&gt;Hi Mart,&lt;/p&gt;
&lt;p&gt;We have some documentation on power management (&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/zephyr/services/pm/overview.html"&gt;link&lt;/a&gt;) and also for cellular focused application (&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/protocols/lte/psm.html"&gt;link&lt;/a&gt;). If you haven&amp;#39;t done it yet, I would also recommend checking the &lt;a href="https://academy.nordicsemi.com/"&gt;Dev Academy&lt;/a&gt;, where we have a course on cellular iot (&lt;a href="https://academy.nordicsemi.com/courses/cellular-iot-fundamentals/"&gt;link&lt;/a&gt;). It contains a chapter on power saving techniques.&lt;/p&gt;
&lt;p&gt;For a more complete sample, I would recommend checking &lt;a href="https://github.com/NordicDeveloperAcademy/cell-fund/tree/main/l8/l8_sol"&gt;the simple tracker solution&lt;/a&gt; from the Cellular iot course on Dev Academy.&lt;/p&gt;
&lt;p&gt;If you need more information, feel free to ask!&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon D-M&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF9161 to lowest power mode</title><link>https://devzone.nordicsemi.com/thread/557038?ContentTypeID=1</link><pubDate>Tue, 16 Dec 2025 06:38:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:721cc14a-7643-48b5-b45b-55e35c5bffa5</guid><dc:creator>Achim Kraus</dc:creator><description>&lt;p&gt;In general:&lt;/p&gt;
&lt;p&gt;if you want to know the very lowest current of your board, just switch all off and don&amp;#39;t care about the wake-up.&lt;/p&gt;
&lt;p&gt;If you then want to achieve a more &amp;quot;real world&amp;quot; behavior, check, if PSM is available in your network and enable that.&lt;/p&gt;
&lt;p&gt;In zephyr it&amp;#39;s not common to try to do such things as sleeping and wake up on a low level. The modem will already sleep with PSM, the application MCU may also put in sleep with k_sleep. If you want to wake up on an external input, you may setup a GPIO as input interrupt.&lt;/p&gt;
&lt;p&gt;Once your solution works with that, it may be possible to reduce the power consumption of the modem using RAl, but that also depends on the network and used protocol. If you want to use TLS/TCP, RAI may turn out to be not too realistic, but that&amp;#39;s left to your own experience.&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF9161 to lowest power mode</title><link>https://devzone.nordicsemi.com/thread/557003?ContentTypeID=1</link><pubDate>Mon, 15 Dec 2025 15:40:58 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bfdb4538-45fc-4a0d-97c1-f60f265da04c</guid><dc:creator>Mart</dc:creator><description>&lt;p&gt;I got to this code from the example but this doesn&amp;#39;t include restarting and/or waking up;&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;modem/lte_lc.h&amp;gt;
void main(void)
{
 lte_lc_power_off();
 k_sleep(K_MSEC(1000));
 NRF_REGULATORS-&amp;gt;SYSTEMOFF = 1;
}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I tried this code but didn&amp;#39;t wake up / restart either;&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define WAKEUP_MS 5000

int main(void)
{
        // Turn off LTE modem
    lte_lc_power_off();

    // Wait for LTE to properly power off
    k_sleep(K_MSEC(1000));

    // Configure the RTC0 to wakeup from SYSTEMOFF
    NRF_RTC0-&amp;gt;TASKS_STOP = 1;          // Stop RTC0
    NRF_RTC0-&amp;gt;PRESCALER = 327;         // 327 =&amp;gt; 1 tick = 1ms (32.768kHz / (327+1) = 100Hz -&amp;gt; 10ms per tick, adjust if needed)
    NRF_RTC0-&amp;gt;CC[0] = WAKEUP_MS;       // Set compare value in milliseconds
    NRF_RTC0-&amp;gt;INTENSET = RTC_INTENSET_COMPARE0_Msk;  // Enable compare interrupt
    NRF_RTC0-&amp;gt;EVTENSET = RTC_EVTENSET_COMPARE0_Msk;  // Enable event
    NRF_RTC0-&amp;gt;TASKS_CLEAR = 1;          // Clear the counter
    NRF_RTC0-&amp;gt;TASKS_START = 1;          // Start RTC0

    // Configure wakeup source: RTC0 COMPARE0
    NRF_REGULATORS-&amp;gt;SYSTEMOFF = 1;
    return 0;
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>