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.

RTOS/MSP432P401R: Higher than expected current consumption

Part Number: MSP432P401R

Tool/software: TI-RTOS

So I am just about getting started using TI-RTOS using the MSP432P401R and the current consumtion seems a bit high. Initially I was trying to communicate using SPI but at this point I am back to running the "empty" example included in the SDK and trying to figure out the cause of the problem. 

The symptoms are similar running both of the examples, avg current starting out at around 2-3 mA and dropping to around 1.1 mA after around a minute.

CCS version: 7.2.0.00013 

SDK: simplelink_msp432_sdk_1_40_00_28

Launchpad: MSP432P401R Launchpad (Red)

Running the "empty" project from the SDK:

3-minute run of "empty":

  • Hello Mandus,

      By default the device is entering into LPM0 (when idle) instead of LPM3. So you may want to take a look at the powerdeepsleep example.

    Or you can add the following code into your project:

    void enableDeepSleepMode_LPM3(void)
    {
        /* Put all GPIOs in lowest power configuration. This is done by MSP432 specific driverlib accesses*/
        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PA, PIN_ALL16);
        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PB, PIN_ALL16);
        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PC, PIN_ALL16);
        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PD, PIN_ALL16);
        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PE, PIN_ALL16);
        MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PJ, PIN_ALL16);
        MAP_GPIO_setAsOutputPin(GPIO_PORT_PA, PIN_ALL16);
        MAP_GPIO_setAsOutputPin(GPIO_PORT_PB, PIN_ALL16);
        MAP_GPIO_setAsOutputPin(GPIO_PORT_PC, PIN_ALL16);
        MAP_GPIO_setAsOutputPin(GPIO_PORT_PD, PIN_ALL16);
        MAP_GPIO_setAsOutputPin(GPIO_PORT_PE, PIN_ALL16);
        MAP_GPIO_setAsOutputPin(GPIO_PORT_PJ, PIN_ALL16);
    
        /* Turn off PSS high-side supervisors to consume lower power after deep sleep */
        MAP_PSS_disableHighSide();
    
        /* Select PowerMSP432_deepSleepPolicy to enable transition
         * into the PowerMSP432_DEEPSLEEP_0 (LPM3)state
         */
        Power_setConstraint(PowerMSP432_DISALLOW_DEEPSLEEP_1);
        Power_setPolicy((Power_PolicyFxn)PowerMSP432_deepSleepPolicy);
    
        /* Refer to Device datasheet for Wake-up Sources From Low Power Modes to wake up from
         * PowerMSP432_DEEPSLEEP_0
         */
    }

    Please make sure to call this function as part of your init functions in your mainThread.

    Also, please refer to Device datasheet for Wake-up Sources From Low Power Modes to wake up from PowerMSP432_DEEPSLEEP_0 (LPM3), because after you run this code (in your empty project), you will notice that the device will not wake up, please take a look at this wiki processors.wiki.ti.com/.../TI-RTOS_MSP432_Timer 

    Could you please give us more information on the power numbers that you are planning to achieve?? And if possible could please give us more information on what is the use case of this code??

      Thanks,

       David

  • To add to David's note, it is also important to make sure you remove the jumpers connecting the debugger to ensure that only the MSP432 is consuming power.

  • Hi David and Evan!

    Following the wiki example and using your code it seems to work as intended (current consumption decreased significantly). I had to decrease the WDT clock divider in order to get a greater resolution on the Task_sleep().

    The use case was simply to use TI-RTOS to wake up and perform a SPI transmission at a certain interval and measuring the current consumption. Is there is anything extra I can do in order to decrease the overall power consumption in such a case?

    As for the jumpers, they have been removed prior to measuring the current consumption.
  • Hi Mandus,

    Mandus Borjesson said:
    Is there is anything extra I can do in order to decrease the overall power consumption in such a case?

     There are a couple things that you can try.

    1. Active time vs. CPU Speed - There is always a tradeoff and this will depend on your requirements, but you can always try reducing the CPU speed.

    - By default (TI-RTOS), the initalPerfLevel is 2 (DCDC with VCORE1, please take a look at the datasheet for more information on the DCDC vs. LDO and VCORE0 vs. VCORE1)

    const PowerMSP432_ConfigV1 PowerMSP432_config = {
        .policyInitFxn = &PowerMSP432_initPolicy,
        .policyFxn = &PowerMSP432_sleepPolicy,
        .initialPerfLevel = 2,
    /*    Level    MCLK (MHz)    HSMCLK (MHz)    SMCLK (MHz)    ACLK (Hz)
     *    -----    ----------    ------------    -----------    ---------
     *      0         12              3              3           32768
     *      1         24              6              6           32768
     *      2         48             24             12           32768
     *      3         48             48             24           32768
     */
    

    So you could experiment with a different performance level, or create your custom level. Please take a look at this post e2e.ti.com/.../2220428

    2. Increase SPI speed (This will reduce your active time)

    Hopefully this helps.

      David

**Attention** This is a public forum