This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Low power on the nRF9160

Hi, 

I recently designed a prototyping board featuring the nRF9160, which we got made for a couple of reasons. 

  • To have multiple boards to test with
  • Potential to have multiple engineers working with them
  • Long term testing of potential products
  • To see if our production equipment could successfully populate such a small device. 

The good news is, we successfully managed to populate a panel, and all 8 of the PCBs are are programmable. No short circuits between pins on the device that can be seen under a microscope. As its an LGA component, there is a chance that there could be shorts underneath the board, but we do not own x-ray inspection equipment to be able to see this. 

The main idea for our prototype board is a datalogger, that sends data periodically over LTE networks using MQTT, so low power is an absolute must. I noticed when using our current code we  see constant currents of around 3mA at its lowest, even when its in Power Saving Mode (PSM). So I looked into this a bit more thoroughly.  

I saw this question posted below, and tried to recreate his code, following an example through a link he posted. I also tried multiple different things with the GPIO configuration - ended up making them all high-z. 

https://devzone.nordicsemi.com/f/nordic-q-a/63745/lowering-the-power-consumption-of-nrf9160-mqtt_simple-ncs-1-3-0

Even when running this code, I was seeing about 2.7mA constant current. So around 500x more than expected. 

Ok, so now I thought I must've messed up something on the design, so I take off the 3V regulator circled in the schematic, and removed the pullup resistors on the SDA/SCL lines, so  the only thing being powered is the nRF9160. I now get 2.61mA

Is there something fundamentally wrong with my schematic to get into a low power idle state? Could the reserved pins underneath the package cause a high constant current if shorted together somewhere? Is the code missing anything to be in low power?

Schematic and code below

/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
 */

#include <zephyr.h>
#include <stdio.h>
#include <drivers/uart.h>
#include <string.h>
#include "hal/nrf_gpio.h"

/**@brief Recoverable BSD library error. */
void bsd_recoverable_error_handler(uint32_t err)
{
	printk("bsdlib recoverable error: %u\n", err);
}

void main(void)
{	
	for(int i=0;i<32;i++){
		nrf_gpio_cfg_input( i, NRF_GPIO_PIN_NOPULL);
	}

	NRF_UARTE0->ENABLE = 0;
    NRF_UARTE1->ENABLE = 0;
    
	k_sleep(K_SECONDS(6));

	k_cpu_idle();
}

Thanks, 

Damien

  • Hello,

    you should put the modem to sleep as well. If you're unsure how to do this, all necessary details are explained in this blog post.

  • Hi Hakon, 

    For some reason I thought it would automatically be off, and in the process of testing this I actually found what was going on. I always suspect there is loss through the JLink debugger so I always unplug it after I have flashed the board. This time, when I removed VRef the current went down to ~500uA, when I removed the reset line, it jumped up to 3mA again. 

    Seems like the JLink pulls down reset but it goes high when removed from the JLink. Looking at the schematic I can see why, and looking at datasheet, I can see that nReset shouldnt be pulled higher than 2.2V. 

    Now I expected if I reset the board, and put a jumper across RESET and GND, then this would mean I should see ~500uA after startup, but thats not what happened. 

    As you can see in the image below, I got just over 1mA initially, but if I took the jumper off and replaced it again it did go down to 434uA. This seems odd behaviour to me, and can't really understand why that happening. Is there a resource that shows how the nReset line should be connected up? I just copied the nRF9160DK schematic for the reset stuff, with a slight change in what FETs are used as they were ones we use elsewhere already, but I cant see why they would cause much issue, and they seem to be doing exactly what I expect.

    Any thoughts would be appreciated. 

    Thanks, 

    Damien

  • Hi Damien,


    DamoL said:
    As you can see in the image below,

    looks like the image was not included. 


    The nRESET is pulled high to 2.2V internally
    https://infocenter.nordicsemi.com/topic/ps_nrf9160/pmureset.html?cp=2_0_0_4_4_1#pin_reset 



    Are you flashing the device with a program that puts in system off ? Like shown in the blog Håkon refers to. 

    Regards,
    Jonathan

  • Hi Jonathan

    Apologies, I have added image in now. 

    I am flashing with the code in the OP. It's using k_cpu_idle()

    Thanks, 

    Damien

  • Hi,

    Thanks for the clarification. 

    Using the nrf9160DK as a reference is fine, can also use the Thingy91 as a reference. But it is always good to follow the HW design and verification guidelines also. 

    #include <modem/lte_lc.h>
    void main(void)
    {
    lte_lc_power_off();
    k_sleep(K_MSEC(1000));
    NRF_REGULATORS->SYSTEMOFF = 1;
    }



    How does it preform i system off, are you able to get sub 5uA? Would want to know  that the measurement setup preforms as expected.  What modem firmware are you using?

    Regards,
    Jonathan

Related