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.

CC2650: IEEE mode API headers and sources

Part Number: CC2650
Other Parts Discussed in Thread: CC2652R

It is my understanding that the latest SDK for the CC2650 is found in TI-RTOS. The latest version of TI-RTOS for the CC2650 is 2.21.01.08 and within I find CC26xxWare 2.24.03.17272. However, this version does not contain the driverlib headers for the IEEE API (e.g. rf_ieee_cmd.h).

I see several open source projects have later versions of the CC26xxWare which includes these headers. For example, Contiki (https://github.com/contiki-os/contiki/tree/master/cpu/cc26xx-cc13xx/rf-core/api) and OpenThread (https://github.com/openthread/openthread/tree/master/third_party/ti/devices/cc26x0/driverlib). Furthermore, SmartRF Studio version 2.13.0 exports code for the CC2650 which includes these headers and uses IEEE API commands. Would you please tell me where I can find the latest version of the CC2650 SDK that includes the IEEE API ? Presumably, these projects got a more recent version of the SDK from TI.

  • As I know the latest version until now is 2.21.01.08 which can be downloaded from software-dl.ti.com/.../index.html
  • This is the version I mentioned in the problem description which does not include the IEEE API. However, as shown, there exist newer sources and I am asking TI to provide general access to them.
  • Please see this related post:

    I am not aware of any releases with newer sources.

    As mentioned on CC2650 product page, we recommend using CC26x2 on newer designs, for which you can find the Launchpad Development kit and corresponding SDK.

    Regards,
    Toby

  • Thanks Toby that post is helpful. As mentioned in the linked post the IEEE API was removed from newer releases. Can anyone comment why this was done? It is concerning.

    We have existing devices that use the CC2650 and have newer designs using the CC2652R1 and CC1352R1, but are now reconsidering our upgrade path since TI has removed some support for the CC2650.

    These newer sources exist and are under revision control somewhere on TI infrastructure (see the the revision control numbers and copyright dates in the headers of the various sources referenced in this post and the related post). I wish TI would continue to support older designs that use the device by making these files publicly available.

    Also it is a bug in the SmartRF tool that it generates code using these headers and the IEEE structures.

  • There should not be an issue using those headers with the the code that SmartRF Studio generates.
  • That is not true. There are additional files missing (e.g. rf_patches/rf_patch_cpe_ieee.h) which is why I am as asking for the complete SDK like that provided by TI to OpenThread.

    I am giving the SmartRF studio issue (and the references to other projects) to highlight that an updated SDK (which exists) is required for IEEE support in general, but it is apparently unavailable. My questions as to why seem to be ignored.

    //*********************************************************************************
    // Generated by SmartRF Studio version 2.13.0 (build#170)
    // The applied template is compatible with tirtos_simplelink_2_21_00
    // Device: CC2650 Rev. C (2.2)
    //
    //*********************************************************************************
    
    
    //*********************************************************************************
    // Parameter summary
    // IEEE Channel: 11 
    // Frequency: 2405 MHz
    // SFD: 0 
    // Packet Data: 255 
    // Preamble      (32 bit): 01010101... 
    // TX Power: 5 dBm 
    
    #include <driverlib/rf_mailbox.h>
    #include <driverlib/rf_common_cmd.h>
    #include <driverlib/rf_ieee_cmd.h>
    #include <ti/drivers/rf/RF.h>
    #include <rf_patches/rf_patch_cpe_ieee.h>
    #include "smartrf_settings.h"
    
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
        .rfMode = RF_MODE_IEEE_15_4,
        .cpePatchFxn = &rf_patch_cpe_ieee,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0
    };
    
    
    // Overrides for CMD_RADIO_SETUP
    uint32_t pOverrides[] =
    {
        // override_synth_ieee_15_4.xml
        // Synth: Set recommended RTRIM to 5
        HW_REG_OVERRIDE(0x4038,0x0035),
        // Synth: Set Fref to 3.43 MHz
        (uint32_t)0x000784A3,
        // Synth: Set loop bandwidth after lock to 80 kHz
        (uint32_t)0xA47E0583,
        // Synth: Set loop bandwidth after lock to 80 kHz
        (uint32_t)0xEAE00603,
        // Synth: Set loop bandwidth after lock to 80 kHz
        (uint32_t)0x00010623,
        // Synth: Configure PLL bias
        HW32_ARRAY_OVERRIDE(0x405C,1),
        // Synth: Configure PLL bias
        (uint32_t)0x1801F800,
        // Synth: Configure PLL latency
        HW32_ARRAY_OVERRIDE(0x402C,1),
        // Synth: Configure PLL latency
        (uint32_t)0x00608402,
        // Synth: Use 24 MHz XOSC as synth clock, enable extra PLL filtering
        (uint32_t)0x02010403,
        // Synth: Configure extra PLL filtering
        HW32_ARRAY_OVERRIDE(0x4034,1),
        // Synth: Configure extra PLL filtering
        (uint32_t)0x177F0408,
        // Synth: Configure extra PLL filtering
        (uint32_t)0x38000463,
        // override_phy_ieee_15_4.xml
        // Synth: Increase synth programming timeout
        (uint32_t)0x05000243,
        // Rx: Adjust Rx FIFO threshold to avoid overflow
        (uint32_t)0x002082C3,
        // override_frontend_id.xml
        // Rx: Set RSSI offset to adjust reported RSSI by -2 dB
        (uint32_t)0x000288A3,
        // Rx: Configure LNA bias current trim offset
        (uint32_t)0x000F8883,
        // Rx: Adjust AGC DC filter 
        HW_REG_OVERRIDE(0x50DC,0x002B),
        (uint32_t)0xFFFFFFFF
    };
    
    
    // CMD_RADIO_SETUP
    // Radio Setup Command for Pre-Defined Schemes
    rfc_CMD_RADIO_SETUP_t RF_cmdRadioSetup =
    {
        .commandNo = 0x0802,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .mode = 0x01,
        .__dummy0 = 0x00,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x0,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0x9330,
        .pRegOverride = pOverrides
    };
    
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFs =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .frequency = 0x0965,
        .fractFreq = 0x0000,
        .synthConf.bTxMode = 0x1,
        .synthConf.refFreq = 0x0,
        .__dummy0 = 0x00,
        .__dummy1 = 0x00,
        .__dummy2 = 0x00,
        .__dummy3 = 0x0000
    };
    
    
    // CMD_IEEE_TX
    // The command ID number 0x2C01
    rfc_CMD_IEEE_TX_t RF_cmdIeeeTx =
    {
        .commandNo = 0x2C01,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .txOpt.bIncludePhyHdr = 0x0,
        .txOpt.bIncludeCrc = 0x0,
        .txOpt.payloadLenMsb = 0x0,
        .payloadLen = 0x1E,
        .pPayload = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .timeStamp = 0x00000000
    };
    
    
    // CMD_IEEE_RX
    // The command ID number 0x2801
    rfc_CMD_IEEE_RX_t RF_cmdIeeeRx =
    {
        .commandNo = 0x2801,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .channel = 0x00,
        .rxConfig.bAutoFlushCrc = 0x0,
        .rxConfig.bAutoFlushIgn = 0x0,
        .rxConfig.bIncludePhyHdr = 0x0,
        .rxConfig.bIncludeCrc = 0x0,
        .rxConfig.bAppendRssi = 0x1,
        .rxConfig.bAppendCorrCrc = 0x1,
        .rxConfig.bAppendSrcInd = 0x0,
        .rxConfig.bAppendTimestamp = 0x0,
        .pRxQ = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
        .pOutput = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .frameFiltOpt.frameFiltEn = 0x0,
        .frameFiltOpt.frameFiltStop = 0x0,
        .frameFiltOpt.autoAckEn = 0x0,
        .frameFiltOpt.slottedAckEn = 0x0,
        .frameFiltOpt.autoPendEn = 0x0,
        .frameFiltOpt.defaultPend = 0x0,
        .frameFiltOpt.bPendDataReqOnly = 0x0,
        .frameFiltOpt.bPanCoord = 0x0,
        .frameFiltOpt.maxFrameVersion = 0x3,
        .frameFiltOpt.fcfReservedMask = 0x0,
        .frameFiltOpt.modifyFtFilter = 0x0,
        .frameFiltOpt.bStrictLenFilter = 0x0,
        .frameTypes.bAcceptFt0Beacon = 0x1,
        .frameTypes.bAcceptFt1Data = 0x1,
        .frameTypes.bAcceptFt2Ack = 0x1,
        .frameTypes.bAcceptFt3MacCmd = 0x1,
        .frameTypes.bAcceptFt4Reserved = 0x1,
        .frameTypes.bAcceptFt5Reserved = 0x1,
        .frameTypes.bAcceptFt6Reserved = 0x1,
        .frameTypes.bAcceptFt7Reserved = 0x1,
        .ccaOpt.ccaEnEnergy = 0x0,
        .ccaOpt.ccaEnCorr = 0x0,
        .ccaOpt.ccaEnSync = 0x0,
        .ccaOpt.ccaCorrOp = 0x1,
        .ccaOpt.ccaSyncOp = 0x1,
        .ccaOpt.ccaCorrThr = 0x0,
        .ccaRssiThr = 0x64,
        .__dummy0 = 0x00,
        .numExtEntries = 0x00,
        .numShortEntries = 0x00,
        .pExtEntryList = 0, // INSERT APPLICABLE POINTER: (uint32_t*)&xxx
        .pShortEntryList = 0, // INSERT APPLICABLE POINTER: (uint32_t*)&xxx
        .localExtAddr = 0x0000000012345678,
        .localShortAddr = 0xABBA,
        .localPanID = 0x0000,
        .__dummy1 = 0x000000,
        .endTrigger.triggerType = 0x1,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000
    };
    
    

  • I also get the impression that TI does not really want people to use the IEEE 802.15.4 mode of the CC2650 without their RTOS or any other Stack they provide. Since they ignore your questions regarding why the files are missing, that also supports my impression.

    I have searched ages for finding a simple baremetal IEEE 802.15.4 example, which explains how to setup the radio configuration and how to do TX/RX. This simply does not exist... 

  • Apologies, I forgot to attach the rf_patch_cpe_ieee.h.

    I've attached it here for convenience.

    rf_patch_cpe_ieee.h

    The file is located in the 1.40 CC13x0 SDK.

    It is found in this path: C:\ti\simplelink_cc13x0_sdk_1_40_00_10\source\ti\devices\cc26x0\rf_patches

    If you do a diff between the files (rf_cmd_ieee.h, rf_patch_cpe_ieee.h) in the repo and SDK, you can see that the content is essentially the same.

    Please note that this is all I can provide at this time.

    Due to the flash requirements of typical IEEE 802.15.4 standalone applications that require a stack (eg. Zigbee), it is difficult to support them on CC2650.
    With the increased flash of CC2652R and moving part of the MAC into ROM, it is much easier to support 802.15.4 based applications on.

  • The 1.40 CC13x0 SDK is not available for download at the provided link or anywhere else on ti.com. It gives "Error Page" after submitting the request to download. The 1.50 CC13x0 SDK is availabe for download, but it appears that version has the IEEE support removed.

    Could the linux installer (or any variation) if this version of the SDK be made available for download, as advertised, on the website?

  • For now, please try downloading from resource explorer: dev.ti.com/.../node