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.
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