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.

Minimize power consumption of CC2640

Other Parts Discussed in Thread: CC2541, CC2640, SYSBIOS, CC1350

We are using CC2541 which allow sleep mode at 0.5uA.

The DVT power measurement from TI show sleep mode of CC2640 is ~ 1uA.

What need to be done to get to this power level?.  We did remove all the pull up, pull down resistors on the GPIO pins, so generally the device's pins are isolated from input power, except power pins.

What need to be configured in the SW code to get this level?

  • Hi Thomas,

    The instructions are in this app note for how to measure the ~1uA sleep current:

    www.ti.com/.../swra478.pdf

     

  • Hi Thomas,

    The link provided by shows how to measure the current draw using BLE.

    If you only want to measure the Standby current comment out everything in main() except for BIOS_start(). This should make TI RTOS start up and execute only its Idle thread which puts the device in Standby.

    Regards,
    Svend
  • Svend,

    In our design, the device is transmitting beacon every 500mS.  Same beacon information.

    The design is implemented on CC2541 and now we port the same design to CC2640.

    We compare the current drawn of the two devices.

    The TX, RX power of the CC2640 is much lower than the CC2541, but the current drawn during sleep time (between beacons) is much higher.

    We think that the CC2640 cannot go to full sleep mode (where only timer is running).

    Anything in the code that we need to check to assure the CC2640 go to sleep mode between beacons?

    Thanks

  • I would suggest you to check if there is any current leakage on IO pins of CC2640.
  • We do not use any GPIO pin in this design. There is only one 100K resistor on the RESET pin.
  • Thomas,

    I suggest you start by doing a test of your board by -only- having BIOS_start() in main and measure the current draw after ~10-15 seconds.
    If the current draw is fine then there is something in software causing the increased current draw or preventing the device from going to Standby. Otherwise there is an issue with the board. Once we know what the cause of this is we can help out trying to find the root cause.

    Also, please provide more details on your BLE SDK version, a schematic and info on what example project you are using to measure current draw.

    Regards,
    Svend
  • I am using simpleBLEperipheral.
    The main programmed is masked off as shown below.
    The current measure is ~1.4mA
    Anything else I should do.

    int main()
    {
    // PIN_init(BoardGpioInitTable);

    #ifndef POWER_SAVING
    /* Set constraints for Standby, powerdown and idle mode */
    // Power_setConstraint(Power_SB_DISALLOW);
    // Power_setConstraint(Power_IDLE_PD_DISALLOW);
    #endif // POWER_SAVING

    /* Initialize ICall module */
    // ICall_init();

    /* Start tasks of external images - Priority 5 */
    // ICall_createRemoteTasks();

    /* Kick off profile - Priority 3 */
    // GAPRole_createTask();

    // SimpleBLEPeripheral_createTask();

    #ifdef FEATURE_OAD
    {
    uint8_t counter;
    uint32_t *vectorTable = (uint32_t*) 0x20000000;
    #if defined(__IAR_SYSTEMS_ICC__)
    uint32_t *flashVectors = &__vector_table;
    #elif defined(__TI_COMPILER_VERSION__)
    uint32_t *flashVectors = &ti_sysbios_family_arm_m3_Hwi_resetVectors;
    #endif //Compiler.

    // Write image specific interrupt vectors into RAM vector table.
    for(counter = 0; counter < 15; ++counter)
    {
    *vectorTable++ = *flashVectors++;
    }
    }
    #endif //FEATURE_OAD

    /* enable interrupts and start SYS/BIOS */
    BIOS_start();

    return 0;
    }
  • Actually the current current measured is 480uA.
  • Hi Thomas,

    If you still see a current that high it might be that the 32kHz XTAL does not start up properly. If this doesn't start up then the 32kHz system clock will continue to be derived from the 48MHz internal RC oscillator and the device will not power down.

    Regards,
    Svend
  • HI,

    I tried comment out everything in the main() cc2640 and current consumption is 4mA with only Bios RUn. can any one help out of it , i want run my device for 5 sec and let it to sleep for 5 sec, and my current consumption should be 1uA???? and i went via some for the previous comments that how to make sure that my MCU running with 32Khz XTAL or how to start working with internal low clock 32Khz XTAL for low poer consumption????

    and i am uisng simplePheripheral example from "ble_sdk_2_02_01_18" and cc2640 5X5 chip

  • Do you define POWER_SAVING in your project?
  • Hi

    i have used "Simplepheripheral sample code" from BLE stack, as follow and i have commented out everything and i run only BIOS(); still i am getting 4mA consumption in the device, but it should show some low power,, help me out!!!!

    int main()
    {
    //HCI_EXT_SetSCACmd(40);

    //#if defined( USE_FPGA )
    // HWREG(PRCM_BASE + PRCM_O_PDCTL0) &= ~PRCM_PDCTL0_RFC_ON;
    // HWREG(PRCM_BASE + PRCM_O_PDCTL1) &= ~PRCM_PDCTL1_RFC_ON;
    //#endif // USE_FPGA

    /* Register Application callback to trap asserts raised in the Stack */
    //RegisterAssertCback(AssertHandler);

    //PIN_init(BoardGpioInitTable);

    //#ifdef CC1350_LAUNCHXL
    // // Enable 2.4GHz Radio
    // radCtrlHandle = PIN_open(&radCtrlState, radCtrlCfg);

    //#ifdef POWER_SAVING
    // Power_registerNotify(&rFSwitchPowerNotifyObj,
    // PowerCC26XX_ENTERING_STANDBY | PowerCC26XX_AWAKE_STANDBY,
    // (Power_NotifyFxn) rFSwitchNotifyCb, NULL);
    //#endif //POWER_SAVING
    //#endif //CC1350_LAUNCHXL
    //
    //#if defined( USE_FPGA )
    // // set RFC mode to support BLE
    // // Note: This must be done before the RF Core is released from reset!
    // SET_RFC_BLE_MODE(RFC_MODE_BLE);
    //#endif // USE_FPGA

    // Enable iCache prefetching
    // VIMSConfigure(VIMS_BASE, TRUE, TRUE);
    ////
    //// // Enable cache
    // VIMSModeSet(VIMS_BASE, VIMS_MODE_ENABLED);
    //
    //#if !defined( POWER_SAVING ) || defined( USE_FPGA )
    // /* Set constraints for Standby, powerdown and idle mode */
    // // PowerCC26XX_SB_DISALLOW may be redundant
    // Power_setConstraint(PowerCC26XX_SB_DISALLOW);
    // Power_setConstraint(PowerCC26XX_IDLE_PD_DISALLOW);
    //#endif // POWER_SAVING | USE_FPGA
    //
    // /* Initialize ICall module */
    // ICall_init();
    //
    // /* Start tasks of external images - Priority 5 */
    // ICall_createRemoteTasks();
    //
    // /* Kick off profile - Priority 3 */
    // GAPRole_createTask();
    ////
    //SimpleBLEPeripheral_createTask();

    /* enable interrupts and start SYS/BIOS */
    BIOS_start();

    return 0;
    }
  • Hi Abraham,

    Please see the application note Measuring Bluetooth Low Energy Powe Consumption ( www.ti.com/.../swra478b.pdf ).