This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSPM0L1105: Re-entering sleep mode increases power draw

Part Number: MSPM0L1105

Tool/software:

Hello,

I have an MSPM0 MCU that enters sleep mode after a button has been pressed, and a timeout has completed. The MCU enters STOP0 in the code below:

    while(!jack_event && !USB_chg_en && OK_sleep_button)
        __WFI();

When the device is powered on, the MCU enters this sleep loop after initializing (verified using debugger). When I press a button, the MCU is awoken via a GPIO interrupt, the MCU waits for a timer to complete, then re-enters this sleep loop. However, this second time (and as many times as I press the button) the MCU draws 1 extra mA of power than the first time the sleep state is entered. Any idea why?

Secondly, this MCU seems to draw more quiescent sleep power in general than I expected. I see ~700uA drawn when in sleep (then closer to 2mA after the button press), when I would expect under 200uA based on peripherals and STOP0. Do I have to manually disable peripherals like the ADC, timers, etc to further reduce quiescent draw, or should __WFI() be enough?

Thanks

Jesse

  • 1. Are you testing in free run, or in debug mode?

    2.Could that be related to the timer you use? You make it count after MCU woken, right?

    3.Yes to further reduce the power, you can disable peripherals manually. In stop0, PD0 is still active.

     

  • Hi Yuhao,

    I have tested in both modes now, the effect is persistent. 

    I have updated the sleep code to manually unpower peripherals:

                DL_UART_Main_disablePower(UART_0_INST);
                DL_TimerG_disablePower(TIMER_0_INST);
                DL_ADC12_disablePower(ADC_INST);
                DL_VREF_disablePower(VREF);
                delay_cycles(POWER_STARTUP_DELAY);
                while(!jack_event && !USB_chg_en && OK_sleep_button)
                    __WFI();
                DL_UART_Main_enablePower(UART_0_INST);
                DL_TimerG_enablePower(TIMER_0_INST);
                DL_ADC12_enablePower(ADC_INST);
                DL_VREF_enablePower(VREF);
                delay_cycles(POWER_STARTUP_DELAY);

    This reduces the overall quiescent draw (down to ~300uA), but the effect of entering this sleep state for the second time still increases power draw by about 1mA. 

    Another interesting finding is from power cycle to power cycle, the amount of power drawn will vary. On one power draw I will see as much as 2mA drawn from the MCU, but power cycling will show the MCU drawing 300uA. Pressing the button increases power draw again. Obviously the code does not change from power cycle to power cycle so I am confused. Any idea?

    Thanks

    Jesse 

  • Maybe you can remove the peripherals one by one to find the 'key peripheral' for this issue.