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.

Receiving empty packets when using fixed length cofiguration (CC1350)

Other Parts Discussed in Thread: CC1350, CC2650, CC1310

I'm running the simplelink_easylink example (v.1.1.0) for CC13xx using 1 EB as TX and the other as RX. For testing I just opened a UART and write the received bytes.

In the original configuration everything works as expected. However when I switch to fixed length (RF_cmdPropTx.pktConf.bVarLen = 0x0 and RF_cmdPropRx.pktConf.bVarLen = 0x0) I get empty (all zero) packets.

I'm not sure whether it's a problem with the receiver buffer (queue) or the radio. I'm grateful for any idea on how to debug it

  • Did you set maxPktLen to the correct value in CMD_PROP_RX? If this is not set the expected packet is larger than the size of rxDataEntryBuffer.
  • Thanks for your reply. I manage to receive data now.

    However I'm still not getting the correct data from 4-gfsk packets. I'm sending: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D but receiving something like AA 99 AA A9 A6 A5 A6 A5 AA A9 AA A9 A6 A5. I attached the config I'm using below. Using 2-GFSK I get the correct values.

    // Overrides for CMD_PROP_RADIO_DIV_SETUP
    uint32_t pOverrides[] =
    {
    // override_synth.xml
    
        HW32_ARRAY_OVERRIDE(0x6088,1),
        (uint32_t)0x0000001A,
        ADI_HALFREG_OVERRIDE(0,61,0xF,0xD),
        HW32_ARRAY_OVERRIDE(0x4038,1),
        (uint32_t)0x0000003A,
        HW_REG_OVERRIDE(0x4020,0x7F00),
        HW_REG_OVERRIDE(0x4064,0x0040),
        (uint32_t)0x684A3,
        (uint32_t)0xC0040141,
        (uint32_t)0x0533B107,
        (uint32_t)0xA480583,
        (uint32_t)0x7AB80603,
        ADI_REG_OVERRIDE(1,4,0x1F),
        ADI_HALFREG_OVERRIDE(1,7,0x4,0x4),
        HW_REG_OVERRIDE(0x6084,0x35F1),
        (uint32_t)0x38883,
        (uint32_t)0xFFFFFFFF,
    	ADI_REG_OVERRIDE(0,12,0xF9), // full output power
    };
    
    
    // CMD_PROP_RADIO_DIV_SETUP
    rfc_CMD_PROP_RADIO_DIV_SETUP_t RF_cmdPropRadioDivSetup =
    {
        .commandNo 					= 0x3807,
        .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,
    
        .modulation.modType 		= 0x1, // 1=GFSK
        .modulation.deviation		= 0xf8,
    
    	// 62kbps
    	.symbolRate.preScale        = 0xb,
    	.symbolRate.rateWord        = 0x7465,
    	// 124 kbps
    	//.symbolRate.preScale = 0xe,
    	//.symbolRate.rateWord = 0x12846,
    
        .symbolRate.bPdifDecim		= 0x0,
        .symbolRate.pdifDecim 		= 0x0,
    
        .rxBw = 0x4,  // modified
    
        .preamConf.nPreamBytes 		= 0x4,
        .preamConf.preamMode 		= 0x0,
    
        .formatConf.nSwBits 		= 0x10,
        .formatConf.bBitReversal 	= 0x0,
        .formatConf.bMsbFirst 		= 0x1, 
        .formatConf.fecMode 	= 0x9, // 9=4-GFSK
        .formatConf.bDigitalAgc 	= 0x0,
        .formatConf.whitenMode 		= 0x0,  // modified
    
        .config.frontEndMode 	= 0x0,
        .config.biasMode 		= 0x1, 
        .config.bNoAdi0Setup 	= 0x0,
        .config.bNoAdi0Trim 	= 0x0,
        .config.bNoAdi0Ovr 		= 0x0,
        .config.bNoAdi1Setup 	= 0x0,
        .config.bNoAdi1Trim 	= 0x0,
        .config.bNoAdi1Ovr 		= 0x0,
        .config.bNoFsPowerUp 	= 0x0,
        .config.lnaIbBoost 		= 0x0,
    
        .txPower.IB = 0x3f,
        .txPower.GC = 0x0,
        .txPower.boost = 0x0,
        .txPower.tempCoeff = 0x0,
        .pRegOverride = pOverrides,
        .centerFreq = 0x0364,
        .intFreq = 0x8000,
        .loDivider = 0x05,
    };
    
    // CMD_FS
    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                  = 0x360, // Frequency
    	.fractFreq                  = 0x0, 
    
    	.synthConf.bTxMode          = 0x0,
    	.synthConf.refFreq          = 0x0,
    	.calibConf.bOverrideCalib   = 0x0,
    	.calibConf.bSkipTdcCalib    = 0x0,
    	.calibConf.bSkipCoarseCalib = 0x0,
    	.calibConf.bSkipMidCalib    = 0x0,
    	.calibConf.coarsePrecal     = 0x0,
    	.midPrecal                  = 0x00,
    	.ktPrecal                   = 0x00,
    	.tdcPrecal                  = 0x0000,
    };
    
    
    // CMD_PROP_TX
    rfc_CMD_PROP_TX_t RF_cmdPropTx =
    {
        .commandNo = 0x3801,
        .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,
        .pktConf.bFsOff = 0x0,
        .pktConf.bUseCrc = 0x0,
        .pktConf.bVarLen = 0x0, 	// varlen
        .pktLen = 0x0e, //overwritten in Txtask!
        .syncWord = 0x000051de,
        .pPkt = 0, /*INSERT APPLICABLE POINTER: (uint8_t*)&xxx */
    };
    
    // CMD_PROP_RX
    rfc_CMD_PROP_RX_t RF_cmdPropRx =
    {
        .commandNo = 0x3802,
        .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,
    
        .pktConf.bFsOff = 0x0,
        .pktConf.bRepeatOk = 0x0, 
        .pktConf.bRepeatNok = 0x0, 
        .pktConf.bUseCrc = 0x0,
        .pktConf.bVarLen = 0x0,	// varlen
        .pktConf.bChkAddress = 0x0,
        .pktConf.endType = 0x0,
        .pktConf.filterOp = 0x1,
    
        .rxConf.bAutoFlushIgnored = 0x0,
        .rxConf.bAutoFlushCrcErr = 0x0,
        .rxConf.bIncludeHdr = 0x1,
        .rxConf.bIncludeCrc = 0x0,
        .rxConf.bAppendRssi = 0x0,
        .rxConf.bAppendTimestamp = 0x0,
        .rxConf.bAppendStatus = 0x0,
    
        .syncWord = 0x000051de,
        .maxPktLen = 0xe,  
        .address0 = 0xaa,
        .address1 = 0xbb,
        .endTrigger.triggerType = 0x1,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000,
        .pQueue = 0, /*INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx */
        .pOutput = 0, /*INSERT APPLICABLE POINTER: (uint8_t*)&xxx */
    };

  • where did you find the simplelink_easylink example (v.1.1.0) for CC1350? We have samples but no docs or software and are anxious to get started.
  • We haven't started to look into finding the optimal settings for 4GFSK. I assume that some AGC settings and the sync threshold has to be tuned to get good performance. Out of the box using SmartRF Studio I managed to get link but I typically get bit error in a couple of bytes.
  • Thank you. Is it possible to modify the sync threshold and AGC setting via command options or override?

  • The plan is to include support for changing these settings in SmarRF Studio and get Studio to export the required overrides.
  • Ok thanks. Since it is currently crucial to further development for us, is it possible to set the override manually?  I guess bascially I just need the address and values...

  • What is the volume potential behind this request? If you want to do this offline, please send me a friend request.
  • May I bring up this issue again?
    The manual of the CC26xx/CC13xx says that the parameters of pRegOverride for the CPE command CMD_RADIO_SETUP are available via SmartRF Studio or via TI. If I understood correctly, SmartRF Studio is still lacking this feature. So, where can I get these values from?

    My other thread concerning this topic: e2e.ti.com/.../1629656

    Thank you,
    Dominik

  • Hi

    The overrides have been available in Studio for a long time, but for CC1350 genfsk you will need to use the CMD_PROP_RADIO_DIV_SETUP instead of the CMD_PROP_RADIO_SETUP. Pressing on the code export button you will get a list with the overrides as shown below:

    #include <driverlib/rf_mailbox.h>

    #include <driverlib/rf_common_cmd.h>

    #include <driverlib/rf_prop_cmd.h>

    #include <ti/drivers/rf/RF.h>

    #include <rf_patches/rf_patch_cpe_genfsk.h>

    #include "smartrf_settings.h"

     

    // TI-RTOS RF Mode Object

    RF_Mode RF_prop =

    {

    .rfMode = RF_MODE_PROPRIETARY,

    .cpePatchFxn = &rf_patch_cpe_genfsk,

    .mcePatchFxn = 0,

    .rfePatchFxn = 0,

    };

    // Overrides for CMD_PROP_RADIO_DIV_SETUP

    uint32_t pOverrides[] =

    {

    // override_synth.xml

    HW32_ARRAY_OVERRIDE(0x6088,1),

    (uint32_t)0x0000001A,

    ADI_HALFREG_OVERRIDE(0,61,0xF,0xD),

    HW32_ARRAY_OVERRIDE(0x4038,1),

    (uint32_t)0x0000003A,

    HW_REG_OVERRIDE(0x4020,0x7F00),

    HW_REG_OVERRIDE(0x4064,0x0040),

    (uint32_t)0x684A3,

    (uint32_t)0xC0040141,

    (uint32_t)0x0533B107,

    (uint32_t)0xA480583,

    (uint32_t)0x7AB80603,

    ADI_REG_OVERRIDE(1,4,0x9F),

    ADI_HALFREG_OVERRIDE(1,7,0x4,0x4),

    HW_REG_OVERRIDE(0x6084,0x35F1),

    (uint32_t)0x00038883,

    (uint32_t)0x00FB88A3,

    // TX power override

    ADI_REG_OVERRIDE(0,12,0xF9),

    (uint32_t)0xFFFFFFFF,

    };

    Siri

  • Thank you for the code and the reply!

    I just had a look into the CC1350 configurations in SmartRF Studio 7 (2.1.0) . There, the Command View contains a button "Code Export". I am using a CC2650 for which this button is missing. I should try to get a newer version of SmartRF Studio.

    I suspect, the overrides of the CC1350 for CMD_PROP_RADIO_SETUP cannot be used in conjunction with the CC2650 and CMD_RADIO_SETUP, right?

    Dominik

  • The newest TRM (www.ti.com/.../swcu117) list which commands that are valid for which radio.
  • This link doesn't seem to work.
  • We do have an example of how to get GenFSK up and running on CC2650 also. What data rates would you need?

    Thomas
  • Sorry, an extra ) got in in the in in the copy/ paste process, try www.ti.com/.../swcu117c.pdf. This is now linked to the CC1310 page etc.
  • Thanks, the new TRM is much more informative on that subject. Unfortunately, the SmartRF Studio 7 (v.. 2.2.0) still lacks a code export for the CC2650 (missing button "Code Export"). However, I found some XML files in the Smart RF folder under .\config\xml\cc2650_ieee_15_4\overrides\.