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.

CC1310: Receive nothing using 433M@1Mbps with RF_cmdPropTxAdv & RF_cmdPropRxAdv

Part Number: CC1310

Hi

I'm tring to use CC1310 to do a test, as below:

1.PAYLOAD_LENGTH is 4000

2.Using 433M@1Mbps with RF_cmdPropTxAdv & RF_cmdPropRxAdv

3.PacketInterval = (uint32_t)(4000000*0.5f);  It's 500ms.

But the receiver cannot receive anything at all. I check transmitter end with spectrum analyzer, and I can see spectrum correctly, this indicate that data has been send out correctly.

So I changed settings like below:

1.PAYLOAD_LENGTH is 30

2.Using 433M@1Mbps with RF_cmdPropTx & RF_cmdPropRx

3.PacketInterval = (uint32_t)(4000000*0.5f);  It's 500ms.

Now they can communicate with other correctly.

And further test as below:

1.PAYLOAD_LENGTH is 4000

2.Using 433M@50Kbps/500Kbps with RF_cmdPropTxAdv & RF_cmdPropRxAdv

3.PacketInterval = (uint32_t)(4000000*0.5f);  It's 500ms.

They also communicate with other correctly.

So I guess if using 1Mbps@RF_cmdPropTxAdv & RF_cmdPropRxAdv has some problems or somewhere should be modified?

Thanks!

  • Hi,

    it's not possible to use the proprietary PHY at this symbol rate. Sorry, the maximum is 500 kBd. There is a semi-official high-speed PHY for the CC1310. You can find it in the rfPacketErrorRate example. But this mode has only been specified for 868 Mhz. It doesn't work at 433 Mhz.

  • 6866.smartrf_settings.c
    
    //*********************************************************************************
    // These settings has been generated for use with TI-RTOS and cc13xxware
    //
    // Generated by SmartRF Studio version 2.2.0
    // Tested with TI-RTOS version tirtos_simplelink_2_14_02_22
    //
    //*********************************************************************************
    
    
    //*********************************************************************************
    // Parameter summary
    // Frequency: 868.00000 MHz
    // Data Format: Serial mode disable
    // Deviation: 250.000 kHz
    // Packet Length Config: Variable
    // Max Packet Length: 125
    // Packet Length: 30
    // RX Filter BW: 2.8MHz
    // Symbol Rate: 1MBPS
    // Sync Word Length: 32 Bits
    // Whitening: No whitening
    
    #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>
    
    
    // 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, 1MBPS mode
    uint32_t pOverrides[] =
    {
    // override_synth.xml
        MCE_RFE_OVERRIDE(0,0,0,0,0,0),   // 1Mbps / BLE PHY selected
        HW_REG_OVERRIDE(0x50c0,0x147A),  // RX-IF must be adjusted due to Divider5
        (uint32_t)0x0343,                // TX-IF = 0
        HW32_ARRAY_OVERRIDE(0x4038,1),
        (uint32_t)0x0000003A,
        HW_REG_OVERRIDE(0x4020,0x7F00),
        HW_REG_OVERRIDE(0x4064,0x0040),
        (uint32_t)0x000684A3,
        (uint32_t)0xC0040141,
        (uint32_t)0x0533B107,
        (uint32_t)0x0A480583,
        (uint32_t)0x7AB80603,
        ADI_REG_OVERRIDE(1,4,0x1F),
        ADI_HALFREG_OVERRIDE(1,7,0x4,0x4),
        (uint32_t)0x00038883,
        //Scaling of the filter in the matched receive filter for BLE
        HW_REG_OVERRIDE(0x50F0,0x0400),         // DEMMAFI0 filter coeffisents for 1 Mbps, 250 kHz deviation
        HW_REG_OVERRIDE(0x50F4,0x7B20),         // DEMMAFI1 filter coeffisents for 1 Mbps, 250 kHz deviation
        HW_REG_OVERRIDE(0x50F8,0x00C1),         // DEMMAFI2 filter coeffisents for 1 Mbps, 250 kHz deviation
        // TX power override
        ADI_REG_OVERRIDE(0,12,0xF9),
        (uint32_t)0xFFFFFFFF,
    };
    
    
    /* 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,
        .modulation.deviation       = 0x3E8,
        .symbolRate.preScale        = 0xC,
        .symbolRate.rateWord        = 0x80000,
        .rxBw                       = 0x81,//2.8 MHz  1 Mbps/BLE PHY need this for 868 MHz and Divider5
        .preamConf.nPreamBytes      = 0x4,
        .preamConf.preamMode        = 0x0,
        .formatConf.nSwBits         = 0x20,
        .formatConf.bBitReversal    = 0x0,
        .formatConf.bMsbFirst       = 0x1,
        .formatConf.fecMode         = 0x0,
        .formatConf.whitenMode      = 0x1,
        .config.frontEndMode        = 0x0,
        .config.biasMode            = 0x1,
        .config.bNoFsPowerUp        = 0x0,
        .txPower 			= 0xa73f,
        .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 = 0x0364,
        .fractFreq = 0x0000,
        .synthConf.bTxMode = 0x0,
        .synthConf.refFreq = 0x0,
        .__dummy0 = 0x00,
        .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 = 0x1,
        .pktConf.bVarLen = 0x1,
        .pktLen = 0x1e, // SET APPLICATION PAYLOAD LENGTH
        .syncWord = 0x930b51de,
        .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 = 0x1,
        .pktConf.bVarLen = 0x1,
        .pktConf.bChkAddress = 0x0,
        .pktConf.endType = 0x0,
        .pktConf.filterOp = 0x0,
        .rxConf.bAutoFlushIgnored = 0x0,
        .rxConf.bAutoFlushCrcErr = 0x0,
        .rxConf.bIncludeHdr = 0x1,
        .rxConf.bIncludeCrc = 0x0,
        .rxConf.bAppendRssi = 0x0,
        .rxConf.bAppendTimestamp = 0x0,
        .rxConf.bAppendStatus = 0x1,
        .syncWord = 0x930b51de,
        .maxPktLen = 0x7d, // MAKE SURE DATA ENTRY IS LARGE ENOUGH
        .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
    };
    
    // CMD_TX_POWER_BOOST
    rfc_CMD_TX_POWER_BOOST_t RF_cmdTxPowerBoost =
    {
        .commandNo = 0x0816,
        .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 = 0x0,
        .condition.nSkip = 0x0,
        .vddrLevel = 0x00,
        .paTrimValue = 0x00,
    };
    
    // CMD_TX_TEST
    rfc_CMD_TX_TEST_t RF_cmdTxTest =
    {
        .commandNo = 0x0808,
        .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,
        .config.bUseCw = 0x0,
        .config.bFsOff = 0x0,
        .config.whitenMode = 0x2,
        .__dummy0 = 0x00,
        .txWord = 0xabcd,
        .__dummy1 = 0x00,
        .endTrigger.triggerType = 0x1,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .syncWord = 0x930b51de,
        .endTime = 0x00000000,
    };
    
    Hi Richard W

    Thanks for your reply.

    Actually, this 1Mbps configuration is provided by TI about last year, as attached.And the 1Mbps is datarate, not symbol rate.

    You mentioned:it's not possible to use the proprietary PHY at this symbol rate.But I did range test about 1Mbps@433M & 868M using RF_cmdPropTx & RF_cmdPropRx, it worked OK!

    So, How to explain this?

    Thanks!

  • I have repied below,thanks!
  • Hi,

    you are not running the generic FSK PHY, but you are running kind of a BLE-alike PHY with the proprietary commands. No guarantees about the performance. However, using CMD_PROP_RX_ADV and CMD_PROP_TX_ADV, you should be able to transmit large packets. But keep in mind that 4000 bits is very long. Bit errors will likely occur and the packet will not be received. Especially in a crowded band like the 868/433 Mhz band.

    Does it work with the advanced commands if you transfer packets of about 300 bits? 

  • HI  Richard:

    1.The 1Mbps settings was provided by TI Shanghai office about last year.

    2.As you said, I tested 1Mbps@433M with PAYLOAD_LENGTH

    tx.c
    #include <stdlib.h>
    #include <xdc/runtime/System.h>
    #include <xdc/std.h>
    
    /* Drivers */
    #include <ti/drivers/rf/RF.h>
    #include <ti/drivers/PIN.h>
    
    /* Application headers */
    #include "Board.h"
    #include "menu.h"
    #include "RFQueue.h"
    #include "smartrf_settings/smartrf_settings.h"
    
    
    /***** Defines *****/
    #define PAYLOAD_LENGTH          1000//250//30
    #define DATA_ENTRY_HEADER_SIZE  8    /* Constant header size of a Generic Data Entry */
    #define MAX_LENGTH              1000//125  /* Set the length of the data entry */
    #define NUM_DATA_ENTRIES        1  
    #define NUM_APPENDED_BYTES      0
    
    
    /***** Variable declarations *****/
    static RF_Object rfObject;
    static RF_Handle rfHandle;
    
    static uint8_t packet[PAYLOAD_LENGTH];
    static uint16_t seqNumber;
    uint32_t packetCounter = 0;
    uint32_t packetInterval;
    
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_ALIGN (txDataEntryBuffer, 4);
    #elif defined(__IAR_SYSTEMS_ICC__)
    #pragma data_alignment = 4
    #else
    #error This compiler is not supported.
    #endif
    static uint8_t txDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                                     MAX_LENGTH,
                                                                     NUM_APPENDED_BYTES)];
    /* Tx queue or RF Core to read data from */
    static dataQueue_t dataQueue;
    static rfc_dataEntryGeneral_t* currentDataEntry;
    static uint8_t *pPacket;
    
    #define WOR_PREAMBLE_TIME_RAT_TICKS(x) ((uint32_t)(4000000*(1.0f/(x)))) 
    
    TestCaseResult tx_run()
    {  
      uint32_t time;
      
      RF_Params rfParams;
      RF_Params_init(&rfParams);
      
      RF_cmdPropTxAdv.pktLen = PAYLOAD_LENGTH; /* +1 for length byte */
      RF_cmdPropTxAdv.pPkt = packet;
      RF_cmdPropTxAdv.startTrigger.triggerType = TRIG_ABSTIME;
      RF_cmdPropTxAdv.startTrigger.pastTrig = 1;
      RF_cmdPropTxAdv.startTime = 0;
    //  RF_cmdPropTxAdv.preTime = WOR_PREAMBLE_TIME_RAT_TICKS(100);
      if( RFQueue_defineQueue(&dataQueue,
                              txDataEntryBuffer,
                              sizeof(txDataEntryBuffer),
                              NUM_DATA_ENTRIES,
                              MAX_LENGTH + NUM_APPENDED_BYTES))
      {
        /* Failed to allocate space for all data entries */
        while(true);
      }
      currentDataEntry = (rfc_dataEntryGeneral_t*)&txDataEntryBuffer;
      currentDataEntry->length = PAYLOAD_LENGTH; /* Length of the packet to send */
      pPacket = &currentDataEntry->data;
      
      switch (menu_config.testCase)
      {
      case FskTest:
        if(ppFrequencies[menu_config.frequency].frequency == 0x01b1)
        {
          RF_cmdPropRadioDivSetup_fsk.txPower = 0x003f;
          RF_cmdPropRadioDivSetup_fsk.loDivider = 0x0a;
        }  
        RF_cmdPropRadioDivSetup_fsk.centerFreq = ppFrequencies[menu_config.frequency].frequency;
        rfHandle = RF_open(&rfObject, &RF_prop_fsk, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_fsk, &rfParams);
        packetInterval = (uint32_t)(4000000*0.5f); /* Set packet interval to 20 ms */
        
        break;
        
      case OneMTest:
        if(ppFrequencies[menu_config.frequency].frequency == 0x01b1)
        {
          RF_cmdPropRadioDivSetup_1M.txPower = 0x003f;
          RF_cmdPropRadioDivSetup_1M.loDivider = 0x0a;
        }
        RF_cmdPropRadioDivSetup_1M.centerFreq = ppFrequencies[menu_config.frequency].frequency;  
        rfHandle = RF_open(&rfObject, &RF_prop_1M, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_1M, &rfParams);
        packetInterval = (uint32_t)(4000000*0.5f); /* Set packet interval to 10 ms */
        break;
        
      case Test500K:
        if(ppFrequencies[menu_config.frequency].frequency == 0x01b1)
        {
          RF_cmdPropRadioDivSetup_500K.txPower = 0x003f;
          RF_cmdPropRadioDivSetup_500K.loDivider = 0x0a;
        }
        RF_cmdPropRadioDivSetup_500K.centerFreq = ppFrequencies[menu_config.frequency].frequency;  
        rfHandle = RF_open(&rfObject, &RF_prop_500K, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_500K, &rfParams);
        packetInterval = (uint32_t)(4000000*0.5f); /* Set packet interval to 20 ms */
        break;
        
      default:
        
        break;
      }
    
      RF_cmdFs.frequency = ppFrequencies[menu_config.frequency].frequency;
      RF_cmdFs.fractFreq = ppFrequencies[menu_config.frequency].fractFreq;
      
      RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    
      time = RF_getCurrentTime();
      while (++packetCounter <= menu_config.packetCount)
      {
        pPacket[0] = packet[0] = (uint8_t)(seqNumber >> 8);
        pPacket[1] = packet[1] = (uint8_t)(seqNumber++);
        uint16_t i;
        for (i = 2; i < PAYLOAD_LENGTH; i++)
        {
          pPacket[i] = packet[i] = rand();
        }
        
        time += packetInterval;
        RF_cmdPropTxAdv.startTime = time;
        
        RF_EventMask result = RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTxAdv, RF_PriorityNormal, NULL, 0);
        if (result != RF_EventLastCmdDone)
        {
          while(true);
        }
        menu_update_txScreen(packetCounter);
        
        if (Event_pend(menu_event, Event_Id_NONE, KeyPressEvent, BIOS_NO_WAIT) & KeyPressEvent)
        {
          packetCounter = 0;
          seqNumber = 0;
          RF_close(rfHandle);
          return TestAborted;
        }
      }
      
      packetCounter = 0;
      seqNumber = 0;
      RF_close(rfHandle);
      return TestFinished;
    }
    1000, it worked OK!

    3.But modify PAYLOAD_LENGTH bigger than 1000, then test 1Mbps@433M communication, it failed!

    Attached is my tx & rx code, can you pls help to check if there is some problem?

    Thanks!

    rx.c
    #include <stdlib.h>
    #include <xdc/runtime/System.h>
    #include <xdc/std.h>
    
    /* Drivers */
    #include <ti/drivers/rf/RF.h>
    #include <ti/drivers/PIN.h>
    
    /* Application headers */
    #include "Board.h"
    #include "menu.h"
    #include "RFQueue.h"
    #include "smartrf_settings/smartrf_settings.h"
    
    
    /***** Defines *****/
    /* TX Configuration */
    #define DATA_ENTRY_HEADER_SIZE 8   /* Constant header size of a Generic Data Entry */
    #define MAX_LENGTH             1000//250//125 /* 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   /* RF_cmdRxHS.rxConf.bIncludeLen = 1: Include the received length
    
    /***** Prototypes *****/
    static void rx_callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e);
    
    /***** Variable declarations *****/
    static uint8_t packetReceived = false;
    static uint16_t* crcOk;
    static uint16_t* crcNOk;
    static uint8_t* RxIg;
    static uint8_t* RxStop;
    static uint8_t* RxBufFull;
    
    static int8_t* rssi;
    
    static RF_Object rfObject;
    static RF_Handle rfHandle;
    static RF_CmdHandle rxCmdHndl = NULL; /* Handle needed to abot the RX command */
    
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_ALIGN (rxDataEntryBuffer, 4);
    #elif defined(__IAR_SYSTEMS_ICC__)
    #pragma data_alignment = 4
    #else
    #error This compiler is not supported.
    #endif
    static uint8_t rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                                     MAX_LENGTH,
                                                                     NUM_APPENDED_BYTES)];
    
    static dataQueue_t dataQueue;                    /* Receive queue for the RF Code to fill in data */
    static rfc_dataEntryGeneral_t* currentDataEntry; /* General data entry structure (type = 0) */
    rfc_propRxOutput_t rxStatistics_prop;            /* Output structure for CMD_PROP_RX */
    
    TestCaseResult rx_run()
    {
      RF_Params rfParams;
      RF_Params_init(&rfParams);
      
      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);
      }
      
      RF_cmdPropRxAdv.pOutput = (uint8_t*)&rxStatistics_prop;
      RF_cmdPropRxAdv.pQueue = &dataQueue;           /* Set the Data Entity queue for received data */
      RF_cmdPropRxAdv.rxConf.bAutoFlushIgnored = 1;  /* Discard ignored packets from Rx queue */
      RF_cmdPropRxAdv.rxConf.bAutoFlushCrcErr = 1;   /* Discard packets with CRC error from Rx queue */
      RF_cmdPropRxAdv.maxPktLen = MAX_LENGTH;        /* Implement packet length filtering to avoid PROP_ERROR_RXBUF */
      RF_cmdPropRxAdv.pktConf.bRepeatOk = 1;
      RF_cmdPropRxAdv.pktConf.bRepeatNok = 1;
      
      switch (menu_config.testCase)
      {
      case FskTest:
        if(ppFrequencies[menu_config.frequency].frequency == 0x01b1)
        {
          RF_cmdPropRadioDivSetup_fsk.txPower = 0x003f;
          RF_cmdPropRadioDivSetup_fsk.loDivider = 0x0a;
        }  
        RF_cmdPropRadioDivSetup_fsk.centerFreq = ppFrequencies[menu_config.frequency].frequency;
        rfHandle = RF_open(&rfObject, &RF_prop_fsk, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_fsk, &rfParams);    
        break;
        
      case OneMTest:
        if(ppFrequencies[menu_config.frequency].frequency == 0x01b1)
        {
          RF_cmdPropRadioDivSetup_1M.txPower = 0x003f;
          RF_cmdPropRadioDivSetup_1M.loDivider = 0x0a;
        }
        RF_cmdPropRadioDivSetup_1M.centerFreq = ppFrequencies[menu_config.frequency].frequency;  
        rfHandle = RF_open(&rfObject, &RF_prop_1M, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_1M, &rfParams);
        break;
        
      case Test500K:
        if(ppFrequencies[menu_config.frequency].frequency == 0x01b1)
        {
          RF_cmdPropRadioDivSetup_500K.txPower = 0x003f;
          RF_cmdPropRadioDivSetup_500K.loDivider = 0x0a;
        }
        RF_cmdPropRadioDivSetup_500K.centerFreq = ppFrequencies[menu_config.frequency].frequency;  
        rfHandle = RF_open(&rfObject, &RF_prop_500K, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_500K, &rfParams);
        break;
        
      default:
        
        break;
      }
      
      /* Set the frequency */
      RF_cmdFs.frequency = ppFrequencies[menu_config.frequency].frequency;
      RF_cmdFs.fractFreq = ppFrequencies[menu_config.frequency].fractFreq;
      
      RF_runCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
      rxCmdHndl = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropRxAdv, RF_PriorityNormal, &rx_callback, RF_EventRxEntryDone);
      
      crcOk     = &rxStatistics_prop.nRxOk;
    //  crcNOk    = &rxStatistics_prop.nRxNok;
    //  RxIg      = &rxStatistics_prop.nRxIgnored;
    //  RxStop    = &rxStatistics_prop.nRxStopped;
    //  RxBufFull = &rxStatistics_prop.nRxBufFull;
    
      rssi = &rxStatistics_prop.lastRssi;
      
      *crcOk = 0;//*crcNOk = *RxIg = *RxStop = *RxBufFull = 0;
      *rssi = 0;
      while(true)
      {
        if(packetReceived)
        {
          packetReceived = false;
          menu_update_rxScreen(*crcOk, *rssi);
    //      menu_update_rxScreen(*crcOk, *crcNOk, *RxIg, *RxStop, *RxBufFull, *rssi);
        }
        
        if (Event_pend(menu_event, Event_Id_NONE, KeyPressEvent, BIOS_NO_WAIT) & KeyPressEvent)
        {
          RF_cancelCmd(rfHandle, rxCmdHndl, 0);
          RF_EventMask result = RF_pendCmd(rfHandle, rxCmdHndl, RF_EventRxEntryDone);
          RF_close(rfHandle);
          return TestAborted;
        }
      }
    }
    
    void rx_callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
    {
      if (e & RF_EventRxEntryDone)
      {
        currentDataEntry = RFQueue_getDataEntry();
        packetReceived = true;
        RFQueue_nextEntry();
      }
    }

  • A question on the side: Why do you want to use this large packets? In theory this should give you larger throughput but the probability for bit errors in a 4000 byte packet start to be significant meaning that you probably have to do a lot of re transmit which reduce the throughput in the end.
  • Hi TER:

    Thanks for your reply.

    "Why do you want to use this large packets?"----Because my customer's product is ESL, and the gateway will send 100KByte data to node at 1s.

    So I need to test CC1310's throughput at 1Mbps@433M.

    And as what I said,

    I tested 1Mbps@433M with PAYLOAD_LENGTH, it worked OK!

    But modify PAYLOAD_LENGTH bigger than 1000, then test 1Mbps@433M communication, it failed!

    can you pls help to check if there is some problem?

    Thanks!

  • Could you post the full CCS project you are using for your tests?
    --
    Could you provided me with more details on the application?
    - You write that the gateway will send 100 kB of data to the node. Is this 100 kB to one ESL? If it's to several ESLs I would assume that the data to each ESL are different and you need to send a different packet to each ESL?
    - As I wrote the probability for bit errors increase with large packets. How will the system handle bit errors?
  • Hi TER:

    Thanks for your reply.

    PERTest-RXAdv.rarPERTest-TXAdv.rar

    My project is build by IAR 7.8.4 with CC1310 SDK Version tirtos_cc13xx_cc26xx_2_21_00_06, the project is based on "rfPacketErrorRate".

    1.As you said, the gateway will send 100 kB of data to several nodes.

    2.My customer is just evaluating whether CC1310 is fit to their application. So I guess they might do re-transmit when bit error occurs.

    3.I will communicate with my customer about the issue that you mentioned before.

    At last, I want to know that when CC1310 1.5Mbps@433M will release? And can you tell me if  my 1Mbps@433M configuration is the official configuration or not?

    Thanks!

  • Hello Will,

    The patches needed for 1.5mbps mode on CC1310 are included in the latest SDK release and we are working on adding this mode to SDK examples. In the meanwhile, we are working on providing settings needed to implement this mode in the next week. However, this has been characterized at 915MHz and only tested for functionality at 433MHz under typical condition.

    Regards,
  • Will: Any reason you use an old version of TI-RTOS? I don't have it installed so it's not straight forward to test the code you provided. The settings SVS wrote about will also be provided for the latest SDK.
  • Hello,

    Any update on the settings/examples to implement 1.5mbps on the cc1310? Also, where in the rfpacketerrorrate is the setting for the data rate?

    Thanks
  • Hello,

    To add 1.5mbps 4FSK mode to the PER test, add the following settings to the smartrf_settings_predefined.c file in the PER project and use the HS API (same as HS mode) to transmit and receive. There are minor changes needed to add this mode on the menu and display for PER test. At 433MHz, it is recommended to program the device at 1mbps instead of 1.5mbps and reduce the deviation. The following settings have been tested at 915MHz.

    #include DeviceFamily_constructPath(rf_patches/rf_patch_mce_ghs.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_rfe_ghs.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_ghs.h)

    RF_Mode RF_prop_hs_4fsk =
    {
        .rfMode       =  RF_MODE_PROPRIETARY_SUB_1,
        .cpePatchFxn  =  &enterGhsCpePatch,
        .mcePatchFxn  =  &rf_patch_mce_ghs,
        .rfePatchFxn  =  &rf_patch_rfe_ghs,
    };

    uint32_t pOverrides_hs_4fsk[] =
    {
        // PHY: Use MCE RAM patch, RFE RAM patch 
        MCE_RFE_OVERRIDE(1, 0, 0, 1, 0, 0),
        // Rx: Set anti-aliasing filter bandwidth to Maximum
        ADI_HALFREG_OVERRIDE(0,61,0xF,0x0),
        // Synth: Set recommended RTRIM to 7
        HW_REG_OVERRIDE(0x4038,0x0037),
        // Synth: Configure fine calibration setting
        HW_REG_OVERRIDE(0x4020,0x7F00),
        // Synth: Configure fine calibration setting
        HW_REG_OVERRIDE(0x4064,0x0040),
        // Synth: Set Fref to 4 MHz
        (uint32_t)0x000684A3,
        // Synth: Configure fine calibration setting
        (uint32_t)0xC0040141,             
        (uint32_t)0x0533B107, 
        // Synth: Set loop bandwidth after lock
        (uint32_t)0xA480583,              
        (uint32_t)0x7AB80603,
        // Synth: Configure VCO LDO (in ADI1, set VCOLDOCFG=0x9F to use voltage input reference)
        ADI_REG_OVERRIDE(1,4,0x9F),
        // Synth: Configure synth LDO (in ADI1, set SLDOCTL0.COMP_CAP=1)
        ADI_HALFREG_OVERRIDE(1,7,0x4,0x4),
        // Rx: Set LNA bias current trim offset to 3
        (uint32_t)0x00038883,
        // Rx: Set RSSI offset to adjust reported RSSI
        (uint32_t)0x00FB88A3,             
        // Synth: Use 24 MHz XOSC as synth clock, enable extra PLL filtering
        (uint32_t)0x02010403,
        // Synth: Configure extra PLL filtering
        (uint32_t)0x00108463,
        // Synth: Increase synth programming timeout (0x04B0 RAT ticks = 300 us)
        (uint32_t)0x04B00243,
        //Configure thershold for Sync word detection
        HW_REG_OVERRIDE(0x5104,0x302B),
        //Set FIFO threshold
        (uint32_t) 0x002C82C3,            
        (uint32_t) 0x002882D3,
        // Rx: Do not freeze RSSI on sync found event
        HW_REG_OVERRIDE(0x6084,0x25F1),
        // ****PA Ramping overrides
        HW_REG_OVERRIDE(0x6088,0x4121),    
        HW_REG_OVERRIDE(0x608C,0x0A12), 
        // ****Length of CW tone
        HW_REG_OVERRIDE(0x52B0,0x00F0),    
        // DC estimation
        HW_REG_OVERRIDE(0x51F8,0x0F90),
        //Zero IF in TX
        (uint32_t) 0x00000343, 
        // Tx: Set PA trim to max (in ADI0, set PACTL0=0xF8)
        ADI_REG_OVERRIDE(0,12,0xF8),
        // End Override
        (uint32_t)0xFFFFFFFF,              
    };

    // CMD_PROP_RADIO_DIV_SETUP for 4FSK
    rfc_CMD_PROP_RADIO_DIV_SETUP_t RF_cmdPropRadioDivSetup_4fsk =
    {
        .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,
        .modulation.deviation = 600,
        .symbolRate.preScale = 8,
        .symbolRate.rateWord = 262144,
        .rxBw = 48,                   
        .preamConf.nPreamBytes = 0x6,
        .preamConf.preamMode = 0x1,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x0,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 9,   
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x1,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0xA73F,
        .pRegOverride = pOverrides_hs_4fsk,
        .centerFreq = 915,
        .intFreq = 0x0A66,  
        .loDivider = 0x05,
    };

    The patches are only available in the latest SDK release. Let us know if you have any issues with implementation.

    Regards,

  • Hi SVS:
    Thanks for sharing.
    I tested 1.5Mbps with 868M Module, but I cannot receive anything.
    As you said," The following settings have been tested at 915MHz", so have you test 868MHZ?
    And, you said " At 433MHz, it is recommended to program the device at 1mbps instead of 1.5mbps and reduce the deviation", Does it means 433M don't support 1.5Mbps datarate?
    Thanks!
  • Hello Will,

    There was an error in overrides on my first post which I corrected soon after. Please re-check the overrides and let me know if you still see issues.

    It should work at 868MHz as well.

    At 433MHz, under typical conditions, it is functional. However, we have not tested it across corner conditions and optimized the performance in this band.The synthesizer will be operating close to the limit at this frequency band with 450KHz deviation (used at 1.5mbps datarate). It is safer to operate at lower datarate and deviation settings at 433MHz band to avoid issues across different operating conditions.

    Regards,

  • Hi SVS:

    I didn't find your corrected code anywhere.Could you pls send it again?

    Thanks!

  • Hello Will,

    The edited settings are in my  previous post.

    Also, please find attached files that I modified from the packetErrorRate test for CC1310 in the latest SDK release to include 4FSK mode. After importing the example project from SDK, if the files in the attached folder are used to replace the files in the project, 4FSK mode should be added to the example.

    Let us know if this helps.

    Regards,

    PER_CC1310_4FSK.zip

  • Hi SVS

    I have tested 868M&915M with 1.5Mbps datarate,and it works fine.

    Thanks!