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: 2.4 GHz Proprietary Mode with PA

Part Number: CC1352P
Other Parts Discussed in Thread: SMARTRFTM-STUDIO, SIMPLELINK-CC13X2-26X2-SDK

Hi,

I have an application with this chip where I need to use proprietary mode at 2.4 GHz with the 20 dBm PA. I am currently testing with a LAUNCHXL-CC1352P-2 board, with the TX20 signal chain tuned to the 2.4 GHz output. Unfortunately in SmartRF Studio the 20 dBm PA is disabled when using 2.4 GHz proprietary mode. I tested using the IEEE802.15.4 mode on SmartRF Studio and was able to get the 20 dBm output. In my firmware application, I imported the rf settings from the prioprietary 2.4 GHz mode with the 20 dBm PA disabled and was able to get a 5 dBm output. I then combined those rf settings, specifically the txPower field and the overrides with the 20 dBm PA IEEE802.15.4 exported rf settings to that are supposed to enable the 20 dBm PA, but I was only able to get a 10 dBm output. I also made sure my CCFG_FORCE_VDDR was also set to 0. How can I get the 20 dBm output in proprietary mode?

Here are the smartrf_settings files that I am using:

smartrf_settings.h

#ifndef _SMARTRF_SETTINGS_H_
#define _SMARTRF_SETTINGS_H_

//*********************************************************************************
//
// Proprietary 2.4 GHz 20 dBm PA output
// Custom
//
//*********************************************************************************
#include <driverlib/rf_mailbox.h>
#include <driverlib/rf_common_cmd.h>
#include <driverlib/rf_prop_cmd.h>
#include <ti/drivers/rf/RF.h>


// TI-RTOS RF Mode Object
extern RF_Mode RF_prop;

// RF Core API commands
extern rfc_CMD_PROP_RADIO_SETUP_PA_t RF_cmdPropRadioSetup;
extern rfc_CMD_FS_t RF_cmdFs;
extern rfc_CMD_PROP_TX_ADV_t RF_cmdPropTxAdv;
extern rfc_CMD_PROP_RX_ADV_t RF_cmdPropRxAdv;
extern rfc_CMD_TX_TEST_t RF_cmdTxTest;

// RF Core API Overrides
extern uint32_t pOverrides[];
extern uint32_t pOverridesTxStd[];
extern uint32_t pOverridesTx20[];

#endif // _SMARTRF_SETTINGS_H_

smartrf_settings.c

#include <ti/devices/DeviceFamily.h>
#include DeviceFamily_constructPath(driverlib/rf_mailbox.h)
#include DeviceFamily_constructPath(driverlib/rf_common_cmd.h)
#include DeviceFamily_constructPath(driverlib/rf_prop_cmd.h)
#include <ti/drivers/rf/RF.h>
#include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_prop.h)
#include "smartrf_settings.h"


// TI-RTOS RF Mode Object
RF_Mode RF_prop =
{
    .rfMode = RF_MODE_PROPRIETARY_2_4,
    .cpePatchFxn = &rf_patch_cpe_prop,
    .mcePatchFxn = 0,
    .rfePatchFxn = 0
};

// Overrides for CMD_RADIO_SETUP_PA
uint32_t pOverrides[] =
{
    // override_ieee_802_15_4.xml
    // Rx: Set LNA bias current offset to +15 to saturate trim to max (default: 0)
    (uint32_t)0x000F8883,
    // Tx: Set DCDC settings IPEAK=3, dither = off
    (uint32_t)0x00F388D3,
    (uint32_t)0xFFFFFFFF
};


// Overrides for CMD_RADIO_SETUP_PA
uint32_t pOverridesTxStd[] =
{
    // The TX Power element should always be the first in the list
    TX_STD_POWER_OVERRIDE(0x7217),
    // The ANADIV radio parameter based on the LO divider (0) and front-end (0) settings
    (uint32_t)0x05320703,
    // override_txstd_settings.xml
    // Set RTIM offset to default for standard PA
    (uint32_t)0x00008783,
    // Set synth mux to default value for standard PA
    (uint32_t)0x050206C3,
    // Set TXRX pin to 0 in RX and high impedance in idle/TX.
    HW_REG_OVERRIDE(0x60A8,0x0401),
    (uint32_t)0xFFFFFFFF
};


// Overrides for CMD_RADIO_SETUP_PA
uint32_t pOverridesTx20[] =
{
    // The TX Power element should always be the first in the list
    TX20_POWER_OVERRIDE(0x003F75F5),
//    TX20_POWER_OVERRIDE(0),
    // The ANADIV radio parameter based on the LO divider (0) and front-end (0) settings
    (uint32_t)0x01C20703,
    // override_tx20_settings.xml
    // Set RTIM offset to 3 for high power PA
    (uint32_t)0x00038783,
    // Set synth mux for high power PA
    (uint32_t)0x010206C3,
    // Set TXRX pin to 0 in RX/TX and high impedance in idle.
    HW_REG_OVERRIDE(0x60A8,0x0001),
    (uint32_t)0xFFFFFFFF
};


// CMD_PROP_RADIO_SETUP_PA
// Proprietary Mode Radio Setup Command for All Frequency Bands
rfc_CMD_PROP_RADIO_SETUP_PA_t RF_cmdPropRadioSetup =
{
    .commandNo = 0x3806,
    .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 = 0x64,
    .modulation.deviationStepSz = 0x0,
    .symbolRate.preScale = 0xF,
    .symbolRate.rateWord = 0x8000,
    .symbolRate.decimMode = 0x0,
    .rxBw = 0x51,
    .preamConf.nPreamBytes = 0x7,
    .preamConf.preamMode = 0x0,
    .formatConf.nSwBits = 0x18,
    .formatConf.bBitReversal = 0x0,
    .formatConf.bMsbFirst = 0x1,
    .formatConf.fecMode = 0x0,
    .formatConf.whitenMode = 0x7,
    .config.frontEndMode = 0x0,
    .config.biasMode = 0x1,
    .config.analogCfgMode = 0x0,
    .config.bNoFsPowerUp = 0x0,
    .config.bSynthNarrowBand = 0x0,
    .txPower = 0xFFFF,
    .pRegOverride = pOverrides,
    .pRegOverrideTxStd = pOverridesTxStd,
    .pRegOverrideTx20 = pOverridesTx20
};


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


// CMD_PROP_TX_ADV
// Proprietary Mode Advanced Transmit Command
rfc_CMD_PROP_TX_ADV_t RF_cmdPropTxAdv =
{
    .commandNo = 0x3803,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x2,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x1,
    .condition.rule = 0x1,
    .condition.nSkip = 0x0,
    .pktConf.bFsOff = 0x0,
    .pktConf.bUseCrc = 0x1,
    .pktConf.bCrcIncSw = 0x0,
    .pktConf.bCrcIncHdr = 0x0,
    .numHdrBits = 0x10,
    .pktLen = 0x0014,
    .startConf.bExtTxTrig = 0x0,
    .startConf.inputMode = 0x0,
    .startConf.source = 0x0,
    .preTrigger.triggerType = 0x4,
    .preTrigger.bEnaCmd = 0x0,
    .preTrigger.triggerNo = 0x0,
    .preTrigger.pastTrig = 0x1,
    .preTime = 0x00000000,
    .syncWord = 0x0055904E,
    .pPkt = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
};


// CMD_PROP_RX_ADV
// Proprietary Mode Advanced Receive Command
rfc_CMD_PROP_RX_ADV_t RF_cmdPropRxAdv =
{
    .commandNo = 0x3804,
    .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.bCrcIncSw = 0x0,
    .pktConf.bCrcIncHdr = 0x0,
    .pktConf.endType = 0x0,
    .pktConf.filterOp = 0x0,
    .rxConf.bAutoFlushIgnored = 0x1,
    .rxConf.bAutoFlushCrcErr = 0x0,
    .rxConf.bIncludeHdr = 0x1,
    .rxConf.bIncludeCrc = 0x1,
    .rxConf.bAppendRssi = 0x1,
    .rxConf.bAppendTimestamp = 0x1,
    .rxConf.bAppendStatus = 0x1,
    .syncWord0 = 0x0055904E,
    .syncWord1 = 0x00000000,
    .maxPktLen = 0x07FF,
    .hdrConf.numHdrBits = 0x10,
    .hdrConf.lenPos = 0x0,
    .hdrConf.numLenBits = 0xB,
    .addrConf.addrType = 0x0,
    .addrConf.addrSize = 0x0,
    .addrConf.addrPos = 0x0,
    .addrConf.numAddr = 0x0,
    .lenOffset = 0xFC,
    .endTrigger.triggerType = 0x1,
    .endTrigger.bEnaCmd = 0x0,
    .endTrigger.triggerNo = 0x0,
    .endTrigger.pastTrig = 0x0,
    .endTime = 0x00000000,
    .pAddr = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .pQueue = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
    .pOutput = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
};

// 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 = 0x0055904E,
    .endTime = 0x00000000
};

Thanks,

Markus

  • Hi Markus,

    The Proprietary RF High PA 2.4 GHz settings have not been characterized by TI, which is why they are not able to be selected in SMARTRFTM-STUDIO or the SIMPLELINK-CC13X2-26X2-SDK example projects.  You can reference the BLE or 15.4-Stack/Zigbee RF tables for your requirements, if you are able to achieve 10 dBm with your 2.4 GHz project (implying the PA is enabled and correct output path) then 20 dBm should be possible as well.  Here is a link to a similar E2E post.

    Regards,
    Ryan

  • Hi Ryan,

    Thanks for the response. I have been referencing the BLE and the 15.4 settings, which is the result of the rf settings that I have posted. I have also encountered the previous post on this forum. Based on the info I got there, I changed the proprietary RF setup command to the PA version, with the overrides from BLE/15.4. Using these settings, I'm currentlly transmitting at 10 dBm in proprietary mode.

    I understand that it has not been characterized, but I just need some settings that get me at least to 16 or 17 dBm. I suppose my question is which values should I be looking to change or adjust, and which ones are important? I assume that I should be looking at the TX20 overrides, attached here:

    // Overrides for CMD_RADIO_SETUP_PA
    uint32_t pOverridesTx20[] =
    {
        // The TX Power element should always be the first in the list
        TX20_POWER_OVERRIDE(0x003F75F5),
        // The ANADIV radio parameter based on the LO divider (0) and front-end (0) settings
        (uint32_t)0x01C20703,
        // override_tx20_settings.xml
        // Set RTIM offset to 3 for high power PA
        (uint32_t)0x00038783,
        // Set synth mux for high power PA
        (uint32_t)0x010206C3,
        // Set TXRX pin to 0 in RX/TX and high impedance in idle.
        HW_REG_OVERRIDE(0x60A8,0x0001),
        // Set VCTRIM to 0 for 20 dBm PA
        ADI_HALFREG_OVERRIDE(1,26,0xF,0x0),
        // Set VCTRIM to 0 for 20 dBm PA
        ADI_HALFREG_OVERRIDE(1,27,0x7,0x0),
        (uint32_t)0xFFFFFFFF
    };

    The only difference between the 15.4 and BLE settings exported from smartRF studio here are the addition of the two lines that "Set VCTRIM to 0 for 20 dBm PA". I have tried with those lines included and excluded and it didn't seem to make a difference in the output power at all. I suspect I should be focusing on the TX20_POWER_OVERRIDE value. I encountered this section within the proprietary RF users guide, for setting the TX power, which describes this override value:

    I assume this table is describing the override value for the TX20_POWER_OVERRIDE command. I also checked the TRM to get the detailed overview of the bit fields. Screenshot of that is attached:

    Here, it says I should use the values from SmartRF studio, which I already am. Based on these bit field descriptions, I deconstructed the 0x003F75F5 override value provided by smartRF studio. 

    IB: 63

    ibBoost: 1

    boost: 1

    tempCoeff: 87

    paLdoTrim: 53

    Which of these values should I change to get get the full output power for proprietary? If it's not this, what else should I be looking at?

    For additional context, my proprietary PHY is GFSK, 50 kbps. I'm taking my measurements using a CMD_TX_TEST command, with an unmodulated carrier wave.

    Thanks,

    Markus

  • Hi,

    Using the LAUNCHXL-CC1352P-2 and SmartRF studio, the 20 dBm PA can be evaluated with the 15.4 PHY. Please use these settings to evaluate your PA design section. With these settings what output power are you measuring ?

    Regards,

       Richard

  • Note that the settings:

        // Set VCTRIM to 0 for 20 dBm PA
        ADI_HALFREG_OVERRIDE(1,26,0xF,0x0),
        // Set VCTRIM to 0 for 20 dBm PA
        ADI_HALFREG_OVERRIDE(1,27,0x7,0x0),
    should not be used if you power the HPA (20 dBm) PA from VDDS (see https://www.ti.com/lit/pdf/swra636
    You can use the same overrides and tx power table for prop as a starting point. 
  • Looks like I had a problem with setting the switch states on the launchpad board. After the GPIOs were set correctly, I'm getting the correct output power with these settings.

    Thanks,

    Markus