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: min latency expetced to replace a cable

Part Number: CC2650
Other Parts Discussed in Thread: CC1352R

Hello everybody , 

I would like to rpelace a cable to  tramit data , ideally 2mbit  and low latency ( <20uS ) .

I  did a basic test with smartrfstudio one cc2650 transmitting to another , if I select  proprietary or  BLE  setting  it seems I can send data @ 2Mbit . 

could you help me about latency ( time I get a data to sen to the cc2650 and the time  i get on the other cc2650 after the mcu )  ?  which latency shoudl I expect  using propirtary for example  ?  at leasst which range  ( us , tens of us etc ) ?

best regards

Carlo

  • HI FI ,
    thank you but I m a little lost .
    what I need is to replace a cable , so I need continuos flow of data ( about 2Mbits) plus been data used for control latency must be very low ( < 100uS ) .
    as far as I undertand using smartrf studio and proprietary protocol I can get a high baud rate ( like 4 M ) but can it be continuous ?
    about latency first look it seems much higher like in the mS range : am I right ? any number ?
    I ordered CC256x kits and waiting to get them to test myself . did you ever tried yourselves ?
    any other idea ?
    thank you
    regards
    Carlo
  • I believe what you are looking for is transparent mode where the data is streamed into the device in a continuous fashion. I know that CC2650 can do it but I am not sure about the datarates for this. I will look into this and get back.
  • HI FI ,
    that would be great ! thank you
    other way is a good instant throughput ( like 2-3 Mbit ) but small latency ( like < 100uS or 1mS )
    regards
    Carlo
  • Hi,
    I just checked and I am afraid the transparent mode with the data rates you want is not going to work. I have asked a team member to look into another option which seems feasible.
  • Hi Fi ,
    let me revise specs and needs a little .
    I have now a serial cable with about 1Mb/s , I need 100bytes to be send and received every 100uS . So not so interested in single bit latency , but I must be able to sustain this flow so that on RX side I see this 100bits every 100uS . does this make sytem feasible ? any suggestion ? I can use any protocol / freq .
    consider being cable replacemet I m in the few meters range ( < 5 m )
    thank you
    regards
    carlo
  • Hi, 

    If you need throughput of 1Mbps, recommended modes are 2mbps BLE5 mode with proprietary APIs or 5mbps datarate. However, the demodulated data will be in packet format and hence it si not truly real time. However, if you are able to buffer the data, you can still achieve 1mbps throughput with both these modes. Would this work for you?

    CC2640R2 device is better suited for this application, is there a reason you are using CC2650?

    Regards, 

  • HI Svs ,
    I need to be able to keep 100bits data in less then 100uS so to be able to keep the flow continuos.
    as I understand using BLE physical this is feasible ( I should get > 2Mbit data thorughput )
    please which way you suggest me to test this ? a kind of uart - air air - uart ? which example to start from or at least a way I can show in a lab up an running so to have time to invest on it ?
    no reason to use cc2650 , just considering this since maybe a differnet than BLE protocol could be used .
    thank you
    regards
    Carlo
  • Hello,

    Using 2mbps BLE PHY, it is not possible to get 2mbps throughput with packet transmission. However, it seems like you need 1mbps throughput which should be possible. Please consider using CC2640R2 for any development since the latest SDK only supports this device.

    Please refer to the following post for details on implementation of this mode:
    e2e.ti.com/.../2936649

    Regards,
  • Hi SVS ,
    I am starting using rfEasyLinkTx_CC1352R1_LAUNCHXL_tirtos_ccs example ( I have 2 CC1352 kits ) and same RX example
    vanilla example so no changes to radio settings .
    now we just put a GPIO toggle before sending in air , right here :
    #ifdef RFEASYLINKTX_ASYNC
    PIN_setOutputValue(pinHandle, Board_PIN_FRAME, 0);

    EasyLink_transmitAsync(&txPacket, txDoneCb);

    what we see are 30 bytes sent OK , but spacing between two frames on the TX is about 7 mS ...
    we tried to set immediate , but no success .
    what should we do to have min time in between to frame sent ?
    on top please which is best packet size ?
    I need as said 1Mb/s but ideally minimal latency , so short and frequent frames would work the best
    thank yo uvery much
    best regards
    Carlo
  • It is much easier to use the rfPacketRX and rfPacketTX example. I took the examples and replaced the overrides and setup commands in smartrf_settings.c with the 2 Mbps BLE settings from Studio. In addition, I replaced the RX and TX commands with the HS commands, as this is necessary to run 2 Mbps.

    My settings file and the modified rfPacketRX.c and rfPacketTX.c files are attached. In the example, I transmit a packet with a 100 bytes long payload every 750 us (effective data rate is 1.07 Mbps).

    It is fully possible to transmit longer packets, and/or do command chaining (chain the TX command to itself) to increase the throughput.

    6683.rfPacketTx.c
    /*
     * Copyright (c) 2017, 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.
     */
    
    /***** Includes *****/
    /* Standard C Libraries */
    #include <stdlib.h>
    #include <unistd.h>
    
    /* TI Drivers */
    #include <ti/drivers/rf/RF.h>
    #include <ti/drivers/PIN.h>
    #include <ti/drivers/pin/PINCC26XX.h>
    
    /* Driverlib Header files */
    #include DeviceFamily_constructPath(driverlib/rf_prop_mailbox.h)
    
    /* Board Header files */
    #include "Board.h"
    #include "smartrf_settings/smartrf_settings.h"
    
    #include "RFQueue.h"
    
    /***** Defines *****/
    
    /* Do power measurement */
    //#define POWER_MEASUREMENT
    
    /* Packet TX Configuration */
    #define PAYLOAD_LENGTH      100
    #ifdef POWER_MEASUREMENT
    #define PACKET_INTERVAL     5  /* For power measurement set packet interval to 5s */
    #else
    #define PACKET_INTERVAL     500000  /* Set packet interval to 500000us or 500ms */
    #endif
    
    //#define PAYLOAD_LENGTH          30              // Length of the packet to send
    #define DATA_ENTRY_HEADER_SIZE  8               // Constant header size of a Generic Data Entry
    #define MAX_LENGTH              PAYLOAD_LENGTH  // Set the length of the data entry
    #define NUM_DATA_ENTRIES_TX     1
    #define NUM_APPENDED_BYTES_TX   0
    
    /***** Prototypes *****/
    
    /***** Variable declarations *****/
    static RF_Object rfObject;
    static RF_Handle rfHandle;
    
    /* Pin driver handle */
    static PIN_Handle ledPinHandle;
    static PIN_State ledPinState;
    
    static uint8_t *pPacket;
    static uint16_t seqNumber;
    
    /*
     * Application LED pin configuration table:
     *   - All LEDs board LEDs are off.
     */
    PIN_Config pinTable[] =
    {
        Board_PIN_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
        Board_PIN_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    #ifdef POWER_MEASUREMENT
    #if defined(Board_CC1350_LAUNCHXL)
        Board_DIO30_SWPWR | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    #endif
    #endif
        PIN_TERMINATE
    };
    
    /* Buffer which contains all Data Entries for receiving data.
     * Pragmas are needed to make sure this buffer is 4 byte aligned (requirement from the RF Core) */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_ALIGN (txDataEntryBuffer, 4);
    static uint8_t
    txDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES_TX,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES_TX)];
    #elif defined(__IAR_SYSTEMS_ICC__)
    #pragma data_alignment = 4
    static uint8_t
    txDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES_TX,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES_TX)];
    #elif defined(__GNUC__)
    static uint8_t
    txDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES_TX,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES_TX)]
                                                      __attribute__((aligned(4)));
    #else
    #error This compiler is not supported.
    #endif
    
    /* Receive dataQueue for RF Core to fill in data */
    static dataQueue_t dataQueue;
    static rfc_dataEntryGeneral_t* currentDataEntry;
    
    /***** Function definitions *****/
    
    void *mainThread(void *arg0)
    {
        RF_Params rfParams;
        RF_Params_init(&rfParams);
    
        /* Open LED pins */
        ledPinHandle = PIN_open(&ledPinState, pinTable);
        if (ledPinHandle == NULL)
        {
            while(1);
        }
    
        if( RFQueue_defineQueue(&dataQueue,
                                   txDataEntryBuffer,
                                   sizeof(txDataEntryBuffer),
                                   NUM_DATA_ENTRIES_TX,
                                   MAX_LENGTH + NUM_APPENDED_BYTES_TX))
           {
               /* Failed to allocate space for all data entries */
               while(true);
           }
    
    #ifdef POWER_MEASUREMENT
    #if defined(Board_CC1350_LAUNCHXL)
        /* Route out PA active pin to Board_DIO30_SWPWR */
        PINCC26XX_setMux(ledPinHandle, Board_DIO30_SWPWR, PINCC26XX_MUX_RFC_GPO1);
    #endif
    #endif
    
        PINCC26XX_setMux(ledPinHandle, Board_PIN_LED2, PINCC26XX_MUX_RFC_GPO1);
    
    
        RF_cmdTxHS.pQueue = &dataQueue;
        RF_cmdTxHS.startTrigger.triggerType = TRIG_NOW;
    
        currentDataEntry = (rfc_dataEntryGeneral_t*)&txDataEntryBuffer;
        currentDataEntry->length = PAYLOAD_LENGTH;
        pPacket = &currentDataEntry->data;
    
        /* Request access to the radio */
        rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdBle5RadioSetup, &rfParams);
    
        /* Set the frequency */
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    
        while(seqNumber < 1000)
        {
            /* Create packet with incrementing sequence number and random payload */
            pPacket[0] = (uint8_t)(seqNumber >> 8);
            pPacket[1] = (uint8_t)(seqNumber++);
            uint8_t i;
            for (i = 2; i < PAYLOAD_LENGTH; i++)
            {
                pPacket[i] = i;//rand();
            }
    
            /* Send packet */
            RF_EventMask terminationReason = RF_runCmd(rfHandle, (RF_Op*)&RF_cmdTxHS,
                                                       RF_PriorityNormal, NULL, 0);
    
    
            PIN_setOutputValue(ledPinHandle, Board_PIN_LED1,!PIN_getOutputValue(Board_PIN_LED1));
        }
        while(1);
    }
    

    8750.smartrf_settings.c
    //*********************************************************************************
    // Generated by SmartRF Studio version 2.13.0 (build#170)
    // The applied template is compatible with CC13x2 SDK version 2.10.xx.xx or newer.
    // Device: CC1352R Rev. E (2.1)
    //
    //*********************************************************************************
    
    
    //*********************************************************************************
    // Parameter summary
    // Adv. Address: 010203040506
    // Adv. Data: dummy
    // BLE Channel: 17
    // Extended Header: 09 09 010203040506 babe
    // Frequency: 2440 MHz
    // PDU Payload length:: 30
    // TX Power: 5 dBm (requires define CCFG_FORCE_VDDR_HH = 0 in ccfg.c, see CC13xx/CC26xx Technical Reference Manual)
    // Whitening: true
    
    #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_ble_cmd.h)
    #include DeviceFamily_constructPath(driverlib/rf_hs_cmd.h)
    
    #include <ti/drivers/rf/RF.h>
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_bt5.h)
    #include "smartrf_settings.h"
    
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
        .rfMode = RF_MODE_AUTO,
        .cpePatchFxn = &rf_patch_cpe_bt5,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0
    };
    
    
    // Overrides for CMD_BLE5_RADIO_SETUP
    uint32_t pOverridesCommon[] =
    {
        // override_ble5_setup_override_common.xml
        // DC/DC regulator: In Tx, use DCDCCTL5[3:0]=0x3 (DITHER_EN=0 and IPEAK=3).
        (uint32_t)0x00F388D3,
        // Bluetooth 5: Set pilot tone length to 20 us Common
        HW_REG_OVERRIDE(0x6024,0x2E20),
        // Bluetooth 5: Compensate for reduced pilot tone length
        (uint32_t)0x01280263,
        // Bluetooth 5: Default to no CTE.
        HW_REG_OVERRIDE(0x5328,0x0000),
        (uint32_t)0xFFFFFFFF
    };
    
    
    // Overrides for CMD_BLE5_RADIO_SETUP
    uint32_t pOverrides1Mbps[] =
    {
        // override_ble5_setup_override_1mbps.xml
        // Bluetooth 5: Set pilot tone length to 20 us
        HW_REG_OVERRIDE(0x5320,0x03C0),
        // Bluetooth 5: Compensate syncTimeadjust
        (uint32_t)0x015302A3,
        (uint32_t)0xFFFFFFFF
    };
    
    
    // Overrides for CMD_BLE5_RADIO_SETUP
    uint32_t pOverrides2Mbps[] =
    {
        // override_ble5_setup_override_2mbps.xml
        // Bluetooth 5: Set pilot tone length to 20 us
        HW_REG_OVERRIDE(0x5320,0x03C0),
        // Bluetooth 5: Compensate syncTimeAdjust
        (uint32_t)0x00F102A3,
        (uint32_t)0xFFFFFFFF
    };
    
    
    // Overrides for CMD_BLE5_RADIO_SETUP
    uint32_t pOverridesCoded[] =
    {
        // override_ble5_setup_override_coded.xml
        // Bluetooth 5: Set pilot tone length to 20 us
        HW_REG_OVERRIDE(0x5320,0x03C0),
        // Bluetooth 5: Compensate syncTimeadjust
        (uint32_t)0x07A902A3,
        // Rx: Set AGC reference level to 0x1B (default: 0x2E)
        HW_REG_OVERRIDE(0x609C,0x001B),
        (uint32_t)0xFFFFFFFF
    };
    
    
    // CMD_BLE5_RADIO_SETUP
    // Bluetooth 5 Radio Setup Command for all PHYs
    rfc_CMD_BLE5_RADIO_SETUP_t RF_cmdBle5RadioSetup =
    {
        .commandNo = 0x1820,
        .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,
        .defaultPhy.mainMode = 0x1,
        .defaultPhy.coding = 0x0,
        .loDivider = 0x00,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x0,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0x7217,
        .pRegOverrideCommon = pOverridesCommon,
        .pRegOverride1Mbps = pOverrides1Mbps,
        .pRegOverride2Mbps = pOverrides2Mbps,
        .pRegOverrideCoded = pOverridesCoded
    };
    
    
    // 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 = 0x0988,
        .fractFreq = 0x0000,
        .synthConf.bTxMode = 0x0,
        .synthConf.refFreq = 0x0,
        .__dummy0 = 0x00,
        .__dummy1 = 0x00,
        .__dummy2 = 0x00,
        .__dummy3 = 0x0000
    };
    
    // CMD_TX_HS
    rfc_CMD_HS_TX_t RF_cmdTxHS =
    {
        .commandNo = 0x3841,
        .status = 0x0000,
        .pNextOp = 0x00000000,
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bUseCrc = 0x1,
        .pktConf.bVarLen = 0x1,
        .pQueue = 0,
    };
    
    // CMD_RX_HS
    rfc_CMD_HS_RX_t RF_cmdRxHS =
    {
        .commandNo = CMD_HS_RX,
        .status = 0x0000,
        .pNextOp = 0x00000000,
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0,
        .pktConf.bUseCrc = 1,
        .pktConf.bVarLen = 1,
        .pktConf.bRepeatOk = 0,
        .pktConf.bRepeatNok = 0,
        .pktConf.addressMode = 0,
        .rxConf.bAutoFlushCrcErr = 0,
        .rxConf.bIncludeLen = 1,
        .rxConf.bIncludeCrc = 0,
        .rxConf.bAppendStatus = 0,
        .rxConf.bAppendTimestamp = 0,
        .maxPktLen = 0,
        .address0 = 0,
        .address1 = 0,
        .__dummy0 = 0,
        .endTrigger.triggerType = 1,
        .endTrigger.bEnaCmd = 0,
        .endTrigger.triggerNo = 0,
        .endTrigger.pastTrig = 0,
        .endTime = 0,
        .pQueue = 0,
        .pOutput = 0,
    };
    

    2474.smartrf_settings.h

    0825.rfPacketRx.c
    /*
     * Copyright (c) 2017, 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.
     */
    
    /***** Includes *****/
    /* Standard C Libraries */
    #include <stdlib.h>
    
    /* TI Drivers */
    #include <ti/drivers/rf/RF.h>
    #include <ti/drivers/PIN.h>
    
    /* Driverlib Header files */
    #include DeviceFamily_constructPath(driverlib/rf_prop_mailbox.h)
    
    /* Board Header files */
    #include "Board.h"
    
    /* Application Header files */
    #include "RFQueue.h"
    #include "smartrf_settings/smartrf_settings.h"
    
    /***** Defines *****/
    
    /* Packet RX Configuration */
    #define DATA_ENTRY_HEADER_SIZE 8  /* Constant header size of a Generic Data Entry */
    #define MAX_LENGTH             100 /* Max length byte the radio will accept */
    #define NUM_DATA_ENTRIES       2  /* NOTE: Only two data entries supported at the moment */
    #define NUM_APPENDED_BYTES     2  /* The Data Entries data field will contain:
                                       * 1 Header byte (RF_cmdPropRx.rxConf.bIncludeHdr = 0x1)
                                       * Max 30 payload bytes
                                       * 1 status byte (RF_cmdPropRx.rxConf.bAppendStatus = 0x1) */
    
    
    
    /***** Prototypes *****/
    static void callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e);
    
    /***** Variable declarations *****/
    static RF_Object rfObject;
    static RF_Handle rfHandle;
    
    /* Pin driver handle */
    static PIN_Handle ledPinHandle;
    static PIN_State ledPinState;
    
    /* Buffer which contains all Data Entries for receiving data.
     * Pragmas are needed to make sure this buffer is 4 byte aligned (requirement from the RF Core) */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_ALIGN (rxDataEntryBuffer, 4);
    static uint8_t 
    rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES)];
    #elif defined(__IAR_SYSTEMS_ICC__)
    #pragma data_alignment = 4
    static uint8_t 
    rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES)];
    #elif defined(__GNUC__)
    static uint8_t 
    rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                      MAX_LENGTH, 
                                                      NUM_APPENDED_BYTES)] 
                                                      __attribute__((aligned(4)));
    #else
    #error This compiler is not supported.
    #endif
    
    /* Receive dataQueue for RF Core to fill in data */
    static dataQueue_t dataQueue;
    static rfc_dataEntryGeneral_t* currentDataEntry;
    static uint8_t packetLength;
    static uint8_t* packetDataPointer;
    static rfc_propRxOutput_t rxStatistics;
    
    
    static uint8_t packet[MAX_LENGTH + NUM_APPENDED_BYTES - 1]; /* The length byte is stored in a separate variable */
    
    /*
     * Application LED pin configuration table:
     *   - All LEDs board LEDs are off.
     */
    PIN_Config pinTable[] =
    {
        Board_PIN_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    	PIN_TERMINATE
    };
    
    /***** Function definitions *****/
    
    void *mainThread(void *arg0)
    {
        RF_Params rfParams;
        RF_Params_init(&rfParams);
    
        /* Open LED pins */
        ledPinHandle = PIN_open(&ledPinState, pinTable);
        if (ledPinHandle == NULL)
        {
            while(1);
        }
    
        if( RFQueue_defineQueue(&dataQueue,
                                rxDataEntryBuffer,
                                sizeof(rxDataEntryBuffer),
                                NUM_DATA_ENTRIES,
                                MAX_LENGTH + NUM_APPENDED_BYTES))
        {
            /* Failed to allocate space for all data entries */
            while(1);
        }
    
        /* Modify CMD_PROP_RX command for application needs */
        /* Set the Data Entity queue for received data */
        RF_cmdRxHS.pQueue = &dataQueue;
        /* Discard packets with CRC error from Rx queue */
        RF_cmdRxHS.rxConf.bAutoFlushCrcErr = 1;
        /* Discard packets with CRC error from Rx queue */
        RF_cmdRxHS.rxConf.bAutoFlushCrcErr = 1;
        /* Implement packet length filtering to avoid PROP_ERROR_RXBUF */
        RF_cmdRxHS.maxPktLen = MAX_LENGTH;
        RF_cmdRxHS.pktConf.bRepeatOk = 1;
        RF_cmdRxHS.pktConf.bRepeatNok = 1;
        RF_cmdRxHS.pOutput = (rfc_hsRxOutput_t*)&rxStatistics;
    
    
        /* Request access to the radio */
        rfHandle = RF_open(&rfObject, &RF_prop, 
                           (RF_RadioSetup*)&RF_cmdBle5RadioSetup, &rfParams);
    
        /* Set the frequency */
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    
        /* Enter RX mode and stay forever in RX */
        RF_EventMask terminationReason = RF_runCmd(rfHandle, (RF_Op*)&RF_cmdRxHS,
                                                   RF_PriorityNormal, &callback,
                                                   RF_EventRxEntryDone);
    
        while(1);
    }
    
    void callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
    {
        if (e & RF_EventRxEntryDone)
        {
            /* Toggle pin to indicate RX */
            PIN_setOutputValue(ledPinHandle, Board_PIN_LED2,
                               !PIN_getOutputValue(Board_PIN_LED2));
    
            /* 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));
    
            RFQueue_nextEntry();
        }
    }
    

    You need to add the RFQueue.c/h to the rfPacketTX examle.

    I used the CC1352R devices and the simplelink_cc13x2_26x2_sdk_3_10_00_53.

    BR

    Siri