nRF91 - Can't disable PSM (Power Save Mode) once enabled using KConfig

To preface:

  • Board: nRF9151DK
  • nRF Connect SDK / Toolchain: 3.1.0

Hello,

I believe I found a bug regarding PSM (Power Save Mode). Specifically, you can't disable PSM once you enable it using KConfigs. FYI - I am using the LTE link control library so I have a bit more control and visibility into the connection states.

For example, I defined the following in my project:

CONFIG_NET_CONNECTION_MANAGER=n
CONFIG_LTE_LINK_CONTROL=y

CONFIG_LTE_LC_EDRX_MODULE=n

CONFIG_LTE_LC_PSM_MODULE=y
CONFIG_LTE_PSM_REQ=y
CONFIG_LTE_PSM_REQ_RPTAU="00000110"  # Requested Periodic Tracking Area Update (RPTAU) Interval: 1 hour 
CONFIG_LTE_PSM_REQ_RAT="00000000"    # Requested Active Time (Time in RRC Idle state) - 0 (Don't need to listen)

# Enable sleep notifications for logging / debugging purposes
CONFIG_LTE_LC_MODEM_SLEEP_MODULE=y
CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS=y

This enables PSM as expected via AT+CPSMS=1 as seen in psm_req() located in nrf\lib\lte_link_control\modules\psm.c. In this scenario, PSM works as expected.

Now, if I want to disable PSM using the following KConfig:

CONFIG_NET_CONNECTION_MANAGER=n
CONFIG_LTE_LINK_CONTROL=y

CONFIG_LTE_LC_EDRX_MODULE=n

CONFIG_LTE_LC_PSM_MODULE=n
CONFIG_LTE_PSM_REQ=n
CONFIG_LTE_PSM_REQ_RPTAU="00000110"  # Requested Periodic Tracking Area Update (RPTAU) Interval: 1 hour 
CONFIG_LTE_PSM_REQ_RAT="00000000"    # Requested Active Time (Time in RRC Idle state) - 0 (Don't need to listen)

# Enable sleep notifications for logging / debugging purposes
CONFIG_LTE_LC_MODEM_SLEEP_MODULE=y
CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS=y

I still see the modem entering PSM per the CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS callback defined in my code, and by looking at the current consumption of the nRF9151 using a Power Profile Kit 2 (I see 2.7 uA once the modem enters RRC Idle state).

When you search for "AT+CPSMS" in the nRF Connect SDK, I find no references of it being set to 0, Ie, no "AT+CPSMS=0". Thus, it is not being explicitly disabled in the SDK when the PSM KConfigs are set to "=n".

Also, AT+CPSMS saves to NVM, so if you query AT+CPSMS? after powering on the modem, you will see that PSM is still enabled even though PSM KConfigs are disabled.

I think the SDK should be updated to explicitly disable PSM via AT+CPSMS if it is enabled but the KConfigs are disabled.

Please let me know if I am missing something otherwise that I may be doing wrong.

Thanks,

Derek

Related