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