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.

CC1352P: EasyLink does not change frequency when using Custom PHY settings

Part Number: CC1352P
Other Parts Discussed in Thread: SYSCONFIG,

Hello,

In my EasyLink-based project, I developed my source code with a predefined PHY setting for the 2.4 GHz band (250 kbps, 125 kHz Deviation, 2-GFSK). After initializing EasyLink, I change the frequency and that always worked fine. After changing the default PHY to a custom PHY setting however, the frequency changing was not successful anymore. This is the (reduced) code I used for initializing and changing the frequency:

static macInit(macParams_t * params)
{
    // Initialize the EasyLink parameters to their default values
    EasyLink_Params easyLink_params;
    EasyLink_Params_init(&easyLink_params);
    
    /*
     * Initialize EasyLink with the settings found in ti_easylink_config.h
     * Modify EASYLINK_PARAM_CONFIG in ti_easylink_config.h to change the default
     * PHY
     */
    if(EasyLink_init(&easyLink_params) != EasyLink_Status_Success)
    {
        macCleanUp();
        return Mac_Status_Error;
    }
    
    
    if (changeGroup(params->groupId) != Mac_Status_Success)
    {
        macCleanUp();
        return Mac_Status_Error;
    }
}


static Mac_Status_t changeGroup(TtngpMacGroupId_t groupId)
{
    EasyLink_abort();

    if (EasyLink_setFrequency(TTNGPMAC_GROUPID2FREQ_HZ((int) groupId)) != EasyLink_Status_Success)
    {
        return Mac_Status_Error;
    }

    currentGroupId = groupId;

    return Mac_Status_Success;
}

With debugging, I found out that the CMF_FS command in the EasyLink_setFrequency function has the status 0x0808 after being run, which translates to ERROR_NO_FS ("Operation using Rx or Tx attempted without frequency synth configured").

EasyLink_Status EasyLink_setFrequency(uint32_t ui32Frequency)
{
    EasyLink_Status status = EasyLink_Status_Cmd_Error;
    uint16_t centerFreq, fractFreq;

    if ( (!configured) || suspended)
    {
        return EasyLink_Status_Config_Error;
    }
    
    .
    .
    .
    
    RF_EventMask result;
    if (rfModeMultiClient)
    {
        /* Run command */
        result = RF_runScheduleCmd(rfHandle, (RF_Op*)&EasyLink_cmdFs,
                &schParams_prop, 0, EASYLINK_RF_EVENT_MASK);
    }
    else
    {
        /* Run command */
        result = RF_runCmd(rfHandle, (RF_Op*)&EasyLink_cmdFs,
                RF_PriorityNormal, 0, EASYLINK_RF_EVENT_MASK);
    }

    if((result & RF_EventLastCmdDone) && (EasyLink_cmdFs.status == DONE_OK))
    {
        status = EasyLink_Status_Success;
    }

    Semaphore_post(busyMutex);

    return status;
}

I also could not find any suspicious different behaviour in the EasyLink_init function between the custom and the pre-defined PHY setting I used. I am using the SimpleLink CC13xx CC26xx version 6.10.0.29 and sysConfig 1.12.0. The hardware is a CC1352P-2 board.

Any hints on this error would be appreciated.

Regards,

Alex

  • Hey Alexander,

    Is it possible for you to share your ti_radio_config.h/.c files as well as the EasyLink config files?

    Regards,

    Arthur

  • Sure, here they are

    /*
     *  ======== ti_easylink_config.c ========
     *  Configured EasyLink module definitions
     *
     *  DO NOT EDIT - This file is generated for the CC1352P_2_LAUNCHXL
     *  by the SysConfig tool.
     */
    
    /***** Includes *****/
    #include "easylink/EasyLink.h"
    #include <stdint.h>
    
    /* TI Drivers */
    #include <ti/drivers/rf/RF.h>
    
    /* Radio Config */
    #include <ti_radio_config.h>
    
    EasyLink_RfSetting EasyLink_supportedPhys[] = {
        {
            .EasyLink_phyType = EasyLink_Phy_Custom,
            .RF_pProp = &RF_prop,
            .RF_uCmdPropRadio.RF_pCmdPropRadioDivSetup = &RF_cmdPropRadioDivSetup,
            .RF_pCmdFs = &RF_cmdFs,
            .RF_pCmdPropTx = &RF_cmdPropTx,
            .RF_pCmdPropTxAdv = NULL,
            .RF_pCmdPropRxAdv = &RF_cmdPropRxAdv,
            .RF_pTxPowerTable = txPowerTable,
            .RF_txPowerTableSize = TX_POWER_TABLE_SIZE,
        },
        {
            .EasyLink_phyType = EasyLink_Phy_2_4_250kbps2gfsk,
            .RF_pProp = &RF_prop_2_4G_fsk_250kbps,
            .RF_uCmdPropRadio.RF_pCmdPropRadioDivSetup = &RF_cmdPropRadioDivSetup_2_4G_fsk_250kbps,
            .RF_pCmdFs = &RF_cmdFs_2_4G_fsk_250kbps,
            .RF_pCmdPropTx = &RF_cmdPropTx_2_4G_fsk_250kbps,
            .RF_pCmdPropTxAdv = NULL,
            .RF_pCmdPropRxAdv = &RF_cmdPropRxAdv_2_4G_fsk_250kbps,
            .RF_pTxPowerTable = RF_PROP_txPowerTable_2_4G_fsk_250kbps,
            .RF_txPowerTableSize = RF_PROP_TX_POWER_TABLE_SIZE_2_4G_fsk_250kbps,
        },
    };
    
    const uint8_t EasyLink_numSupportedPhys = sizeof(EasyLink_supportedPhys)/sizeof(EasyLink_RfSetting);
    
    ti_easylink_config.h
    /*
     *  ======== ti_radio_config.c ========
     *  Configured RadioConfig module definitions
     *
     *  DO NOT EDIT - This file is generated for the CC1352P1F3RGZ
     *  by the SysConfig tool.
     *
     *  Radio Config module version : 1.13
     *  SmartRF Studio data version : 2.25.0
     */
    
    #include "ti_radio_config.h"
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_multi_protocol.h)
    
    
    // *********************************************************************************
    //   RF Frontend configuration
    // *********************************************************************************
    // RF design based on: LAUNCHXL-CC1352P-2 (LAUNCHXL-CC1352P2_20dBm)
    
    // TX Power tables
    // The RF_TxPowerTable_DEFAULT_PA_ENTRY and RF_TxPowerTable_HIGH_PA_ENTRY macros are defined in RF.h.
    // The following arguments are required:
    // RF_TxPowerTable_DEFAULT_PA_ENTRY(bias, gain, boost, coefficient)
    // RF_TxPowerTable_HIGH_PA_ENTRY(bias, ibboost, boost, coefficient, ldoTrim)
    // See the Technical Reference Manual for further details about the "txPower" Command field.
    // The PA settings require the CCFG_FORCE_VDDR_HH = 0 unless stated otherwise.
    
    // 868 MHz, 13 dBm
    RF_TxPowerTable_Entry txPowerTable_868_pa13[TXPOWERTABLE_868_PA13_SIZE] =
    {
        {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(0, 3, 0, 2) }, // 0x04C0
        {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(1, 3, 0, 3) }, // 0x06C1
        {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(2, 3, 0, 5) }, // 0x0AC2
        {-7, RF_TxPowerTable_DEFAULT_PA_ENTRY(3, 3, 0, 5) }, // 0x0AC3
        {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(4, 3, 0, 5) }, // 0x0AC4
        {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(5, 3, 0, 6) }, // 0x0CC5
        {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 8) }, // 0x10C8
        {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(9, 3, 0, 9) }, // 0x12C9
        {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 9) }, // 0x12CA
        {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(11, 3, 0, 10) }, // 0x14CB
        {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(13, 3, 0, 11) }, // 0x16CD
        {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(14, 3, 0, 14) }, // 0x1CCE
        {6, RF_TxPowerTable_DEFAULT_PA_ENTRY(17, 3, 0, 16) }, // 0x20D1
        {7, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 19) }, // 0x26D4
        {8, RF_TxPowerTable_DEFAULT_PA_ENTRY(24, 3, 0, 22) }, // 0x2CD8
        {9, RF_TxPowerTable_DEFAULT_PA_ENTRY(28, 3, 0, 31) }, // 0x3EDC
        {10, RF_TxPowerTable_DEFAULT_PA_ENTRY(18, 2, 0, 31) }, // 0x3E92
        {11, RF_TxPowerTable_DEFAULT_PA_ENTRY(26, 2, 0, 51) }, // 0x669A
        {12, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 0, 0, 82) }, // 0xA410
        // The original PA value (12.5 dBm) has been rounded to an integer value.
        {13, RF_TxPowerTable_DEFAULT_PA_ENTRY(36, 0, 0, 89) }, // 0xB224
        // This setting requires CCFG_FORCE_VDDR_HH = 1.
        {14, RF_TxPowerTable_DEFAULT_PA_ENTRY(63, 0, 1, 0) }, // 0x013F
        RF_TxPowerTable_TERMINATION_ENTRY
    };
    
    
    // 2400 MHz, 5 dBm
    RF_TxPowerTable_Entry txPowerTable_2400_pa5[TXPOWERTABLE_2400_PA5_SIZE] =
    {
        {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(6, 3, 0, 2) }, // 0x04C6
        {-18, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 3) }, // 0x06C8
        {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 3) }, // 0x06CA
        {-12, RF_TxPowerTable_DEFAULT_PA_ENTRY(12, 3, 0, 5) }, // 0x0ACC
        {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(15, 3, 0, 5) }, // 0x0ACF
        {-9, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 3, 0, 5) }, // 0x0AD0
        {-6, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 8) }, // 0x10D4
        {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 3, 0, 9) }, // 0x12D6
        {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 2, 0, 12) }, // 0x1893
        {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 1, 0, 20) }, // 0x2853
        {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 1, 0, 20) }, // 0x2856
        {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(25, 1, 0, 25) }, // 0x3259
        {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(29, 1, 0, 28) }, // 0x385D
        {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(35, 1, 0, 39) }, // 0x4E63
        {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(23, 0, 0, 57) }, // 0x7217
        RF_TxPowerTable_TERMINATION_ENTRY
    };
    
    // 2400 MHz, 5 + 20 dBm
    RF_TxPowerTable_Entry txPowerTable_2400_pa5_20[TXPOWERTABLE_2400_PA5_20_SIZE] =
    {
        {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(6, 3, 0, 2) }, // 0x04C6
        {-18, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 3) }, // 0x06C8
        {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 3) }, // 0x06CA
        {-12, RF_TxPowerTable_DEFAULT_PA_ENTRY(12, 3, 0, 5) }, // 0x0ACC
        {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(15, 3, 0, 5) }, // 0x0ACF
        {-9, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 3, 0, 5) }, // 0x0AD0
        {-6, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 8) }, // 0x10D4
        {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 3, 0, 9) }, // 0x12D6
        {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 2, 0, 12) }, // 0x1893
        {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 1, 0, 20) }, // 0x2853
        {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 1, 0, 20) }, // 0x2856
        {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(25, 1, 0, 25) }, // 0x3259
        {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(29, 1, 0, 28) }, // 0x385D
        {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(35, 1, 0, 39) }, // 0x4E63
        {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(23, 0, 0, 57) }, // 0x7217
        {14, RF_TxPowerTable_HIGH_PA_ENTRY(22, 3, 1, 19, 27) }, // 0x1B27D6
        {15, RF_TxPowerTable_HIGH_PA_ENTRY(26, 3, 1, 23, 27) }, // 0x1B2FDA
        {16, RF_TxPowerTable_HIGH_PA_ENTRY(30, 3, 1, 28, 27) }, // 0x1B39DE
        {17, RF_TxPowerTable_HIGH_PA_ENTRY(37, 3, 1, 39, 27) }, // 0x1B4FE5
        {18, RF_TxPowerTable_HIGH_PA_ENTRY(32, 3, 1, 35, 48) }, // 0x3047E0
        {19, RF_TxPowerTable_HIGH_PA_ENTRY(34, 3, 1, 48, 63) }, // 0x3F61E2
        {20, RF_TxPowerTable_HIGH_PA_ENTRY(53, 3, 1, 58, 63) }, // 0x3F75F5
        RF_TxPowerTable_TERMINATION_ENTRY
    };
    
    
    
    //*********************************************************************************
    //  RF Setting:   Custom (100 kbps, 50 kHz Deviation, 2-GFSK, 311 kHz RX Bandwidth)
    //
    //  PHY:          custom2400
    //  Setting file: setting_tc900_custom.json
    //*********************************************************************************
    
    // PARAMETER SUMMARY
    // RX Address0: 0xAA
    // RX Address1: 0xBB
    // RX Address Mode: No address check
    // Frequency (MHz): 2440.0000
    // Deviation (kHz): 250.0
    // Fixed Packet Length: 20
    // Packet Length Config: Variable
    // Max Packet Length: 255
    // Preamble Count: 4 Bytes
    // Preamble Mode: Send 0 as the first preamble bit
    // RX Filter BW (kHz): 2185.1
    // Symbol Rate (kBaud): 250.000
    // Sync Word: 0x930B51DE
    // Sync Word Length: 32 Bits
    // TX Power (dBm): 5
    // TX Power (dBm): 13
    // TX Power (dBm): 20
    // Whitening: No whitening
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
        .rfMode = RF_MODE_PROPRIETARY_2_4,
        .cpePatchFxn = &rf_patch_cpe_multi_protocol,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0
    };
    
    // Overrides for CMD_PROP_RADIO_DIV_SETUP_PA
    uint32_t pOverrides[] =
    {
        // override_tc900.json
        // DC/DC regulator: In Tx, use DCDCCTL5[3:0]=0x3 (DITHER_EN=0 and IPEAK=3).
        (uint32_t)0x00F388D3,
        // Tx: Configure PA ramp time, PACTL2.RC=0x2 (in ADI0, set PACTL2[4:3]=0x2)
        ADI_2HALFREG_OVERRIDE(0,16,0x8,0x0,17,0x1,0x1),
        // Rx: Set AGC reference level to 0x20 (default: 0x2E)
        HW_REG_OVERRIDE(0x609C,0x0020),
        // Rx: Set anti-aliasing filter bandwidth to 0x9 (in ADI0, set IFAMPCTL3[7:4]=0x9)
        ADI_HALFREG_OVERRIDE(0,61,0xF,0x9),
        (uint32_t)0xFFFFFFFF
    };
    
    
    
    // CMD_PROP_RADIO_DIV_SETUP_PA
    // Proprietary Mode Radio Setup Command for All Frequency Bands
    rfc_CMD_PROP_RADIO_DIV_SETUP_PA_t RF_cmdPropRadioDivSetup =
    {
        .commandNo = 0x3807,
        .status = 0x0000,
        .pNextOp = 0,
        .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,
        .modulation.deviationStepSz = 0x0,
        .symbolRate.preScale = 0xF,
        .symbolRate.rateWord = 0x28000,
        .symbolRate.decimMode = 0x0,
        .rxBw = 0x64,
        .preamConf.nPreamBytes = 0x4,
        .preamConf.preamMode = 0x0,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x0,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 0x0,
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x1,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .config.bSynthNarrowBand = 0x0,
        .txPower = 0xFFFF,
        .pRegOverride = pOverrides,
        .centerFreq = 0x0988,
        .intFreq = 0x0800,
        .loDivider = 0x00,
        .pRegOverrideTxStd = 0,
        .pRegOverrideTx20 = 0
    };
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFs =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0,
        .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_PROP_TX
    // Proprietary Mode Transmit Command
    rfc_CMD_PROP_TX_t RF_cmdPropTx =
    {
        .commandNo = 0x3801,
        .status = 0x0000,
        .pNextOp = 0,
        .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 = 0x14,
        .syncWord = 0x930B51DE,
        .pPkt = 0
    };
    
    // CMD_PROP_RX_ADV
    // Proprietary Mode Advanced Receive Command
    rfc_CMD_PROP_RX_ADV_t RF_cmdPropRxAdv =
    {
        .commandNo = 0x3804,
        .status = 0x0000,
        .pNextOp = 0,
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x0,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bRepeatOk = 0x0,
        .pktConf.bRepeatNok = 0x0,
        .pktConf.bUseCrc = 0x0,
        .pktConf.bCrcIncSw = 0x0,
        .pktConf.bCrcIncHdr = 0x0,
        .pktConf.endType = 0x0,
        .pktConf.filterOp = 0x0,
        .rxConf.bAutoFlushIgnored = 0x0,
        .rxConf.bAutoFlushCrcErr = 0x0,
        .rxConf.bIncludeHdr = 0x0,
        .rxConf.bIncludeCrc = 0x0,
        .rxConf.bAppendRssi = 0x0,
        .rxConf.bAppendTimestamp = 0x0,
        .rxConf.bAppendStatus = 0x0,
        .syncWord0 = 0x930B51DE,
        .syncWord1 = 0x00000000,
        .maxPktLen = 0x00FF,
        .hdrConf.numHdrBits = 0x0,
        .hdrConf.lenPos = 0x0,
        .hdrConf.numLenBits = 0x0,
        .addrConf.addrType = 0x0,
        .addrConf.addrSize = 0x0,
        .addrConf.addrPos = 0x0,
        .addrConf.numAddr = 0x0,
        .lenOffset = 0x00,
        .endTrigger.triggerType = 0x0,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000,
        .pAddr = 0,
        .pQueue = 0,
        .pOutput = 0
    };
    
    
    //*********************************************************************************
    //  RF Setting:   250 kpbs, 125 kHz Deviation, 2-GFSK, 471 kHz RX Bandwidth
    //
    //  PHY:          2gfsk250kbps
    //  Setting file: setting_tc901.json
    //*********************************************************************************
    
    // PARAMETER SUMMARY
    // RX Address0: 0xAA
    // RX Address1: 0xBB
    // RX Address Mode: No address check
    // Frequency (MHz): 2440.0000
    // Deviation (kHz): 125.0
    // Fixed Packet Length: 20
    // Packet Length Config: Variable
    // Max Packet Length: 255
    // Preamble Count: 4 Bytes
    // Preamble Mode: Send 0 as the first preamble bit
    // RX Filter BW (kHz): 470.9
    // Symbol Rate (kBaud): 250.000
    // Sync Word: 0x930B51DE
    // Sync Word Length: 32 Bits
    // TX Power (dBm): 5
    // TX Power (dBm): 13
    // Whitening: No whitening
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop_2_4G_fsk_250kbps =
    {
        .rfMode = RF_MODE_PROPRIETARY_2_4,
        .cpePatchFxn = &rf_patch_cpe_multi_protocol,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0
    };
    
    // Overrides for CMD_PROP_RADIO_DIV_SETUP_PA
    uint32_t pOverrides_2_4G_fsk_250kbps[] =
    {
        // override_tc901.json
        // DC/DC regulator: In Tx, use DCDCCTL5[3:0]=0x3 (DITHER_EN=0 and IPEAK=3).
        (uint32_t)0x00F388D3,
        // Tx: Configure PA ramp time, PACTL2.RC=0x1 (in ADI0, set PACTL2[4:3]=0x1)
        ADI_2HALFREG_OVERRIDE(0,16,0x8,0x8,17,0x1,0x0),
        // Rx: Set AGC reference level to 0x22 (default: 0x2E)
        HW_REG_OVERRIDE(0x609C,0x0022),
        // Rx: Set anti-aliasing filter bandwidth to 0x5 (in ADI0, set IFAMPCTL3[7:4]=0x5)
        ADI_HALFREG_OVERRIDE(0,61,0xF,0x5),
        (uint32_t)0xFFFFFFFF
    };
    
    
    
    // CMD_PROP_RADIO_DIV_SETUP_PA
    // Proprietary Mode Radio Setup Command for All Frequency Bands
    rfc_CMD_PROP_RADIO_DIV_SETUP_PA_t RF_cmdPropRadioDivSetup_2_4G_fsk_250kbps =
    {
        .commandNo = 0x3807,
        .status = 0x0000,
        .pNextOp = 0,
        .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 = 0x1F4,
        .modulation.deviationStepSz = 0x0,
        .symbolRate.preScale = 0xF,
        .symbolRate.rateWord = 0x28000,
        .symbolRate.decimMode = 0x0,
        .rxBw = 0x5B,
        .preamConf.nPreamBytes = 0x4,
        .preamConf.preamMode = 0x0,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x0,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 0x0,
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x1,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .config.bSynthNarrowBand = 0x0,
        .txPower = 0x7217,
        .pRegOverride = pOverrides_2_4G_fsk_250kbps,
        .centerFreq = 0x0988,
        .intFreq = 0x0800,
        .loDivider = 0x00,
        .pRegOverrideTxStd = 0,
        .pRegOverrideTx20 = 0
    };
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFs_2_4G_fsk_250kbps =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0,
        .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_PROP_TX
    // Proprietary Mode Transmit Command
    rfc_CMD_PROP_TX_t RF_cmdPropTx_2_4G_fsk_250kbps =
    {
        .commandNo = 0x3801,
        .status = 0x0000,
        .pNextOp = 0,
        .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 = 0x14,
        .syncWord = 0x930B51DE,
        .pPkt = 0
    };
    
    // CMD_PROP_RX_ADV
    // Proprietary Mode Advanced Receive Command
    rfc_CMD_PROP_RX_ADV_t RF_cmdPropRxAdv_2_4G_fsk_250kbps =
    {
        .commandNo = 0x3804,
        .status = 0x0000,
        .pNextOp = 0,
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x0,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bRepeatOk = 0x0,
        .pktConf.bRepeatNok = 0x0,
        .pktConf.bUseCrc = 0x0,
        .pktConf.bCrcIncSw = 0x0,
        .pktConf.bCrcIncHdr = 0x0,
        .pktConf.endType = 0x0,
        .pktConf.filterOp = 0x0,
        .rxConf.bAutoFlushIgnored = 0x0,
        .rxConf.bAutoFlushCrcErr = 0x0,
        .rxConf.bIncludeHdr = 0x0,
        .rxConf.bIncludeCrc = 0x0,
        .rxConf.bAppendRssi = 0x0,
        .rxConf.bAppendTimestamp = 0x0,
        .rxConf.bAppendStatus = 0x0,
        .syncWord0 = 0x930B51DE,
        .syncWord1 = 0x00000000,
        .maxPktLen = 0x00FF,
        .hdrConf.numHdrBits = 0x0,
        .hdrConf.lenPos = 0x0,
        .hdrConf.numLenBits = 0x0,
        .addrConf.addrType = 0x0,
        .addrConf.addrSize = 0x0,
        .addrConf.addrPos = 0x0,
        .addrConf.numAddr = 0x0,
        .lenOffset = 0x00,
        .endTrigger.triggerType = 0x0,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000,
        .pAddr = 0,
        .pQueue = 0,
        .pOutput = 0
    };
    
    
    
    7633.ti_radio_config.h

    Let me know if you need more information.

    Regards,

    Alex

  • Hi Alex,

    In ti_easylink_config.h, I see that EASYLINK_PARAM_CONFIG is still set to "EasyLink_Phy_2_4_250kbps2gfsk", thoses do not seem to be your newest settings, unless they have the same name.

    Also, could we have the .c files as well?

    Regards,

    Arthur

  • Hi Arthur,

    thank you for your reply. It seems I forgot to change the setting before posting them (since I continue my work on the pre-defined radio setting until we figure out the error).

    /*
     *  ======== ti_easylink_config.c ========
     *  Configured EasyLink module definitions
     *
     *  DO NOT EDIT - This file is generated for the CC1352P_2_LAUNCHXL
     *  by the SysConfig tool.
     */
    
    /***** Includes *****/
    #include "easylink/EasyLink.h"
    #include <stdint.h>
    
    /* TI Drivers */
    #include <ti/drivers/rf/RF.h>
    
    /* Radio Config */
    #include <ti_radio_config.h>
    
    EasyLink_RfSetting EasyLink_supportedPhys[] = {
        {
            .EasyLink_phyType = EasyLink_Phy_Custom,
            .RF_pProp = &RF_prop,
            .RF_uCmdPropRadio.RF_pCmdPropRadioDivSetup = &RF_cmdPropRadioDivSetup,
            .RF_pCmdFs = &RF_cmdFs,
            .RF_pCmdPropTx = &RF_cmdPropTx,
            .RF_pCmdPropTxAdv = NULL,
            .RF_pCmdPropRxAdv = &RF_cmdPropRxAdv,
            .RF_pTxPowerTable = txPowerTable,
            .RF_txPowerTableSize = TX_POWER_TABLE_SIZE,
        },
        {
            .EasyLink_phyType = EasyLink_Phy_2_4_250kbps2gfsk,
            .RF_pProp = &RF_prop_2_4G_fsk_250kbps,
            .RF_uCmdPropRadio.RF_pCmdPropRadioDivSetup = &RF_cmdPropRadioDivSetup_2_4G_fsk_250kbps,
            .RF_pCmdFs = &RF_cmdFs_2_4G_fsk_250kbps,
            .RF_pCmdPropTx = &RF_cmdPropTx_2_4G_fsk_250kbps,
            .RF_pCmdPropTxAdv = NULL,
            .RF_pCmdPropRxAdv = &RF_cmdPropRxAdv_2_4G_fsk_250kbps,
            .RF_pTxPowerTable = RF_PROP_txPowerTable_2_4G_fsk_250kbps,
            .RF_txPowerTableSize = RF_PROP_TX_POWER_TABLE_SIZE_2_4G_fsk_250kbps,
        },
    };
    
    const uint8_t EasyLink_numSupportedPhys = sizeof(EasyLink_supportedPhys)/sizeof(EasyLink_RfSetting);
    
    5807.ti_easylink_config.h

    /*
     *  ======== ti_radio_config.c ========
     *  Configured RadioConfig module definitions
     *
     *  DO NOT EDIT - This file is generated for the CC1352P1F3RGZ
     *  by the SysConfig tool.
     *
     *  Radio Config module version : 1.13
     *  SmartRF Studio data version : 2.25.0
     */
    
    #include "ti_radio_config.h"
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_multi_protocol.h)
    
    
    // *********************************************************************************
    //   RF Frontend configuration
    // *********************************************************************************
    // RF design based on: LAUNCHXL-CC1352P-2 (LAUNCHXL-CC1352P2_20dBm)
    
    // TX Power tables
    // The RF_TxPowerTable_DEFAULT_PA_ENTRY and RF_TxPowerTable_HIGH_PA_ENTRY macros are defined in RF.h.
    // The following arguments are required:
    // RF_TxPowerTable_DEFAULT_PA_ENTRY(bias, gain, boost, coefficient)
    // RF_TxPowerTable_HIGH_PA_ENTRY(bias, ibboost, boost, coefficient, ldoTrim)
    // See the Technical Reference Manual for further details about the "txPower" Command field.
    // The PA settings require the CCFG_FORCE_VDDR_HH = 0 unless stated otherwise.
    
    // 868 MHz, 13 dBm
    RF_TxPowerTable_Entry txPowerTable_868_pa13[TXPOWERTABLE_868_PA13_SIZE] =
    {
        {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(0, 3, 0, 2) }, // 0x04C0
        {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(1, 3, 0, 3) }, // 0x06C1
        {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(2, 3, 0, 5) }, // 0x0AC2
        {-7, RF_TxPowerTable_DEFAULT_PA_ENTRY(3, 3, 0, 5) }, // 0x0AC3
        {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(4, 3, 0, 5) }, // 0x0AC4
        {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(5, 3, 0, 6) }, // 0x0CC5
        {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 8) }, // 0x10C8
        {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(9, 3, 0, 9) }, // 0x12C9
        {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 9) }, // 0x12CA
        {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(11, 3, 0, 10) }, // 0x14CB
        {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(13, 3, 0, 11) }, // 0x16CD
        {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(14, 3, 0, 14) }, // 0x1CCE
        {6, RF_TxPowerTable_DEFAULT_PA_ENTRY(17, 3, 0, 16) }, // 0x20D1
        {7, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 19) }, // 0x26D4
        {8, RF_TxPowerTable_DEFAULT_PA_ENTRY(24, 3, 0, 22) }, // 0x2CD8
        {9, RF_TxPowerTable_DEFAULT_PA_ENTRY(28, 3, 0, 31) }, // 0x3EDC
        {10, RF_TxPowerTable_DEFAULT_PA_ENTRY(18, 2, 0, 31) }, // 0x3E92
        {11, RF_TxPowerTable_DEFAULT_PA_ENTRY(26, 2, 0, 51) }, // 0x669A
        {12, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 0, 0, 82) }, // 0xA410
        // The original PA value (12.5 dBm) has been rounded to an integer value.
        {13, RF_TxPowerTable_DEFAULT_PA_ENTRY(36, 0, 0, 89) }, // 0xB224
        // This setting requires CCFG_FORCE_VDDR_HH = 1.
        {14, RF_TxPowerTable_DEFAULT_PA_ENTRY(63, 0, 1, 0) }, // 0x013F
        RF_TxPowerTable_TERMINATION_ENTRY
    };
    
    
    // 2400 MHz, 5 dBm
    RF_TxPowerTable_Entry txPowerTable_2400_pa5[TXPOWERTABLE_2400_PA5_SIZE] =
    {
        {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(6, 3, 0, 2) }, // 0x04C6
        {-18, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 3) }, // 0x06C8
        {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 3) }, // 0x06CA
        {-12, RF_TxPowerTable_DEFAULT_PA_ENTRY(12, 3, 0, 5) }, // 0x0ACC
        {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(15, 3, 0, 5) }, // 0x0ACF
        {-9, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 3, 0, 5) }, // 0x0AD0
        {-6, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 8) }, // 0x10D4
        {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 3, 0, 9) }, // 0x12D6
        {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 2, 0, 12) }, // 0x1893
        {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 1, 0, 20) }, // 0x2853
        {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 1, 0, 20) }, // 0x2856
        {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(25, 1, 0, 25) }, // 0x3259
        {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(29, 1, 0, 28) }, // 0x385D
        {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(35, 1, 0, 39) }, // 0x4E63
        {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(23, 0, 0, 57) }, // 0x7217
        RF_TxPowerTable_TERMINATION_ENTRY
    };
    
    // 2400 MHz, 5 + 20 dBm
    RF_TxPowerTable_Entry txPowerTable_2400_pa5_20[TXPOWERTABLE_2400_PA5_20_SIZE] =
    {
        {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(6, 3, 0, 2) }, // 0x04C6
        {-18, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 3) }, // 0x06C8
        {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 3) }, // 0x06CA
        {-12, RF_TxPowerTable_DEFAULT_PA_ENTRY(12, 3, 0, 5) }, // 0x0ACC
        {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(15, 3, 0, 5) }, // 0x0ACF
        {-9, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 3, 0, 5) }, // 0x0AD0
        {-6, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 8) }, // 0x10D4
        {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 3, 0, 9) }, // 0x12D6
        {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 2, 0, 12) }, // 0x1893
        {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 1, 0, 20) }, // 0x2853
        {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 1, 0, 20) }, // 0x2856
        {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(25, 1, 0, 25) }, // 0x3259
        {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(29, 1, 0, 28) }, // 0x385D
        {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(35, 1, 0, 39) }, // 0x4E63
        {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(23, 0, 0, 57) }, // 0x7217
        {14, RF_TxPowerTable_HIGH_PA_ENTRY(22, 3, 1, 19, 27) }, // 0x1B27D6
        {15, RF_TxPowerTable_HIGH_PA_ENTRY(26, 3, 1, 23, 27) }, // 0x1B2FDA
        {16, RF_TxPowerTable_HIGH_PA_ENTRY(30, 3, 1, 28, 27) }, // 0x1B39DE
        {17, RF_TxPowerTable_HIGH_PA_ENTRY(37, 3, 1, 39, 27) }, // 0x1B4FE5
        {18, RF_TxPowerTable_HIGH_PA_ENTRY(32, 3, 1, 35, 48) }, // 0x3047E0
        {19, RF_TxPowerTable_HIGH_PA_ENTRY(34, 3, 1, 48, 63) }, // 0x3F61E2
        {20, RF_TxPowerTable_HIGH_PA_ENTRY(53, 3, 1, 58, 63) }, // 0x3F75F5
        RF_TxPowerTable_TERMINATION_ENTRY
    };
    
    
    
    //*********************************************************************************
    //  RF Setting:   Custom (100 kbps, 50 kHz Deviation, 2-GFSK, 311 kHz RX Bandwidth)
    //
    //  PHY:          custom2400
    //  Setting file: setting_tc900_custom.json
    //*********************************************************************************
    
    // PARAMETER SUMMARY
    // RX Address0: 0xAA
    // RX Address1: 0xBB
    // RX Address Mode: No address check
    // Frequency (MHz): 2440.0000
    // Deviation (kHz): 250.0
    // Fixed Packet Length: 20
    // Packet Length Config: Variable
    // Max Packet Length: 255
    // Preamble Count: 4 Bytes
    // Preamble Mode: Send 0 as the first preamble bit
    // RX Filter BW (kHz): 2185.1
    // Symbol Rate (kBaud): 250.000
    // Sync Word: 0x930B51DE
    // Sync Word Length: 32 Bits
    // TX Power (dBm): 5
    // TX Power (dBm): 13
    // TX Power (dBm): 20
    // Whitening: No whitening
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
        .rfMode = RF_MODE_PROPRIETARY_2_4,
        .cpePatchFxn = &rf_patch_cpe_multi_protocol,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0
    };
    
    // Overrides for CMD_PROP_RADIO_DIV_SETUP_PA
    uint32_t pOverrides[] =
    {
        // override_tc900.json
        // DC/DC regulator: In Tx, use DCDCCTL5[3:0]=0x3 (DITHER_EN=0 and IPEAK=3).
        (uint32_t)0x00F388D3,
        // Tx: Configure PA ramp time, PACTL2.RC=0x2 (in ADI0, set PACTL2[4:3]=0x2)
        ADI_2HALFREG_OVERRIDE(0,16,0x8,0x0,17,0x1,0x1),
        // Rx: Set AGC reference level to 0x20 (default: 0x2E)
        HW_REG_OVERRIDE(0x609C,0x0020),
        // Rx: Set anti-aliasing filter bandwidth to 0x9 (in ADI0, set IFAMPCTL3[7:4]=0x9)
        ADI_HALFREG_OVERRIDE(0,61,0xF,0x9),
        (uint32_t)0xFFFFFFFF
    };
    
    
    
    // CMD_PROP_RADIO_DIV_SETUP_PA
    // Proprietary Mode Radio Setup Command for All Frequency Bands
    rfc_CMD_PROP_RADIO_DIV_SETUP_PA_t RF_cmdPropRadioDivSetup =
    {
        .commandNo = 0x3807,
        .status = 0x0000,
        .pNextOp = 0,
        .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,
        .modulation.deviationStepSz = 0x0,
        .symbolRate.preScale = 0xF,
        .symbolRate.rateWord = 0x28000,
        .symbolRate.decimMode = 0x0,
        .rxBw = 0x64,
        .preamConf.nPreamBytes = 0x4,
        .preamConf.preamMode = 0x0,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x0,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 0x0,
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x1,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .config.bSynthNarrowBand = 0x0,
        .txPower = 0xFFFF,
        .pRegOverride = pOverrides,
        .centerFreq = 0x0988,
        .intFreq = 0x0800,
        .loDivider = 0x00,
        .pRegOverrideTxStd = 0,
        .pRegOverrideTx20 = 0
    };
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFs =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0,
        .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_PROP_TX
    // Proprietary Mode Transmit Command
    rfc_CMD_PROP_TX_t RF_cmdPropTx =
    {
        .commandNo = 0x3801,
        .status = 0x0000,
        .pNextOp = 0,
        .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 = 0x14,
        .syncWord = 0x930B51DE,
        .pPkt = 0
    };
    
    // CMD_PROP_RX_ADV
    // Proprietary Mode Advanced Receive Command
    rfc_CMD_PROP_RX_ADV_t RF_cmdPropRxAdv =
    {
        .commandNo = 0x3804,
        .status = 0x0000,
        .pNextOp = 0,
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x0,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bRepeatOk = 0x0,
        .pktConf.bRepeatNok = 0x0,
        .pktConf.bUseCrc = 0x0,
        .pktConf.bCrcIncSw = 0x0,
        .pktConf.bCrcIncHdr = 0x0,
        .pktConf.endType = 0x0,
        .pktConf.filterOp = 0x0,
        .rxConf.bAutoFlushIgnored = 0x0,
        .rxConf.bAutoFlushCrcErr = 0x0,
        .rxConf.bIncludeHdr = 0x0,
        .rxConf.bIncludeCrc = 0x0,
        .rxConf.bAppendRssi = 0x0,
        .rxConf.bAppendTimestamp = 0x0,
        .rxConf.bAppendStatus = 0x0,
        .syncWord0 = 0x930B51DE,
        .syncWord1 = 0x00000000,
        .maxPktLen = 0x00FF,
        .hdrConf.numHdrBits = 0x0,
        .hdrConf.lenPos = 0x0,
        .hdrConf.numLenBits = 0x0,
        .addrConf.addrType = 0x0,
        .addrConf.addrSize = 0x0,
        .addrConf.addrPos = 0x0,
        .addrConf.numAddr = 0x0,
        .lenOffset = 0x00,
        .endTrigger.triggerType = 0x0,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000,
        .pAddr = 0,
        .pQueue = 0,
        .pOutput = 0
    };
    
    
    //*********************************************************************************
    //  RF Setting:   250 kpbs, 125 kHz Deviation, 2-GFSK, 471 kHz RX Bandwidth
    //
    //  PHY:          2gfsk250kbps
    //  Setting file: setting_tc901.json
    //*********************************************************************************
    
    // PARAMETER SUMMARY
    // RX Address0: 0xAA
    // RX Address1: 0xBB
    // RX Address Mode: No address check
    // Frequency (MHz): 2440.0000
    // Deviation (kHz): 125.0
    // Fixed Packet Length: 20
    // Packet Length Config: Variable
    // Max Packet Length: 255
    // Preamble Count: 4 Bytes
    // Preamble Mode: Send 0 as the first preamble bit
    // RX Filter BW (kHz): 470.9
    // Symbol Rate (kBaud): 250.000
    // Sync Word: 0x930B51DE
    // Sync Word Length: 32 Bits
    // TX Power (dBm): 5
    // TX Power (dBm): 13
    // Whitening: No whitening
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop_2_4G_fsk_250kbps =
    {
        .rfMode = RF_MODE_PROPRIETARY_2_4,
        .cpePatchFxn = &rf_patch_cpe_multi_protocol,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0
    };
    
    // Overrides for CMD_PROP_RADIO_DIV_SETUP_PA
    uint32_t pOverrides_2_4G_fsk_250kbps[] =
    {
        // override_tc901.json
        // DC/DC regulator: In Tx, use DCDCCTL5[3:0]=0x3 (DITHER_EN=0 and IPEAK=3).
        (uint32_t)0x00F388D3,
        // Tx: Configure PA ramp time, PACTL2.RC=0x1 (in ADI0, set PACTL2[4:3]=0x1)
        ADI_2HALFREG_OVERRIDE(0,16,0x8,0x8,17,0x1,0x0),
        // Rx: Set AGC reference level to 0x22 (default: 0x2E)
        HW_REG_OVERRIDE(0x609C,0x0022),
        // Rx: Set anti-aliasing filter bandwidth to 0x5 (in ADI0, set IFAMPCTL3[7:4]=0x5)
        ADI_HALFREG_OVERRIDE(0,61,0xF,0x5),
        (uint32_t)0xFFFFFFFF
    };
    
    
    
    // CMD_PROP_RADIO_DIV_SETUP_PA
    // Proprietary Mode Radio Setup Command for All Frequency Bands
    rfc_CMD_PROP_RADIO_DIV_SETUP_PA_t RF_cmdPropRadioDivSetup_2_4G_fsk_250kbps =
    {
        .commandNo = 0x3807,
        .status = 0x0000,
        .pNextOp = 0,
        .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 = 0x1F4,
        .modulation.deviationStepSz = 0x0,
        .symbolRate.preScale = 0xF,
        .symbolRate.rateWord = 0x28000,
        .symbolRate.decimMode = 0x0,
        .rxBw = 0x5B,
        .preamConf.nPreamBytes = 0x4,
        .preamConf.preamMode = 0x0,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x0,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 0x0,
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x1,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .config.bSynthNarrowBand = 0x0,
        .txPower = 0x7217,
        .pRegOverride = pOverrides_2_4G_fsk_250kbps,
        .centerFreq = 0x0988,
        .intFreq = 0x0800,
        .loDivider = 0x00,
        .pRegOverrideTxStd = 0,
        .pRegOverrideTx20 = 0
    };
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFs_2_4G_fsk_250kbps =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0,
        .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_PROP_TX
    // Proprietary Mode Transmit Command
    rfc_CMD_PROP_TX_t RF_cmdPropTx_2_4G_fsk_250kbps =
    {
        .commandNo = 0x3801,
        .status = 0x0000,
        .pNextOp = 0,
        .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 = 0x14,
        .syncWord = 0x930B51DE,
        .pPkt = 0
    };
    
    // CMD_PROP_RX_ADV
    // Proprietary Mode Advanced Receive Command
    rfc_CMD_PROP_RX_ADV_t RF_cmdPropRxAdv_2_4G_fsk_250kbps =
    {
        .commandNo = 0x3804,
        .status = 0x0000,
        .pNextOp = 0,
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x0,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bRepeatOk = 0x0,
        .pktConf.bRepeatNok = 0x0,
        .pktConf.bUseCrc = 0x0,
        .pktConf.bCrcIncSw = 0x0,
        .pktConf.bCrcIncHdr = 0x0,
        .pktConf.endType = 0x0,
        .pktConf.filterOp = 0x0,
        .rxConf.bAutoFlushIgnored = 0x0,
        .rxConf.bAutoFlushCrcErr = 0x0,
        .rxConf.bIncludeHdr = 0x0,
        .rxConf.bIncludeCrc = 0x0,
        .rxConf.bAppendRssi = 0x0,
        .rxConf.bAppendTimestamp = 0x0,
        .rxConf.bAppendStatus = 0x0,
        .syncWord0 = 0x930B51DE,
        .syncWord1 = 0x00000000,
        .maxPktLen = 0x00FF,
        .hdrConf.numHdrBits = 0x0,
        .hdrConf.lenPos = 0x0,
        .hdrConf.numLenBits = 0x0,
        .addrConf.addrType = 0x0,
        .addrConf.addrSize = 0x0,
        .addrConf.addrPos = 0x0,
        .addrConf.numAddr = 0x0,
        .lenOffset = 0x00,
        .endTrigger.triggerType = 0x0,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000,
        .pAddr = 0,
        .pQueue = 0,
        .pOutput = 0
    };
    
    
    
    7128.ti_radio_config.h

    Regarding the .c-files: they were attached, but they are automatically included as a source code, even when I include them as a file. So if you don't mind, please copy the contents of the .c-files from above.

    Regards,

    Alex

  • Hei Alexander,

    I reproduced your set up with the following source (based on rfEasyLinkTx), where I update the frequency every other packet:

    /*
     * Copyright (c) 2017-2018, 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.
     */
    
    /*
     *  ======== rfEasyLinkTx.c ========
     */
     /* Standard C Libraries */
    #include <stdlib.h>
    
    /* XDCtools Header files */
    #include <xdc/std.h>
    #include <xdc/runtime/Assert.h>
    #include <xdc/runtime/Error.h>
    #include <xdc/runtime/System.h>
    
    /* BIOS Header files */
    #include <ti/sysbios/BIOS.h>
    #include <ti/sysbios/knl/Task.h>
    #include <ti/sysbios/knl/Semaphore.h>
    #include <ti/sysbios/knl/Clock.h>
    
    /* TI-RTOS Header files */
    #include <ti/drivers/GPIO.h>
    
    /* Board Header files */
    #include "ti_drivers_config.h"
    
    /* EasyLink API Header files */
    #include "easylink/EasyLink.h"
    
    /* Application header files */
    #include <ti_radio_config.h>
    
    /* Undefine to not use async mode */
    #define RFEASYLINKTX_ASYNC
    
    #define RFEASYLINKTX_TASK_STACK_SIZE    1024
    #define RFEASYLINKTX_TASK_PRIORITY      2
    
    #define RFEASYLINKTX_BURST_SIZE         10
    #define RFEASYLINKTXPAYLOAD_LENGTH      30
    
    Task_Struct txTask;    /* not static so you can see in ROV */
    static Task_Params txTaskParams;
    static uint8_t txTaskStack[RFEASYLINKTX_TASK_STACK_SIZE];
    
    static uint16_t seqNumber;
    
    #ifdef RFEASYLINKTX_ASYNC
    static Semaphore_Handle txDoneSem;
    #endif //RFEASYLINKTX_ASYNC
    
    #ifdef RFEASYLINKTX_ASYNC
    void txDoneCb(EasyLink_Status status)
    {
        if (status == EasyLink_Status_Success)
        {
            /* Toggle GLED to indicate TX */
            GPIO_toggle(CONFIG_GPIO_GLED);
        }
        else if(status == EasyLink_Status_Aborted)
        {
            /* Toggle RLED to indicate command aborted */
            GPIO_toggle(CONFIG_GPIO_RLED);
        }
        else
        {
            /* Toggle GLED and RLED to indicate error */
            GPIO_toggle(CONFIG_GPIO_GLED);
            GPIO_toggle(CONFIG_GPIO_RLED);
        }
    
        Semaphore_post(txDoneSem);
    }
    #endif //RFEASYLINKTX_ASYNC
    
    static void rfEasyLinkTxFnx(UArg arg0, UArg arg1)
    {
        uint8_t txBurstSize = 0;
        uint32_t absTime;
        uint8_t freqFlag = false;
    
    #ifdef RFEASYLINKTX_ASYNC
        /* Create a semaphore for Async */
        Semaphore_Params params;
        Error_Block eb;
    
        /* Init params */
        Semaphore_Params_init(&params);
        Error_init(&eb);
    
        /* Create semaphore instance */
        txDoneSem = Semaphore_create(0, &params, &eb);
        if(txDoneSem == NULL)
        {
            System_abort("Semaphore creation failed");
        }
    
    #endif //TX_ASYNC
    
        // Initialize the EasyLink parameters to their default values
        EasyLink_Params easyLink_params;
        EasyLink_Params_init(&easyLink_params);
    
        /*
         * Initialize EasyLink with the settings found in ti_easylink_config.h
         * Modify EASYLINK_PARAM_CONFIG in ti_easylink_config.h to change the default
         * PHY
         */
        if(EasyLink_init(&easyLink_params) != EasyLink_Status_Success)
        {
            System_abort("EasyLink_init failed");
        }
    
        /*
         * If you wish to use a frequency other than the default, use
         * the following API:
         * EasyLink_setFrequency(868000000);
         */
    
        while(1) {
    
            if (freqFlag)
            {
                EasyLink_setFrequency(878000000);
                freqFlag = false;
            }
            else
            {
                EasyLink_setFrequency(868000000);
                freqFlag = true;
            }
    
            EasyLink_TxPacket txPacket =  { {0}, 0, 0, {0} };
    
            /* Create packet with incrementing sequence number and random payload */
            txPacket.payload[0] = (uint8_t)(seqNumber >> 8);
            txPacket.payload[1] = (uint8_t)(seqNumber++);
            uint8_t i;
            for (i = 2; i < RFEASYLINKTXPAYLOAD_LENGTH; i++)
            {
              txPacket.payload[i] = rand();
            }
    
            txPacket.len = RFEASYLINKTXPAYLOAD_LENGTH;
    
            /*
             * Address filtering is enabled by default on the Rx device with the
             * an address of 0xAA. This device must set the dstAddr accordingly.
             */
            txPacket.dstAddr[0] = 0xaa;
    
            /* Add a Tx delay for > 500ms, so that the abort kicks in and brakes the burst */
            if(EasyLink_getAbsTime(&absTime) != EasyLink_Status_Success)
            {
                // Problem getting absolute time
            }
            if(txBurstSize++ >= RFEASYLINKTX_BURST_SIZE)
            {
              /* Set Tx absolute time to current time + 1s */
              txPacket.absTime = absTime + EasyLink_ms_To_RadioTime(1000);
              txBurstSize = 0;
            }
            /* Else set the next packet in burst to Tx in 100ms */
            else
            {
              /* Set Tx absolute time to current time + 100ms */
              txPacket.absTime = absTime + EasyLink_ms_To_RadioTime(100);
            }
    
    #ifdef RFEASYLINKTX_ASYNC
            EasyLink_transmitAsync(&txPacket, txDoneCb);
            /* Wait 300ms for Tx to complete */
            if(Semaphore_pend(txDoneSem, (300000 / Clock_tickPeriod)) == FALSE)
            {
                /* TX timed out, abort */
                if(EasyLink_abort() == EasyLink_Status_Success)
                {
                    /*
                     * Abort will cause the txDoneCb to be called and the txDoneSem
                     * to be released, so we must consume the txDoneSem
                     */
                   Semaphore_pend(txDoneSem, BIOS_WAIT_FOREVER);
                }
            }
    #else
            EasyLink_Status result = EasyLink_transmit(&txPacket);
    
            if (result == EasyLink_Status_Success)
            {
                /* Toggle GLED to indicate TX */
                GPIO_toggle(CONFIG_GPIO_GLED);
            }
            else
            {
                /* Toggle GLED and RLED to indicate error */
                GPIO_toggle(CONFIG_GPIO_GLED);
                GPIO_toggle(CONFIG_GPIO_RLED);
            }
    #endif //RFEASYLINKTX_ASYNC
        }
    }
    
    void txTask_init() {
    
        Task_Params_init(&txTaskParams);
        txTaskParams.stackSize = RFEASYLINKTX_TASK_STACK_SIZE;
        txTaskParams.priority = RFEASYLINKTX_TASK_PRIORITY;
        txTaskParams.stack = &txTaskStack;
        txTaskParams.arg0 = (UInt)1000000;
    
        Task_construct(&txTask, rfEasyLinkTxFnx, &txTaskParams, NULL);
    }
    
    /*
     *  ======== main ========
     */
    int main(void)
    {
        /* Call driver init functions. */
        Board_initGeneral();
        GPIO_init();
    
        GPIO_setConfig(CONFIG_GPIO_RLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
        GPIO_setConfig(CONFIG_GPIO_GLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    
        GPIO_write(CONFIG_GPIO_RLED, CONFIG_GPIO_LED_OFF);
        GPIO_write(CONFIG_GPIO_GLED, CONFIG_GPIO_LED_OFF);
    
        txTask_init();
    
        /* Start BIOS */
        BIOS_start();
    
        return (0);
    }
    

    I have two PHY defined in that project as well (Custom 868, predifined 2.4).

    It seems to work just fine, as I can receive the packets on two boards tuned to their respective reception frequencies.

    My question is then, is there a reason for reinitializing the EasyLink stack every time you want to change the frequency? You can change the frequency on the fly as shown in the above example.

    Regards,

    Arthur

  • Hi Arthur,

    Thank you for your reply. Maybe I did not make myself clear enough about my application and what I want to achieve.

    In my application, I'm using multiple frequencies for multiplexing different groups of nodes in the network, so group 1 uses one frequency and group 2 again another frequency. What I am doing in the shared code is simply initializing EasyLink and then switch to the default group (i.e. frequency) of that node. Later, I want also be able to switch the frequency on runtime, but right now, even the switch to the initial frequency does not work, as I mentioned in my original post.

    So I am not reinitializing the EasyLink stack every time I want to change frequency, the error just already happens after my first call to EasyLink_init and with the first call to EasyLink_setFrequency.

    My follow-up question would then be why the CMD_FS operation might have the status 0x0808, meaning that the frequency synthesizer has not been configured, even though I (successfully) called EasyLink_init beforehand.

    Given this error, I examined the EasyLink_init behaviour further and found out that the cmdFs operation already fails in the EasyLink initialization function. Unfortunately, there is no error handling done when the cmdFs operation is run, so I added a simple if statement to check the cmdFs status after being run. And indeed, it has the same status (ERROR_NO_FS) when using the custom PHY and with the 250kbps pre-defined PHY, the status is DONE_OK as it should be, see code below (from EasyLink_init).

    EasyLink_Status EasyLink_init(EasyLink_Params *params)
    {
        if (params == NULL)
        {
            EasyLink_Params_init(&EasyLink_params);
        } else
        {
            memcpy(&EasyLink_params, params, sizeof(EasyLink_params));
        }
        
        .
        .
        .
    
            //Set the frequency
            (void)RF_runScheduleCmd(rfHandle, (RF_Op*)&EasyLink_cmdFs, &schParams_prop, 0, //asyncCmdCallback,
                    EASYLINK_RF_EVENT_MASK);
        }
        else
        {
            //Set the frequency
            (void)RF_runCmd(rfHandle, (RF_Op*)&EasyLink_cmdFs, RF_PriorityNormal, 0, //asyncCmdCallback,
                    EASYLINK_RF_EVENT_MASK);
        }
    
        /* With Custom Phy:      EasyLink_cmdFs.status = ERROR_NO_FS 
         * With pre-defined Phy: EasyLink_cmdFs.status = DONE_OK
         */
        if (EasyLink_cmdFs.status == ERROR_NO_FS)
        {
            return EasyLink_Status_Config_Error;
        }
    
        //Create a semaphore for blocking commands
        Semaphore_Params semParams;
        Error_Block eb;
        
        .
        .
        .
    }

    I've also tested your code and it works. I could share my whole project, but I would want it to be not public if that is possible.

    Thank you so far.

    Regards,

    Alex

  • Hi Alex,

    Thank you for the clarification. I think I found out why it fails with your custom phy.

    While comparing our respective radio config files, I have seen that your "RF_Mode" object is set to "RF_MODE_PROPRIETARY_2_4" instead of  "RF_MODE_AUTO" . This looks like a likely error.

    I actually managed to reproduce this file generation error. You can fix it, using sysconfig, by setting the following parameters:

    This looks like a bug in SysConfig, I will try to comfirm that. Can you try, in the meantime, doing that manipulation and let me know the results?

    Regards,

    Arthur

  • Hi Arthur,

    thank you for your reply. I am not sure that I understand correctly, but the settings you are showing would not use the custom PHY settings, but instead, use the pre-defined one that was working anyway. I am pretty sure I am missing something here.

    Also I understood from your post that I should use the RF_MODE_AUTO instead of RF_MODE_PROPRIETARY_2_4 for the custom PHY. How can I manually alter the .rfMode property? I cannot do that in the file directly, since it is newly generated everytime I am building the project. I also cannot exclude the file from the build, because it will disappear completely.

    Also, what I find very peculiar is that all these RF_MODE definitions seem to have the same value defined in rf_mailbox.h

    /// \name RF mode values
    /// Defines used to indicate mode of operation to radio core.
    ///@{
    #define RF_MODE_AUTO             0x00
    #define RF_MODE_BLE              0x00
    #define RF_MODE_IEEE_15_4        0x00
    #define RF_MODE_PROPRIETARY_2_4  0x00
    #define RF_MODE_PROPRIETARY      RF_MODE_PROPRIETARY_2_4
    #define RF_MODE_MULTIPLE         0x00
    ///@}

    Is this normal?

    Regards,

    Alex

  • Hi Alexander,

    Indeed, this does not seem to be it..

    FYI, you can disable file generation , once they have been generated using the following menu:

    Simply copy the files you want to keep somewhere else in the project, then untick the files you want to keep the modifications on.

    The RF_MODE definitions you are seeing are actually here for backward compatibility reasons, and thus indeed do not have any impact on the CC1352P

    Regards,

    Arthur

  • Hi Alexander,

    I managed to reproduce the frequency setting issue. Indeed, in your radio_config.c file, the txPower field of your RF_cmdPropRadioDivSetup structure is set to 0xFFFF. Can you try setting it to something like 0x7212?

    It looks like there is a problem with the High PA setting in Sysconfig/Easylink, which could be a bug.

    Regards,

    Arthur

  • Hi Arthur,

    thank you, this was it. The .txPower was 0xFFFF in the RF_cmdPropRadioDivSetup structure, as you said. I've also reproduced how this value was set in the first place and it turns out it is set when I enable High PA in SysConfig, see picture below. And since none of the CC1352P boards do not currently support High PA on proprietary radio, it can be disabled anyway.

    It might be only a problem with my version of SysConfig (1.12.0) and maybe it is fixed with the currently newest version (1.13.0), though.

    Thank you again.

    Regards,

    Alex