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.

CC2650EM-5XD-RD: Not able to power down the radio core

Part Number: CC2650EM-5XD-RD
Other Parts Discussed in Thread: CC2650


I am writing the firmware for a custom board based on CC2650. The device has to remain in StandBy mode only except the times when it has to transmit or receive some data. Transmitting logic has already been implemented as per the power policy. However, whenever I put the device into the receiving mode, it keeps on drawing around 4mA even when I shut down the receiving command. This only happens when the receive callback is actually triggered. If no data is received, thus not triggering the callback, the device is able to switch to the standBy mode aha

I have attached the code below:

static void rxTaskFunction(UArg arg0, UArg arg1)
    RF_Params rfParams;
    rfParams.nInactivityTimeout = 1000;

    if( RFQueue_defineQueue(&dataQueue,
                            MAX_LENGTH + NUM_APPENDED_BYTES))
        /* Failed to allocate space for all data entries */

      rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);

      /* Set the frequency */
      RF_CmdHandle ch1 = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
      /* Modify CMD_PROP_RX command for application needs */
      RF_cmdPropRx.pQueue = &dataQueue;           /* Set the Data Entity queue for received data */
      RF_cmdPropRx.rxConf.bAutoFlushIgnored = 1;  /* Discard ignored packets from Rx queue */
      RF_cmdPropRx.rxConf.bAutoFlushCrcErr = 1;   /* Discard packets with CRC error from Rx queue */
      RF_cmdPropRx.maxPktLen = MAX_LENGTH;        /* Implement packet length filtering to avoid PROP_ERROR_RXBUF */
      RF_cmdPropRx.pktConf.bRepeatOk = 1;
      RF_cmdPropRx.pktConf.bRepeatNok = 1;
      /* Enter RX mode and stay forever in RX */
      RF_CmdHandle ch2 = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropRx, RF_PriorityNormal, &callback, IRQ_RX_ENTRY_DONE);
      Task_sleep(2000000/ Clock_tickPeriod);
      Task_sleep(10000000/ Clock_tickPeriod);

void callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
    if (e & RF_EventRxEntryDone)
       /*Get current unhandled data entry */
       currentDataEntry = RFQueue_getDataEntry();

       /* Handle the packet data, located at &currentDataEntry->data:
        * - Length is the first byte with the current configuration
        * - Data starts from the second byte */
        packetLength      = *(uint8_t*)(&currentDataEntry->data);
        packetDataPointer = (uint8_t*)(&currentDataEntry->data + 1);

        /* Copy the payload + the status byte to the packet variable */
        memcpy(packet, packetDataPointer, (packetLength + 1));

int main(void)
    /* Locals */
    Task_Params taskParams;

    /* Do PIN init before starting the kernel */


    rxTaskParams.stackSize = RX_TASK_STACK_SIZE;
    rxTaskParams.stack = &rxTaskStack;
    Task_construct(&rxTask, rxTaskFunction, &rxTaskParams, NULL);
    /* Start kernel. */

    /* Should never get here; include a return to keep the compiler happy */
    return 0;

Can anyone point me in the direction as to what could be the problem?