<a href=""><font color="#000000"><font size="2">Ninja</font></font> </a> tj
Posts: 55
Registered: ‎07-04-2016
Accepted Solution

EFR32MG - power comsumption in EM4S mode

I'm testing power consumption on SLWSTK6000A + BRD4151A board.
I have 1.76mA current consumption in EM4S mode, it should be only 5uA.
Energy Profiler shows working BUS_RegBitRead function. Why this function is active in EM4S mode ?

What can be wrong in my configuration ?


static void disableHFClocks(void)
  // Disable High Frequency Peripheral Clocks
  CMU_ClockEnable(cmuClock_HFPER, false);
  CMU_ClockEnable(cmuClock_USART0, false);
  CMU_ClockEnable(cmuClock_USART1, false);
  CMU_ClockEnable(cmuClock_TIMER0, false);
  CMU_ClockEnable(cmuClock_TIMER1, false);
  CMU_ClockEnable(cmuClock_CRYOTIMER, false);
  CMU_ClockEnable(cmuClock_ACMP0, false);
  CMU_ClockEnable(cmuClock_ACMP1, false);
  CMU_ClockEnable(cmuClock_IDAC0, false);
  CMU_ClockEnable(cmuClock_ADC0, false);
  CMU_ClockEnable(cmuClock_I2C0, false);

  // Disable High Frequency Bus Clocks
  CMU_ClockEnable(cmuClock_CRYPTO, false);
  CMU_ClockEnable(cmuClock_LDMA, false);
  CMU_ClockEnable(cmuClock_GPCRC, false);
  CMU_ClockEnable(cmuClock_GPIO, false);
  CMU_ClockEnable(cmuClock_HFLE, false);
  CMU_ClockEnable(cmuClock_PRS, false);

 * @brief   Disable low frequency clocks
static void disableLFClocks(void)
  // Enable LFXO for Low Frequency Clock Disables
  CMU_OscillatorEnable(cmuOsc_LFXO, true, true);

  // Disable Low Frequency A Peripheral Clocks
  // Note: LFA clock must be sourced before modifying peripheral clock enables
  CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO);
  CMU_ClockEnable(cmuClock_LETIMER0, false);
  CMU_ClockEnable(cmuClock_PCNT0, false);
  CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_Disabled);

  // Disable Low Frequency B Peripheral Clocks
  // Note: LFB clock must be sourced before modifying peripheral clock enables
  CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO);
  CMU_ClockEnable(cmuClock_LEUART0, false);
  CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_Disabled);

  // Disable Low Frequency E Peripheral Clocks
  // Note: LFE clock must be sourced before modifying peripheral clock enables
  CMU_ClockSelectSet(cmuClock_LFE, cmuSelect_LFXO);
  CMU_ClockEnable(cmuClock_RTCC, false);
  CMU_ClockSelectSet(cmuClock_LFE, cmuSelect_Disabled);

  // Disable Low Frequency Oscillator
  CMU_OscillatorEnable(cmuOsc_LFXO, false, true);

 * @brief   Disable all clocks to achieve lowest current consumption numbers.
static void disableClocks(void)
  // Disable High Frequency Clocks

  // Disable Low Frequency Clocks

int main(void)
	int i;


	CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO);


	EMU_EM4Init_TypeDef em4Init = EMU_EM4INIT_DEFAULT;
	em4Init.em4State = emuEM4Shutoff;




Posts: 2,384
Registered: ‎10-14-2014

Re: EFR32MG - power comsumption in EM4S mode

As far as I remembered other report similar issue. According the investigation this is board related. Maybe there is a pin (PA4) that control SPI flash has effect on the power consumption under EM4S.

Could you have a quick test to configure the PA4 as push-pull and latch to high to see if there is some change on your side?

My views are my own and do not necessarily represent the views of Silicon Labs

<a href=""><font color="#000000"><font size="2">Ninja</font></font> </a> tj
Posts: 55
Registered: ‎07-04-2016

Re: EFR32MG - power comsumption in EM4S mode

It's better, with PA4 in push-pull mode I have 900μA on BRD4151A board.


I have checked current consumption on my own board with EFR32MG1 in QFN32 package. There is only

EFR32MG1P132F256GM32 device with HFXO and LFXO rezonators. I have 7μA in EM4H, but in data sheet max is 1.3 μA with no RTCC in this mode. 

What else can cause this power consumption ?


Posts: 582
Registered: ‎09-18-2015

Re: EFR32MG - power comsumption in EM4S mode

Hi tj,


Any chance you have a pull-up/down enabled on a GPIO pin?  There can be current leaked through these pins in any low-energy mode if you have a connected device that hasn't placed it's I/Os in Hi-Z and might be driving the pin.  You could try disabling the GPIOs of anything connected to see if this solves the problem.



<a href=""><font color="#000000"><font size="2">Ninja</font></font> </a> tj
Posts: 55
Registered: ‎07-04-2016

Re: EFR32MG - power comsumption in EM4S mode

In EM4H mode with RTC on board with MCU only I have 450-480nA.

On board with other components I have 600-800nA.

I have wrote function to set mode on connected pins.

void gpioDisablePins(uint32_t mode,uint32_t level)
	GPIO_PinModeSet(gpioPortB, 13,  mode, level);

	GPIO_PinModeSet(gpioPortC, 10,  mode, level);
	GPIO_PinModeSet(gpioPortC, 11,  mode, level);

	GPIO_PinModeSet(gpioPortD, 14,  mode, level);

Here is my test results:

	gpioDisablePins(gpioModeInputPull, 1); //770nA
	gpioDisablePins(gpioModeInputPull, 0); //800nA
	gpioDisablePins(gpioModeDisabled, 0); //790nA
	gpioDisablePins(gpioModeDisabled, 1); //650nA
	gpioDisablePins(gpioModeInput, 0); //650nA
	gpioDisablePins(gpioModeInput, 1); //630nA  -  507nA after 10min
	gpioDisablePins(gpioModeWiredOr, 0); //480nA

Can you explain why there are these differences ?

What is best setting for low consumption in EM4H ?



Posts: 582
Registered: ‎09-18-2015

Re: EFR32MG - power comsumption in EM4S mode



I was going through my old Community notifications and saw I had not replied to this.


You did some interesting work taking these measurements, and, to be fair, I doubt I could ever say with certainty which pin configuration is best.


Back in my past life supporting classic MCUs like the M68HC11 family, we didn't have fancy GPIO pins with all kinds of configuration options like we have on EFM32 Smiley Surprised


So, on those devices, before entering the low power state (stop mode), we used to tell customers to configure pins as outputs and drive them to a known state when possible. Pins that needed to be inputs would have to remain configured as such and we recommended external pull-ups to keep them in a known state (we didn't have on-chip pull-ups and the good old days).


Anyway, what you have found largely validates those recommendations. Pins configured as outputs have the lowest leakage. That's what you see in the case of:


gpioDisablePins(gpioModeWiredOr, 0);

This is an output state and specifying a low value disconnects the pull-up on the pins. In several of the other modes, you have pull-ups/downs enabled, and there will be some leakage from these pins which increases your current draw.  I suspect the same is also true for your gpioModeDisabled cases, as some of these pins have external circuits connected to them and you are experiencing some leakage.