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.

Is there any simple code example for CC2650 low power mode

Other Parts Discussed in Thread: CC2650, BLE-STACK, SMARTRF06EBK, SYSBIOS

Hi  experts,

 I'm new to CC2650 chip and now I want to test the power consumption in STANDBY and SHUTDOWN mode. I'm using a CC2650STG.

 I've downloaded the latest tirtos simplelink package and cc26xxware package.But didn't find any simple example for low power mode (correct me if I'm wrong).

So my questions are:

1. Is there any simple example for low power mode that I can study and analyze?

2. As I'm developing simple applications for testing, can I remove TIRTOS from my code? That is, I don't need to call BIOS_Start and write the config script for xds tool.

Thanks

Terry

  • Moving to the appropriate forum

    Regards,
    Gigi Joseph.
  • Hi Terry,

    There is no example for just entering power mode with TI-RTOS, but you can easily strip down the all the example project to do so. Ex : If you start with Pininterrupt project, then comment out everything in Main except BIOS_START(). Also in  the new RTOS, the power policy is set in board files.

    C:\ti\tirtos_cc13xx_cc26xx_2_15_00_17\products\tidrivers_cc13xx_cc26xx_2_15_00_26\packages\ti\boards\CC2650DK_7ID\CC2650DK_7ID.c

    /*
    *  ============================= Power begin ===================================
    */
    
    const PowerCC26XX_Config PowerCC26XX_config = {
       .policyInitFxn      = NULL,
       .policyFxn          = &PowerCC26XX_standbyPolicy,
       .calibrateFxn       = &PowerCC26XX_calibrate,
       .enablePolicy       = TRUE,
       .calibrateRCOSC_LF  = TRUE,
       .calibrateRCOSC_HF  = TRUE,
    };

    Whenever you are Idle(no task), then you will just enter Standby automatically from TI-RTOS.

    For shutdown, you can take a look at pinShutdown example which comes together with TI-RTOS.

    With respect to your second question, it might be possible. However, all the drivers are from TI-RTOS. Without that, the coding would be very complicated.

  • Hi Christin,

      Thank you for your reply.

      Actually, I'm trying to get the power consumpation in standby mode on CC2650DK board.

      Currently, in standby mode, the current is 100uA. From data sheet, the current should be 1uA.
      I don't know what's missing in my code.

      Do you have an example for 1 uA standby mode on CC2650DK that I can study and analyze?

      Thanks!

    Best regards

    Terry

  • Hello Terry,

    As Christin states, when configured for Power Management (PM), the system will go into Standby when no constraints are set. You can take SimpleBLEPeripheral example, comment out all the BLE-Stack APIs in SimpleBLEPeripheral_init(), such as GAP/GATT/GGS, and let it enter the task loop, the system will go into Standby. Make sure you are measuring the current in accordance to SWRA478 app note & only measuring the CC2650EM module current (i.e., not the LCD and other SmartRF06EBK components).

    Please also refer to the RTOS power management document for CC26xx, this doc is included in the TI-RTOS SDK.

    Best wishes

  • My board.c file at C:\ti\tirtos_simplelink_2_13_00_06\packages\ti\boards\SRF06EB\CC2650EM_7ID is like this. i could not find power options
    /*
     * Copyright (c) 2015, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */

    /*
     *  ====================== Board.c =============================================
     *  This file is responsible for setting up the board specific items for the
     *  SRF06EB with the CC2650EM_7ID board.
     */


    /*
     *  ====================== Includes ============================================
     */
    #include <inc/hw_memmap.h>
    #include <inc/hw_ints.h>
    #include <driverlib/ioc.h>
    #include <driverlib/udma.h>
    #include <xdc/std.h>
    #include <xdc/runtime/System.h>
    #include <ti/sysbios/family/arm/m3/Hwi.h>
    #include <ti/sysbios/family/arm/cc26xx/Power.h>
    #include <ti/sysbios/family/arm/cc26xx/PowerCC2650.h>
    #include <ti/drivers/PIN.h>

    #include <ti/drivers/PWM2.h>
    #include <ti/drivers/pwm/PWMCC26XX.h>
    #include <ti/drivers/timer/GPTimerCC26XX.h>

    #include "Board.h"


    /*
     *  ========================= IO driver initialization =========================
     *  From main, PIN_init(BoardGpioInitTable) should be called to setup safe
     *  settings for this board.
     *  When a pin is allocated and then de-allocated, it will revert to the state
     *  configured in this table.
    */
    PIN_Config BoardGpioInitTable[] = {

        PIN_ID(Board_PWMPIN0) | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX ,
        Board_CSN_0   | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH   | PIN_PUSHPULL,   // Ensure SPI slave 0 is not selected
        Board_CSN_1   | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH   | PIN_PUSHPULL,    // Ensure SPI slave 1 is not selected
        Board_LED1       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW   | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
        Board_LED2       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW   | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
        Board_LED3       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW   | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
        Board_LED4       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW   | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
        Board_KEY_SELECT | PIN_INPUT_EN  | PIN_PULLUP | PIN_HYSTERESIS,                             /* Button is active low          */
        Board_KEY_UP     | PIN_INPUT_EN  | PIN_PULLUP | PIN_HYSTERESIS,                             /* Button is active low          */
        Board_KEY_DOWN   | PIN_INPUT_EN  | PIN_PULLUP | PIN_HYSTERESIS,                             /* Button is active low          */
        Board_KEY_LEFT   | PIN_INPUT_EN  | PIN_PULLUP | PIN_HYSTERESIS,                             /* Button is active low          */
        Board_KEY_RIGHT  | PIN_INPUT_EN  | PIN_PULLUP | PIN_HYSTERESIS,                             /* Button is active low          */
        Board_3V3_EN     | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW    | PIN_PUSHPULL,                     /* 3V3 domain off initially      */
        Board_LCD_MODE   | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH   | PIN_PUSHPULL,                     /* LCD pin high initially        */
        Board_LCD_RST    | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH   | PIN_PUSHPULL,                     /* LCD pin high initially        */
        Board_LCD_CSN    | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH   | PIN_PUSHPULL,                     /* LCD pin high initially        */
        Board_UART_TX    | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH   | PIN_PUSHPULL,                     /* UART TX pin at inactive level */
        PIN_TERMINATE                                                                               /* Terminate list                */
    };
    /*============================================================================*/

    /*
     *  ============================= UART begin ===================================
    */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_SECTION(UART_config, ".const:UART_config")
    #pragma DATA_SECTION(uartCC26XXHWAttrs, ".const:uartCC26XXHWAttrs")
    #endif

    /* Include drivers */
    #include <ti/drivers/UART.h>
    #include <ti/drivers/uart/UARTCC26XX.h>

    /* UART objects */
    UARTCC26XX_Object uartCC26XXObjects[CC2650_UARTCOUNT];

    /* UART hardware parameter structure, also used to assign UART pins */
    const UARTCC26XX_HWAttrs uartCC26XXHWAttrs[CC2650_UARTCOUNT] = {
        {    /* CC2650_UART0 */
            .baseAddr = UART0_BASE,
            .intNum = INT_UART0,
            .powerMngrId = PERIPH_UART0,
            .txPin = Board_UART_TX,
            .rxPin = Board_UART_RX,
            .ctsPin = PIN_UNASSIGNED,
            .rtsPin = PIN_UNASSIGNED
        },
    };

    /* UART configuration structure */
    const UART_Config UART_config[] = {
        { &UARTCC26XX_fxnTable, &uartCC26XXObjects[0], &uartCC26XXHWAttrs[0] },
        { NULL, NULL, NULL }
    };
    /*
     *  ============================= UART end =====================================
    */

    /*
     *  ============================= UDMA begin ===================================
    */
    /* Place into subsections to allow the TI linker to remove items properly */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_SECTION(UDMACC26XX_config, ".const:UDMACC26XX_config")
    #pragma DATA_SECTION(udmaHWAttrs, ".const:udmaHWAttrs")
    #endif

    /* Include drivers */
    #include <ti/drivers/dma/UDMACC26XX.h>

    /* UDMA objects */
    UDMACC26XX_Object UdmaObjects[CC2650_UDMACOUNT];

    /* UDMA configuration structure */
    const UDMACC26XX_HWAttrs udmaHWAttrs[CC2650_UDMACOUNT] = {
        { UDMA0_BASE, INT_UDMAERR, PERIPH_UDMA },
    };

    /* UDMA configuration structure */
    const UDMACC26XX_Config UDMACC26XX_config[] = {
        {&UdmaObjects[0], &udmaHWAttrs[0]},
        {NULL, NULL},
    };
    /*
     *  ============================= UDMA end =====================================
    */

    /*
     *  ========================== SPI DMA begin ===================================
    */
    /* Place into subsections to allow the TI linker to remove items properly */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_SECTION(SPI_config, ".const:SPI_config")
    #pragma DATA_SECTION(spiCC26XXDMAHWAttrs, ".const:spiCC26XXDMAHWAttrs")
    #endif

    /* Include drivers */
    #include <ti/drivers/spi/SPICC26XXDMA.h>

    /* SPI objects */
    SPICC26XX_Object spiCC26XXDMAObjects[CC2650_SPICOUNT];

    /* SPI configuration structure, describing which pins are to be used */
    const SPICC26XX_HWAttrs spiCC26XXDMAHWAttrs[CC2650_SPICOUNT] = {
        {   /* SRF06EB_CC2650_SPI0 */
            .baseAddr = SSI0_BASE,
            .intNum = INT_SSI0,
            .defaultTxBufValue = 0,
            .powerMngrId = PERIPH_SSI0,
            .rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
            .txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
            .mosiPin = Board_SPI0_MOSI,
            .misoPin = Board_SPI0_MISO,
            .clkPin = Board_SPI0_CLK,
            .csnPin = Board_SPI0_CSN
        },
        {   /* SRF06EB_CC2650_SPI1 */
            .baseAddr = SSI1_BASE,
            .intNum = INT_SSI1,
            .defaultTxBufValue = 0,
            .powerMngrId = PERIPH_SSI1,
            .rxChannelBitMask  = 1<<UDMA_CHAN_SSI1_RX,
            .txChannelBitMask  = 1<<UDMA_CHAN_SSI1_TX,
            .mosiPin = Board_SPI1_MOSI,
            .misoPin = Board_SPI1_MISO,
            .clkPin = Board_SPI1_CLK,       
            .csnPin = Board_CSN_0,
            //.csnPin = Board_SPI1_CSN
        }
    };

    /* SPI configuration structure */
    const SPI_Config SPI_config[] = {
        /* SRF06EB_CC2650_SPI0 */
        {&SPICC26XXDMA_fxnTable, &spiCC26XXDMAObjects[0], &spiCC26XXDMAHWAttrs[0]},
        /* SRF06EB_CC2650_SPI1 */
        {&SPICC26XXDMA_fxnTable, &spiCC26XXDMAObjects[1], &spiCC26XXDMAHWAttrs[1]},
        {NULL, NULL, NULL},
    };
    /*
     *  ========================== SPI DMA end =====================================
    */


    /*
     *  ========================== LCD begin =======================================
    */
    /* Place into subsections to allow the TI linker to remove items properly */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_SECTION(LCD_config, ".const:LCD_config")
    #pragma DATA_SECTION(lcdHWAttrs, ".const:lcdHWAttrs")
    #endif

    /* Include drivers */
    #include <ti/drivers/lcd/LCDDogm1286.h>

    /* LCD object */
    LCD_Object lcdObject;

    /* LCD hardware attribute structure */
    const LCD_HWAttrs lcdHWAttrs = {
        .LCD_initCmd = &LCD_initCmd,
        .lcdResetPin = Board_LCD_RST,       /* LCD reset pin */
        .lcdModePin = Board_LCD_MODE,       /* LCD mode pin */
        .lcdCsnPin = Board_LCD_CSN,         /* LCD CSn pin */
        .spiIndex = Board_SPI0
    };

    /* LCD configuration structure */
    const LCD_Config LCD_config = {&lcdObject, &lcdHWAttrs};
    /*
     *  ========================== LCD end =========================================
    */

    /*
     *  ========================== Crypto begin =======================================
     *  NOTE: The Crypto implementaion should be considered experimental and not validated!
    */
    /* Place into subsections to allow the TI linker to remove items properly */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_SECTION(CryptoCC26XX_config, ".const:CryptoCC26XX_config")
    #pragma DATA_SECTION(cryptoCC26XXHWAttrs, ".const:cryptoCC26XXHWAttrs")
    #endif

    /* Include drivers */
    #include <ti/drivers/crypto/CryptoCC26XX.h>

    /* Crypto objects */
    CryptoCC26XX_Object cryptoCC26XXObjects[CC2650_CRYPTOCOUNT];

    /* Crypto configuration structure, describing which pins are to be used */
    const CryptoCC26XX_HWAttrs cryptoCC26XXHWAttrs[CC2650_CRYPTOCOUNT] = {
        {CRYPTO_BASE, INT_CRYPTO, PERIPH_CRYPTO}
    };

    /* Crypto configuration structure */
    const CryptoCC26XX_Config CryptoCC26XX_config[] = {
        {&cryptoCC26XXObjects[0], &cryptoCC26XXHWAttrs[0]},
        {NULL, NULL}
    };


    // GPTimer hardware attributes, one per timer unit (Timer 0A, 0B, 1A, 1B..)
    const GPTimerCC26XX_HWAttrs gptimerCC26xxHWAttrs[CC2650_GPTIMERUNITSCOUNT] = {
        {.baseAddr = GPT0_BASE, .intNum = INT_TIMER0A, .intPriority = (~0), .powerMngrId = PERIPH_GPT0, .pinMux = GPT_PIN_0A, },
    //  {.baseAddr = GPT0_BASE, .intNum = INT_TIMER0B, .intPriority = (~0), .powerMngrId = PERIPH_GPT0, .pinMux = GPT_PIN_0B, },
    //  {.baseAddr = GPT1_BASE, .intNum = INT_TIMER1A, .intPriority = (~0), .powerMngrId = PERIPH_GPT1, .pinMux = GPT_PIN_1A, },
    //  {.baseAddr = GPT1_BASE, .intNum = INT_TIMER1B, .intPriority = (~0), .powerMngrId = PERIPH_GPT1, .pinMux = GPT_PIN_1B, },
    //  {.baseAddr = GPT2_BASE, .intNum = INT_TIMER2A, .intPriority = (~0), .powerMngrId = PERIPH_GPT2, .pinMux = GPT_PIN_2A, },
    //  {.baseAddr = GPT2_BASE, .intNum = INT_TIMER2B, .intPriority = (~0), .powerMngrId = PERIPH_GPT2, .pinMux = GPT_PIN_2B, },
    //  {.baseAddr = GPT3_BASE, .intNum = INT_TIMER3A, .intPriority = (~0), .powerMngrId = PERIPH_GPT3, .pinMux = GPT_PIN_3A, },
    //  {.baseAddr = GPT3_BASE, .intNum = INT_TIMER3B, .intPriority = (~0), .powerMngrId = PERIPH_GPT3, .pinMux = GPT_PIN_3B, },
    };

    // GPTimer objects, one per full-width timer (A+B) (Timer 0, Timer 1..)
    GPTimerCC26XX_Object gptimerCC26XXObjects[CC2650_GPTIMERCOUNT];

    // GPTimer configuration (used as GPTimer_Handle by driver and application)
    const GPTimerCC26XX_Config GPTimerCC26XX_config[CC2650_GPTIMERUNITSCOUNT] = {
        { &gptimerCC26XXObjects[0], &gptimerCC26xxHWAttrs[0], GPT_A},
    //  { &gptimerCC26XXObjects[0], &gptimerCC26xxHWAttrs[1], GPT_B},
    //  { &gptimerCC26XXObjects[1], &gptimerCC26xxHWAttrs[2], GPT_A},
    //  { &gptimerCC26XXObjects[1], &gptimerCC26xxHWAttrs[3], GPT_B},
    //  { &gptimerCC26XXObjects[2], &gptimerCC26xxHWAttrs[4], GPT_A},
    //  { &gptimerCC26XXObjects[2], &gptimerCC26xxHWAttrs[5], GPT_B},
    //  { &gptimerCC26XXObjects[3], &gptimerCC26xxHWAttrs[6], GPT_A},
    //  { &gptimerCC26XXObjects[3], &gptimerCC26xxHWAttrs[7], GPT_B},
    };

    // PWM configuration, one per PWM output
    PWMCC26XX_HwAttrs pwmCC26xxHWAttrs[CC2650_PWMCOUNT] = {
        { .pwmPin = Board_PWMPIN0, .gpTimerUnit = CC2650_GPTIMER0A } ,
    //  { .pwmPin = Board_PWMPIN1, .gpTimerUnit = CC2650_GPTIMER0B } ,
    //  { .pwmPin = Board_PWMPIN2, .gpTimerUnit = CC2650_GPTIMER1A } ,
    //  { .pwmPin = Board_PWMPIN3, .gpTimerUnit = CC2650_GPTIMER1B } ,
    //  { .pwmPin = Board_PWMPIN4, .gpTimerUnit = CC2650_GPTIMER2A } ,
    //  { .pwmPin = Board_PWMPIN5, .gpTimerUnit = CC2650_GPTIMER2B } ,
    //  { .pwmPin = Board_PWMPIN6, .gpTimerUnit = CC2650_GPTIMER3A } ,
    //  { .pwmPin = Board_PWMPIN7, .gpTimerUnit = CC2650_GPTIMER3B } ,
    };

    // PWM object, one per PWM output
    PWMCC26XX_Object pwmCC26xxObjects[CC2650_PWMCOUNT];


    extern const PWM_FxnTable PWMCC26XX_fxnTable;
    //PWM configuration (used as PWM_Handle by driver and application)
    const PWM_Config PWM_config[CC2650_PWMCOUNT+1] = {
      { &PWMCC26XX_fxnTable, &pwmCC26xxObjects[0], &pwmCC26xxHWAttrs[0] },
    //  { &PWMCC26XX_fxnTable, &pwmCC26xxObjects[1], &pwmCC26xxHWAttrs[1] },
    //  { &PWMCC26XX_fxnTable, &pwmCC26xxObjects[2], &pwmCC26xxHWAttrs[2] },
    //  { &PWMCC26XX_fxnTable, &pwmCC26xxObjects[3], &pwmCC26xxHWAttrs[3] },
    //  { &PWMCC26XX_fxnTable, &pwmCC26xxObjects[4], &pwmCC26xxHWAttrs[4] },
    //  { &PWMCC26XX_fxnTable, &pwmCC26xxObjects[5], &pwmCC26xxHWAttrs[5] },
    //  { &PWMCC26XX_fxnTable, &pwmCC26xxObjects[6], &pwmCC26xxHWAttrs[6] },
    //  { &PWMCC26XX_fxnTable, &pwmCC26xxObjects[7], &pwmCC26xxHWAttrs[7] },
      { NULL,               NULL,                 NULL                 }
    };

    /*
     *  ========================== Crypto end =========================================
    */

  • You can only find power drive in board file from TI-RTOS version >=2.15
  • in version 2.13 where can i find that?

  • Hi,

    We don't have example for Pin_Standby in TI-RTOS version 2.13.06, but you can download TI-RTOS 2.14 to get the example.

    The idle function is setup in .cfg file as shown below:

    /* Idle CPU when threads blocked waiting for an interrupt */
    Power.idle = true;
    Power.policyFunc = Power.standbyPolicy;

  • Hi Terry,

    If you:

    - install BLE Stack 2.1.1 (ble_cc26xx_setupwin32_2_01_01_44627.exe) to C:\ti

    - download TI-RTOS 2.16.01.14 and install it in C:\ti

    - Use git to checkout commit 54a35fb23253460b82f650b3295fc93c530b9b92 from the TI project github.com/.../ble-sdk-210-extra.git

    - Adapt the simple_ble_peripheral_tirtos_2p15 project as described in simple_ble_peripheral_tirtos_2p15/README.md, or apply the included diff.gz file (using the UNIX/Linux 'patch' command running on Virtualbox and shared folders, for example). You should get a working SimpleBLEPeripheral that uses approximately 8uA in connected mode on the developer kit board, and 72uA advertising. To get low power, you must disconnect the XDS100v3 bypass jumpers as well as all of the top row jumpers except RF2.15_RESET, and press RESET.

    Cheers,

    David.

    ble_lp.diff.gz

  • Hi All,

    In which low power mode of CC2650 can I transmitt data through BLE and read data from sensor and store?


    In Idle Mode: CPU is off , What does it mean?
    Can I transmit data through BLE, and also can I read data from sensors using Sensor controller, and also Can I access external Flash memory for data storage purpose?

    Thanks
    Kishor
  • You don't need to worry about switching between power modes in your own application as TI-RTOS is taking care of this part for you.

    When the device is transmitting or receiving data, the it's in active/TX or RX mode. In between advertising/connection, the device will enter standby mode(again, handle by TI-RTOS).

    Yes, you can transmit data through BLE and yes you can use sensor controller to read sensor data. And yes, you can access external flash to store data/OAD image....etc.

    You can take a look at our technical reference manual section 6.6 Power Modes for more information.

    It's a lot of information to take in, therefore we have a training tool(simplelink academy) for everyone to get to know what CC26XX can do.

    simplelink academy can be downloaded here : 

  • Thank you Christin, still I'm in doubt about below question . please help me to clear.

    CC26xx CPU is OFF in Idle mode, how it is possible to access external memory(Read/write with SPI communication)?

    In CC2650 shut down mode?How can I wake up from this mode internally?what is difference between No power and shut down mode?

    After wakeup from shut down mode from where program start to execute?

    Thanks
    Kishor K
  • If you enable SPI, then once you issue read/write, the device will wake up(taking care by TI-RTOS).

    You can find the answer to your question from our TRM section 6.6.5 Shutdown mode. Please take full advantage of our TRM.

    "Shutdown mode is defined as having no active power regulator in the CC26xx and CC13xx devices.
    Before putting the CC26xx and CC13xx devices in shutdown mode, I/O pins are latched to keep their
    output values in shutdown. This is the only difference between holding the CC26xx and CC13xx devices in
    reset with the reset pin and shutdown mode.
    Only an enabled pin interrupt or reset pin can wake up the CC26xx and CC13xx devices from shutdown
    mode."