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: CC1310 Simple Link Long range mode Spurious emissions

Part Number: CC1310
Other Parts Discussed in Thread: CC1101, CC2500

Tool/software:

We implemented long range mode(5kbps, SimpleLink Long Range) firmware for our module.

We could not pass the ARIB ST-108 at 920MHz. because of spurious emissions.

When we use SmartRFStudio 2.31.0 for Continous Tx (modulated), It looks OK with same module, same RF parameters.

When we use my firmware, it fail.

When we use 100kbps, 2-GFSK, 50kHz deviation, The Tx wave form looks same between our firmware and SmartRFStudio.

When we use 5kbps, SimpleLink Long Range, The Tx wave form looks different between our firmware and SmartRFStudio.

The rf parameters (RF_cmdPropRadioDivSetup,pOverrides,RF_cmdTestTx) were copied from SmartRFStudio 2.31.0.

The rf paches were copied from simplelink_cc13x0_sdk_4_20_02_07

Are there any other parameters, We need to change?

Is there any example code that use simplelink long range mode?

  • Hi,

    Could you please share the spectrum plots from both when smartRFStudio is transmitting and when your FW is used?

  • Yellow is our FW
    Blue is SmartRFStudio
  • Hi TK,

    To move this issue forward:

    • Please share the SmartRF Studio settings (that perform as expected) - are they unchanged from the default settings?
    • Please detail how you are using the exported SmartRF Studio settings with the SDK.

    Regards,
    Zack

  • We already have FW for GFSK.
    We changed only RF settings and patches to use long range mode.
    Our FW use driverlib.lib.
    We call the following APIs for setup
    RFC_selectRadioMode
    RFC_enableRadio
    RFC_setupRadio((rfc_radioOp_t*)&RF_cmdPropRadioDivSetup);
    RFC_sendRadioOp((rfc_radioOp_t*)&RF_cmdFs);
    Then call the following API for start Tx.
    RFC_sendRadioOp_nb((rfc_radioOp_t*)&RF_cmdTxTest, NULL);

    This is the settings from SmartRF Studio.
    We changed Frequency to 920.6MHz and TX Power to 12.5dBm.
    We use these parameters.

    //*********************************************************************************
    // Generated by SmartRF Studio version 2.31.0 (build#400)
    // The applied template is compatible with CC13x0 SDK version 2.10.xx.xx or newer.
    // Device: CC1310 Rev. B (2.1).
    //
    //*********************************************************************************


    //*********************************************************************************
    // Parameter summary
    // RX Address0: 0xAA
    // RX Address1: 0xBB
    // RX Address Mode: No address check
    // Frequency: 920.60001 MHz
    // Data Format: Serial mode disable
    // Deviation: 5.000 kHz
    // Packet Length Config: Variable
    // Max Packet Length: 255
    // Packet Length: 20
    // Packet Data: 255
    // RX Filter BW: 49.0 kHz
    // Symbol Rate: 19.99969 kBaud
    // Sync Word Length: 32 Bits
    // TX Power: 12.5 dBm
    // Whitening: CC1101/CC2500 compatible

    #include "smartrf_settings.h"

    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_sl_longrange.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_rfe_sl_longrange.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_mce_sl_longrange.h)

    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
    .rfMode = RF_MODE_PROPRIETARY_SUB_1,
    .cpePatchFxn = &rf_patch_cpe_sl_longrange,
    .mcePatchFxn = &rf_patch_mce_sl_longrange,
    .rfePatchFxn = &rf_patch_rfe_sl_longrange
    };


    // Overrides for CMD_PROP_RADIO_DIV_SETUP
    uint32_t pOverrides[] =
    {
    // override_use_patch_simplelink_long_range.xml
    // PHY: Use MCE RAM patch, RFE RAM patch
    MCE_RFE_OVERRIDE(1,0,0,1,0,0),
    // override_synth_prop_863_930_div5_lbw60k.xml
    // Synth: Set recommended RTRIM to 7
    HW_REG_OVERRIDE(0x4038,0x0037),
    // Synth: Set Fref to 4 MHz
    (uint32_t)0x000684A3,
    // Synth: Configure fine calibration setting
    HW_REG_OVERRIDE(0x4020,0x7F00),
    // Synth: Configure fine calibration setting
    HW_REG_OVERRIDE(0x4064,0x0040),
    // Synth: Configure fine calibration setting
    (uint32_t)0xB1070503,
    // Synth: Configure fine calibration setting
    (uint32_t)0x05330523,
    // Synth: Set loop bandwidth after lock to 60 kHz
    (uint32_t)0x40410583,
    // Synth: Set loop bandwidth after lock to 60 kHz
    (uint32_t)0x32CC0603,
    // Synth: Set loop bandwidth after lock to 60 kHz
    (uint32_t)0x00010623,
    // 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),
    // 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,
    // override_synth_disable_bias_div5.xml
    // Synth: Set divider bias to disabled
    HW32_ARRAY_OVERRIDE(0x405C,1),
    // Synth: Set divider bias to disabled (specific for loDivider=5)
    (uint32_t)0x18000200,
    // override_phy_rx_aaf_bw_0xd.xml
    // Rx: Set anti-aliasing filter bandwidth to 0xD (in ADI0, set IFAMPCTL3[7:4]=0xD)
    ADI_HALFREG_OVERRIDE(0,61,0xF,0xD),
    // override_phy_gfsk_rx.xml
    // Rx: Set LNA bias current trim offset to 3
    (uint32_t)0x00038883,
    // Rx: Freeze RSSI on sync found event
    HW_REG_OVERRIDE(0x6084,0x35F1),
    // override_phy_gfsk_pa_ramp_agc_reflevel_0x14.xml
    // Tx: Configure PA ramping setting (0x41). Rx: Set AGC reference level to 0x14.
    HW_REG_OVERRIDE(0x6088,0x4114),
    // Tx: Configure PA ramping setting
    HW_REG_OVERRIDE(0x608C,0x8213),
    // override_phy_long_range_dsss2.xml
    // PHY: Configure DSSS SF=2
    HW_REG_OVERRIDE(0x505C,0x0100),
    // override_phy_rx_rssi_offset_5db.xml
    // Rx: Set RSSI offset to adjust reported RSSI by +5 dB (default: 0), trimmed for external bias and differential configuration
    (uint32_t)0x00FB88A3,
    (uint32_t)0xFFFFFFFF
    };


    // CMD_PROP_RADIO_DIV_SETUP
    // Proprietary Mode Radio Setup Command for All Frequency Bands
    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 = 0x14,
    .symbolRate.preScale = 0xF,
    .symbolRate.rateWord = 0x3333,
    .symbolRate.decimMode = 0x0,
    .rxBw = 0x21,
    .preamConf.nPreamBytes = 0x2,
    .preamConf.preamMode = 0x0,
    .formatConf.nSwBits = 0x20,
    .formatConf.bBitReversal = 0x0,
    .formatConf.bMsbFirst = 0x0,
    .formatConf.fecMode = 0x8,
    .formatConf.whitenMode = 0x1,
    .config.frontEndMode = 0x0,
    .config.biasMode = 0x1,
    .config.analogCfgMode = 0x0,
    .config.bNoFsPowerUp = 0x0,
    .txPower = 0xA63F,
    .pRegOverride = pOverrides,
    .centerFreq = 0x0398,
    .intFreq = 0x8000,
    .loDivider = 0x05
    };


    // 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 = 0x0398,
    .fractFreq = 0x999A,
    .synthConf.bTxMode = 0x0,
    .synthConf.refFreq = 0x0,
    .__dummy0 = 0x00,
    .__dummy1 = 0x00,
    .__dummy2 = 0x00,
    .__dummy3 = 0x0000
    };


    // CMD_TX_TEST
    // Transmitter Test Command
    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 = 0x1,
    .config.whitenMode = 0x2,
    .__dummy0 = 0x00,
    .txWord = 0xAAAA,
    .__dummy1 = 0x00,
    .endTrigger.triggerType = 0x1,
    .endTrigger.bEnaCmd = 0x0,
    .endTrigger.triggerNo = 0x0,
    .endTrigger.pastTrig = 0x0,
    .syncWord = 0x00000000,
    .endTime = 0x00000000
    };

  • Hi,

    Apologies for the delay; this has not been forgotten and we are following this up this week. I have looped in a SW colleague for their input on the FW implementation.

    Regards,

    Zack

  • Hi,

    I see that in your firmware, you are using the following txPower:

    while SmartRF Studio 7 gives out the following by default:

    This means that your firwmare is outputing at 12.5 dBm, is that expected?

    Regards,

    Arthur

  • Yes, we use 12.5dBm.

    The Tx Power of the ARIB ST-108 must be less than 13dBm at 920 MHz

  • Hi,

    We will try to reproduce what you are seeing in our lab. Expect results towards Friday.

    Regards,

    Arthur

  • Hi TK,

    In the meantime, can you also run your test using our rfCarrierWave example, with your settings?

    Regards,

    Arthur

  • Hi again,

    When using the rfCarrierWave example, and your settings from SmartRF Studio 7, there is no difference in the spectrum.

    Please use the RF driver (RF.h) and our examples for your development, and your characterization work.

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

    Regards,

    Arthur

  • Thank you for your feedback.

    We will try rfCarrierWave example and check the difference between our code.