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

  • Thanks Jonathan!

    Here is the connection code I'm using:

    		err = lte_lc_psm_req(true);
    		if (err) {
    			LOG_ERR("PSM request failed, error: %d", err);
    			return err;
    		}
    		
    		err = lte_lc_init();
    		if (err) {
    			LOG_ERR("LTE link could not be established, error: %d",
    				err);
    			return err;
    		}
                    
            err = lte_lc_connect();
    		if (err) {
    			LOG_ERR("LTE link could not be established, error: %d",
    				err);
    			return err;
    		}

    As I understand it, RAI is only available for eDRX, which I am not enabling (in fact, if I do attempt to request RAI I get an error indicating that it isn't available).

    Am I connecting correctly?  Can I possibly reduce the time spent listening on the PDCCH channel?  I would like to be very conservative with power.

    Thanks so much for your help so far!

  • crasspm said:
    Am I connecting correctly?

    Yes.

    When in PSM mode the consumption should be sub 100uA. If you test the UDP sample and measure you will see approximately how low it can go, and compare the results to what you have in your code. 

    But, not all networks\SIM cards provide PSM so this is something you have to check. 

    Regards,
    Jonathan

  • Thanks Jonathan.  My lowest sleep current is ~6uA so I'm sure I'm in PSM, my question about whether I'm connecting correctly is more targeted to whether my configuration (PSM timers etc) is to blame for the ~20s of Connected Mode DRX.  More importantly, is there any way to reduce this time spent in Connected Mode DRX?  I can see that the data transaction is complete (transmit and response receive) before the Connected Mode DRX period, and if I can reduce this period I can save on power.

    Thanks!

  • Hi,

    No, it is sett and decided by the network. 
    Something you can check out is RAI or release assistant indication but it is only available in NBIOT.
    Regards,
    Jonathan

Reply Children
Related