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

