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.

CC2652R: Firmware for RF testing

Part Number: CC2652R
Other Parts Discussed in Thread: SMARTRFTM-STUDIO, Z-STACK, SYSCONFIG

Hi,

I would like to know if TI provides any firmware for 802.15.4 RF testing with CC2652R? For example, for BLE, I use host_test with HCI command.

Thanks,

Koon

  • Hi Koon,

    TI 15.4-Stack has CERTIFICATION_TEST_MODE and Z-Stack DMM application examples use PER_TEST, along with power test profiles for either stack.  Then there is also the SMARTRFTM-STUDIO IEEE 802.15.4 mode so it really depends on what exactly you are trying to accomplish.

    Regards,
    Ryan

  • Hi Ryan,

    Thanks for your prompt response. I would like to download the firmware to my board and to be able to perform transmit and receive test via UART.

    Where is CERTIFICATION_TEST_MODE? I don't see that in "Simplelink CC13x2 26x2 SDK" under "CC26x2R LaunchPad/TI 15-4 Stack" directory.

    I installed SmartRF studio. Which firmware is for 802.15.4 RF testing? Can I control the device via UART instead of using SmartRF Studio application?

    Thanks,

    Koon

  • Hello Koon,

    CERTIFICATION_TEST_MODE is a parameter provided in the TI 15.4-Stack example applications: http://dev.ti.com/tirex/content/simplelink_cc13x2_26x2_sdk_3_40_00_02/docs/ti154stack/html/ti154stack/example-applications.html#configuration-parameters 

    You will not be able to use UART with SMARTRFTM-STUDIO.  If this is a requirement then you should investigate the coprocessor: http://dev.ti.com/tirex/explore/node?node=ALDzqGjWNKC73CCgya.xBw__pTTHBmu__LATEST 

    Regards,
    Ryan

  • Hi Ryan,

    Just to be clear, I have CC2652r implemented in my board. I can bypass my board circuitry and control CC2652r directly via UART from my computer. I load host_test and I am able to send HCI command from my computer to test BLE RF performance (transmit quality and receive sensitivity). I am looking for something similar for 802.15.4.

    CERTIFICATION_TEST_MODE doesn't seem to be what I am looking for as I have to connect to another device and I cannot perform receive sensitivity measurement and it cannot transmit continuously.

    It looks like SmartRF Studio has all the features that I need. I don't need to use SmartRF Studio to control my board via UART. It would be great if I can send the corresponding command via UART from my computer to control my device to continuous TX and RX.

    Koon

  • Hi Koon,

    With a full understanding of your system requirements I recommend that you use the rfEasyLinkNp: http://dev.ti.com/tirex/explore/node?node=AFWGFAP8LmjvJCyBv55MEQ__pTTHBmu__LATEST 

    Regards,
    Ryan

  • Hi Ryan,

    The rfEasyLinkNp project doesn't support 802.15.4 modulation (O-QPSK). It only has 2-GFSK. Is that correct?

    Thanks,

    Koon 

  • Hi Koon,

    The following AT Control Command will initialize the radio to user-defined settings from ti_radio_config.c/h which can be determined in SMARTRFTM-STUDIO: AT+I 00<CR>

    Regards,
    Ryan

  • Hi Ryan,

    In rfEasyLinkNp.syscfg page (using CCS), I select Custom and deselect Easylink under RF Stack since SysConfig doesn't support multiple stack configuration. Next, I follow instructions from this link:

    software-dl.ti.com/.../proprietary-rf-driver.html

    CCS complains that it couldn't find "ti_easylink_config.h". Do you have instruction on how to include 802.15.4 QPSK?

    Thanks,

    Koon 

  • Hi Koon,

    This involves Step 9: Adjust Your Application Files.  I would recommend keeping the EasyLink configuration but modifying the SysConfig file for Radio -> Use RF Settings Exported from SmartRF Studio and add the ti_radio_config.c/h files directly to your project.

    Regards,
    Ryan

  • Hi Ryan,

    If I select "Use RF Settings Exported from SmartRF Studio," I receive a few errors messages when building the project.

    Error: gmake: *** [easylink/EasyLink.obj] Error 1

    Thanks,

    Koon

  • Clean the project before rebuilding a provide a complete error log.

    Regards,
    Ryan

  • Hi Ryan,

    I have attached a screen capture of CCS ver 9.3 with the error message. I also include ti_radio_config.c/h that I generate from smart studio.

    Koon

    ti_radio_config.c
    //*********************************************************************************
    // Generated by SmartRF Studio version 2.16.0 (build#215)
    // The applied template is compatible with CC26x2 SDK version 2.10.xx.xx or newer.
    // Device: CC2652R Rev. E (2.1). 
    //
    //*********************************************************************************
    
    
    //*********************************************************************************
    // Parameter summary
    // IEEE Channel: 11 
    // Frequency: 2405 MHz
    // SFD: 0 
    // Packet Data: 255 
    // Preamble      (32 bit): 01010101... 
    // TX Power: 5 dBm 
    
    #include <ti/devices/DeviceFamily.h>
    #include DeviceFamily_constructPath(driverlib/rf_mailbox.h)
    #include DeviceFamily_constructPath(driverlib/rf_common_cmd.h)
    #include DeviceFamily_constructPath(driverlib/rf_ieee_cmd.h)
    #include <ti/drivers/rf/RF.h>
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_ieee_802_15_4.h)
    #include "ti_radio_config.h"
    
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
        .rfMode = RF_MODE_AUTO,
        .cpePatchFxn = &rf_patch_cpe_ieee_802_15_4,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0
    };
    
    
    // Overrides for CMD_RADIO_SETUP
    uint32_t pOverrides[] =
    {
        // override_ieee_802_15_4.xml
        // DC/DC regulator: In Tx, use DCDCCTL5[3:0]=0x3 (DITHER_EN=0 and IPEAK=3).
        (uint32_t)0x00F388D3,
        // Rx: Set LNA bias current offset to +15 to saturate trim to max (default: 0)
        (uint32_t)0x000F8883,
        (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,
        .loDivider = 0x00,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x0,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0x7217,
        .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
    // IEEE 802.15.4 Transmit Command
    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
    // IEEE 802.15.4 Receive Command
    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
    };
    
    
    ti_radio_config.h

  • I could not find a working solution and have no expertise in this area, you may need to disable SysConfig to accomplish your task.

    Regards,
    Ryan

  • Ryan,

    How do I disable SysConfig? Is it fair to say that it is not possible to generate 802.15.4 O-QPSK signal using rfEasyLinkNp project?

    Thanks,

    Koon

  • I tried but there are more error messages. It would be great if TI can try it. I just want to verify 802.15.4 O-QPSK signal with CC2652R.

  • I apologize for the chase, it will not be possible for you to evaluate O-QPSK with the EasyLink/Proprietary RF Stack as these involve different PHYs: https://e2e.ti.com/support/tools/ccs/f/81/p/877286/3247439#3247439 

    O-QPSK is a special modulation of MSK.  Backing up, you could use the 15.4-Stack coprocessor and TI-15-4-STACK-GATEWAY-LINUX-SDK

    http://dev.ti.com/tirex/explore/node?node=ALDzqGjWNKC73CCgya.xBw__pTTHBmu__LATEST 
    http://software-dl.ti.com/simplelink/esd/ti15.4stack_linux_x64/3.40.00.10/exports/docs/ti154stack/html/ti154stack-guide/index-linux.html 

    You should only need the Interactive Command Line Interface for your purposes.

    Regards,
    Ryan

  • Ryan,

    Can you point me to Interactive Command Line Interface section?

    Thanks,

    Koon