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.

RTOS/CC1350: Overrides for CC1350 GHS radio mode

Part Number: CC1350
Other Parts Discussed in Thread: CC1310,

Tool/software: TI-RTOS

Hi,

Can I please have the overrides for using the ghs patches in the latest Simplelink SDK on the CC1350? The CC1310 ones are here e2e.ti.com/support/wireless-connectivity/sub-1-ghz/f/156/p/628551/2363574#pi319532=1 and the CC1350 ones are probably similar. We would like to use 1 Mbps mode with short packets if that makes a difference.

many thanks,

James

  • You should be able to use the exact same override list for CC1310+ and CC1350 I believe. Have you tested?

  • Hi TER,

    thanks, I did try that and it crashes on transmit with a non-null packet pointer. It seems to work without overrides but I've not tested it and suspect the performance will be poor. I was planning to try a selection of 1310 overrides, if you could give me an indication of how the chips differ I might be able to work it out.

    best,

    James
  • The overrides should be the same for CC1310 and CC1350 meaning that the error you see is most likely not related to the overrides directly.

    Could you post the part of the code where you get a crash and the definitions of the variables used in this code. In addition you state that it crash, what is the error message or similar that tells you that it has crashed?
  • Hi,

    sorry for the delay in getting back! This code should illustrate the minimum case in which it does not work as expected. In smartrf_settings.c:

    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
    .rfMode = RF_MODE_PROPRIETARY_SUB_1,
    .cpePatchFxn = &rf_patch_cpe_ghs,
    .mcePatchFxn = &rf_patch_mce_ghs,
    .rfePatchFxn = &rf_patch_rfe_ghs,
    };



    // CMD_PROP_RADIO_DIV_SETUP
    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 =
    {
    .commandNo = CMD_PROP_RADIO_DIV_SETUP,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = TRIG_NOW,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = COND_ALWAYS,
    .condition.nSkip = 0x0,
    .modulation.modType = 0x1,
    .modulation.deviation = 600,
    .symbolRate.preScale = 8,
    .symbolRate.rateWord = RATE_WORD, // 0x400000
    .rxBw = 48,
    .preamConf.nPreamBytes = NUM_PRE_BYTES, // 0x6
    .preamConf.preamMode = 0x1,
    .formatConf.nSwBits = 0x20, // 4 byte syncword
    .formatConf.bBitReversal = 0x0,
    .formatConf.bMsbFirst = 0x1,
    .formatConf.fecMode = 9,
    .formatConf.whitenMode = 0x0,
    .config.frontEndMode = 0x0,
    .config.biasMode = 0x1,
    .config.bNoFsPowerUp = 0x0, // power up synth
    .txPower = TX_POWER, // 12dB, 0xBC2B
    .pRegOverride = pOverrides_hs_4fsk,
    .centerFreq = 915,
    .intFreq = 0x0A66,
    .loDivider = 0x05,
    };



    // CMD_FS
    rfc_CMD_FS_t RF_cmdFs =
    {
    .commandNo = CMD_FS,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = TRIG_NOW,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = COND_ALWAYS,
    .condition.nSkip = 0x0,
    .frequency = FREQUENCY, // 868
    .fractFreq = FRACT_FREQ, // 0
    .synthConf.bTxMode = 0x0,
    .synthConf.refFreq = 0x0,
    .__dummy0 = 0x00,
    .__dummy1 = 0x00,
    .__dummy2 = 0x00,
    .__dummy3 = 0x0000,
    };

    uint8_t ping[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    // CMD_PROP_TX
    rfc_CMD_PROP_TX_t RF_cmdPropTx_Ping =
    {
    .commandNo = CMD_PROP_TX,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = TRIG_ABSTIME,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = COND_ALWAYS,
    .condition.nSkip = 0x0,
    .pktConf.bFsOff = 0x0,
    .pktConf.bUseCrc = 0x1,
    .pktConf.bVarLen = 0,
    .pktLen = sizeof(ping), // SET APPLICATION PAYLOAD LENGTH
    .syncWord = 0x930B51DE,
    .pPkt = ping, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    };




    and in a task:

    RF_Params rfParams;
    RF_Params_init(&rfParams);

    rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);
    RF_runCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);

    ratmr_t time;
    time = RF_getCurrentTime();


    size_t i;
    RF_EventMask ret;
    for (i = 0; i < 1000; i++) {
    RF_cmdPropTx_Ping.startTime = time + 1000000;
    ret = RF_runCmd(rfHandle, (rfc_radioOp_t*)&RF_cmdPropTx_Ping, RF_PriorityNormal, NULL, 0); // &callback, 0xFFFFFFFF);

    PIN_setOutputValue(ledPinHandle, Board_PIN_LED0, !PIN_getOutputValue(Board_PIN_LED0));


    }



    the LED doesn't come on at all, if using the callback from runCmd the value of the eventmask is 0x10000000, which isn't defined.

    It could be a very silly mistake, sometimes very similar configurations work. We are using latest TI-RTOS from an example. Many thanks!!
  • Hi,

    just realised there is an extra 0 in the rateword. That seems to fix things... Sorry!!