This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrf9160 PSM mode strange current profile

Hello,

I'm working on getting PSM mode in LTE-M working so I can go to very low current operation between transmits to the cloud.  I have things working pretty well, but I'm confused about the current usage profile.  

Here's my prj.conf

#
# Copyright (c) 2019 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
#

# Networking
CONFIG_NETWORKING=y
CONFIG_NET_NATIVE=n
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y
CONFIG_NET_SOCKETS_SOCKOPT_TLS=y

CONFIG_MQTT_LIB_TLS=y

CONFIG_MQTT_CLIENT_ID="nrf9160dk"
CONFIG_MQTT_PUB_TOPIC="publish/nrf9160dk"
CONFIG_MQTT_SUB_TOPIC="subscribe/nrf9160dk"
CONFIG_SEC_TAG=97749774

CONFIG_MQTT_BROKER_HOSTNAME="a21ja4pkq6bzwh-ats.iot.us-west-2.amazonaws.com"
CONFIG_MQTT_BROKER_PORT=8883
CONFIG_PEER_VERIFY=1

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_LINK_CONTROL_LOG_LEVEL_DBG=n
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
CONFIG_NRF_MODEM_LIB=y
# CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=y
CONFIG_LTE_NETWORK_MODE_LTE_M=y

CONFIG_LTE_PSM_REQ_RPTAU="01000010"  # 10 hour unit, 20 hours total
CONFIG_LTE_PSM_REQ_RAT="00000000"  # 2 second unit, 24 seconds total
# TELUS gives:
# +CEREG notification: +CEREG: 1,"2B13","01ECBD0B",7,,,"00100011","01001011"
# RAT: 001 00011 -> 1 minutes unit, 3 minutes total
# RPTAU: 010 01011 -> 10 hours unit, 11 hours total
# CONFIG_POWER_OPTIMIZATION_ENABLE=y

# +CEREG notification: +CEREG: 1,"2B13","01ECC90C",7,,,"00100011","01001011"
# TAU: 396000 sec, active time: 180 sec
# "%XMONITOR: 1,\"TELUS\",\"TELUS\",\"302220\",\"2B13\",7,12,\"01ECC90C\",9,5145,44,27,\"\",\"00100011\",\"01001011\",\"01001010\"\r\n",
# TAUEXT: 10 hours multiple, value is 11.  10*3600*11 = 396000 sec
# ACTIVE TIMER: 1 minute multiple, value is 3.  3*60 = 180 sec


# BSD library
CONFIG_BSD_LIBRARY=y

# AT Host
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_AT_HOST_LIBRARY=n

# Enable SUPL client support
CONFIG_SUPL_CLIENT_LIB=n

# CONFIG_BSD_LIBRARY_TRACE_ENABLED=y

# CONFIG_STDOUT_CONSOLE=n
# CONFIG_LOG=n
# CONFIG_SERIAL=n
# CONFIG_GPIO=n
CONFIG_LTE_LINK_CONTROL_LOG_LEVEL_DBG=y

CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=n
CONFIG_CJSON_LIB=y
CONFIG_AT_CMD=y
CONFIG_AT_NOTIF=y
CONFIG_DK_LIBRARY=y
CONFIG_DK_LIBRARY_INVERT_LEDS=n
CONFIG_NET_LOG=y
# CONFIG_MQTT_LOG_LEVEL_DBG=y


# MQTT
CONFIG_MQTT_LIB=y

# Appliaction
#CONFIG_MQTT_PUB_TOPIC="/my/publish/topic"
#CONFIG_MQTT_SUB_TOPIC="/my/subscribe/topic"
#CONFIG_MQTT_CLIENT_ID="my-client-id"
#CONFIG_MQTT_BROKER_HOSTNAME="mqtt.eclipse.org"
#CONFIG_MQTT_BROKER_PORT=1883

# Main thread
CONFIG_MAIN_STACK_SIZE=4096

CONFIG_HEAP_MEM_POOL_SIZE=2048

You can see that my TAU timer is set to 20 hours and my RAT timer is set to 0 (no active time).

This works, and I observe the periodic TAU in the current profile.

However, when I transmit, I get this current profile:

The part highlighted in dark grey is what's confusing me.  It's about 20 seconds long and is a series of impulses about 320ms apart.  What is this?  My RAT timer is zero and if I make it non-zero, the active time is just tagged onto the end of the profile above.  Is there a way I can adjust or possibly remove this 20 seconds of impulses to keep current consumption low?

Thanks!

Parents
  • Hi,

    it is lissening on the PDCCH channel, DRX interval is the space between the pikes. First is TX data (black area), Then RRC connected, then it idles (grey area).

    pleas take a look at the UDP sample, it shows you how to use and set up PSM.

    In the UDP sample the following is done to enable PSM:

    static int configure_low_power(void)
    {​​​​​
    int err;
    #if defined(CONFIG_UDP_PSM_ENABLE)
    /** Power Saving Mode */
    err = lte_lc_psm_req(true);
    if (err) {​​​​​
    printk("lte_lc_psm_req, error: %d\n", err);
    }​​​​​
    #else
    err = lte_lc_psm_req(false);
    if (err) {​​​​​
    printk("lte_lc_psm_req, error: %d\n", err);
    }​​​​​
    #endif
    #if defined(CONFIG_UDP_EDRX_ENABLE)
    /** enhanced Discontinuous Reception */
    err = lte_lc_edrx_req(true);
    if (err) {​​​​​
    printk("lte_lc_edrx_req, error: %d\n", err);
    }​​​​​
    #else
    err = lte_lc_edrx_req(false);
    if (err) {​​​​​
    printk("lte_lc_edrx_req, error: %d\n", err);
    }​​​​​
    #endif
    #if defined(CONFIG_UDP_RAI_ENABLE)
    /** Release Assistance Indication */
    err = lte_lc_rai_req(true);
    if (err) {​​​​​
    printk("lte_lc_rai_req, error: %d\n", err);
    }​​​​​
    #endif
    return err;
    }​​​​​

    Remember to call for PSM before connecting.

    Regards,
    Jonathan

Reply
  • Hi,

    it is lissening on the PDCCH channel, DRX interval is the space between the pikes. First is TX data (black area), Then RRC connected, then it idles (grey area).

    pleas take a look at the UDP sample, it shows you how to use and set up PSM.

    In the UDP sample the following is done to enable PSM:

    static int configure_low_power(void)
    {​​​​​
    int err;
    #if defined(CONFIG_UDP_PSM_ENABLE)
    /** Power Saving Mode */
    err = lte_lc_psm_req(true);
    if (err) {​​​​​
    printk("lte_lc_psm_req, error: %d\n", err);
    }​​​​​
    #else
    err = lte_lc_psm_req(false);
    if (err) {​​​​​
    printk("lte_lc_psm_req, error: %d\n", err);
    }​​​​​
    #endif
    #if defined(CONFIG_UDP_EDRX_ENABLE)
    /** enhanced Discontinuous Reception */
    err = lte_lc_edrx_req(true);
    if (err) {​​​​​
    printk("lte_lc_edrx_req, error: %d\n", err);
    }​​​​​
    #else
    err = lte_lc_edrx_req(false);
    if (err) {​​​​​
    printk("lte_lc_edrx_req, error: %d\n", err);
    }​​​​​
    #endif
    #if defined(CONFIG_UDP_RAI_ENABLE)
    /** Release Assistance Indication */
    err = lte_lc_rai_req(true);
    if (err) {​​​​​
    printk("lte_lc_rai_req, error: %d\n", err);
    }​​​​​
    #endif
    return err;
    }​​​​​

    Remember to call for PSM before connecting.

    Regards,
    Jonathan

Children
Related