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

1.4mA in sleep on custom board

We have a custom board using the ISP130301 BLE module (containing a nRF51822, 16MHz xtal, 32kHz xtal). Our apps work fine (gcc, SDK6, S110v7) except for high system on idle power. We are measuring about 1.4mA in sleep using a variation of the system_on_wakeup_on_gpio (Keil5, SDK10, no softdevice) with peripherals disabled. We suspect that the board is still in debug mode but cannot get into a lower power mode.

We've read many threads regarding this but haven't been able to resolve it.

We use a Segger jlink connected to TC2030 pads on the board. We disconnect power, disconnect the TC2030 probe, and reapply power (which should put the board in normal mode), press the button (which turns off LED and CPU) and measure 1.4mA. We tied SWDCLK to GND and reapply power but no change in current measurements. We tried "nrfjprog --pinreset" with no change.

All other peripherals (memory, charger, regulator, switches, LEDs) are off or disabled. All other GPIO are floating. We've measured the enabled (mA) and disabled current (uA) of each individual peripheral on breadboards. Any ideas on how to get to low power in system on idle?

We use a Fluke 189 to measure mA and uA currents across the power leads which works fine on the pca10028. This can sample 250us events to capture both max current during connection events and min current during idle.

#include <stdbool.h>
#include <stdint.h>
#include "nrf_gpio.h"

#define CS 1

int main(void)
{	
	// pin 23 LED exists on pca10028 & LSLF1
	nrf_gpio_cfg_output(23);
	nrf_gpio_pin_clear(23); // LED on
	
	#if CS
	// U8 memory /CS
	nrf_gpio_cfg_output(12);
	nrf_gpio_pin_set(12); // memory disabled, expect 8uA
	#endif
	
	// Configure button
	nrf_gpio_cfg_input(17, NRF_GPIO_PIN_PULLUP);

    while (true)
    {	
	    	if (nrf_gpio_pin_read(17) == 0) { // pressed?
		    	nrf_gpio_pin_set(23); // LED off
					
		    	// system on idle
		    	 __WFE(); __SEV(); __WFE();
    	}				
    }
}
Parents
  • I doubt that it is debug mode if you tie SWDCLK to ground and reset. Make sure that the chip is reset completely, i.e. that no decoupling caps keeps it on. Could you try to run just the following code to see if that changes anything?

    int main(void){
        for(;;) __WFE();
    }
    

    Or even System OFF:

    int main(void){
        NRF_POWER->SYSTEMOFF = 1;
        for(;;){}
    }
    

    If I understand you correctly the current consumption seems fine on the pca10028, so then I would guess that it is some issues with any of the external components on your custom board. Could you please post the schematic so we can have a look?

  • Hi Stian, I ran

    int main(void){
        for(;;) __WFE();
    } 
    

    and still measure 1.4mA current on our rigid-flex PCB. I measure the same idle current on multiple rigid-flex boards so it is a systemic problem.

    I physically cut the flex to remove other circuitry to try to identify what part of the board was pulling current but the idle current does not change. The attached schematic contains the BLE module, regulator, charger, flash memory which uses 1.4mA in idle. Other GPIO goes to the now removed circuitry.

    A solderless breadboard with the same components (but no Segger) measures 11.6uA in idle. Current for individual components in idle: BLE module 3.3uA, regulator 1.6uA, charger ~0, flash 8uA.

    Our app and Nordic example apps run fine on the rigid-flex board, except that idle current is very high for all apps.

Reply
  • Hi Stian, I ran

    int main(void){
        for(;;) __WFE();
    } 
    

    and still measure 1.4mA current on our rigid-flex PCB. I measure the same idle current on multiple rigid-flex boards so it is a systemic problem.

    I physically cut the flex to remove other circuitry to try to identify what part of the board was pulling current but the idle current does not change. The attached schematic contains the BLE module, regulator, charger, flash memory which uses 1.4mA in idle. Other GPIO goes to the now removed circuitry.

    A solderless breadboard with the same components (but no Segger) measures 11.6uA in idle. Current for individual components in idle: BLE module 3.3uA, regulator 1.6uA, charger ~0, flash 8uA.

    Our app and Nordic example apps run fine on the rigid-flex board, except that idle current is very high for all apps.

Children
No Data
Related