你(们)好、
就定制电路板申请帮助、而我正尝试使其达到我们的规格。 通常、此系统需要在4-GFSK 调制下在430 -480MHz 范围内工作。
我们为 RX 使用 CC1352P7、并使用外部射频 LNA、为 TX 使用外部射频放大器、所有这些都具有内部偏置。
RX 设计为从 RFN 引脚输入、而 TX 设计为从 RFP 输出(全部在 Sub_1GHz 引脚和单端)。
根据 SWRA640 (修订版 H)第2.2节(配置前端模式)、我们已将 Config.frontEndMode 设置为0x02以在 RFN 上选择单端模式 RX。 此外、我们还按照建议通过设置 x=1来设置覆盖。 请注意、数据表中提到了 ADI_HALFREG_OVERRIDE S (0、16、0x7、x)、其中必须删除 S 以满足编译器的要求、因为没有定义此类宏。
我曾尝试在我们自己的应用软件(基于 TI-RTOS)和 Smart-RF Studio 7中使用这些设置、但效果不令人满意。 使用频谱分析仪直接在 RFP 输出端进行测量时、我预计会收到大约0dBm - 3dBm 的信号、但我测得的信号减少了25-30dB。 我怀疑测量的是 RXn 引脚和布线上传输信号产生的寄生耦合。
但是、当我将 .config.frontEndMode 设置为0x1 (RFP 上的单端)时、输出功率通常为0dBm、但很自然- 由于现在在 RFP 引脚上配置了 RX、因此我的 RX 灵敏度会以~30dB 的损耗。 这让我认为、在我们的配置中、将 TX 分配给 RFP 引脚的覆盖设置无法正常工作。
我已包含 SmartRF Studio 7生成的 smartrf_settings.c。 请告诉我您是否/需要什么其他信息!
我的问题:
- 通常:如何在保持 RX 灵敏度的同时提高 TX 性能? -最好在软件中;-)
- 我是否遗漏了任何其他设置、是否以错误的方式配置了某些设置?
- 覆盖是否按照我以前的方式正确应用? 在覆盖块的哪个位置插入此行是否重要?
提前感谢!
//*********************************************************************************
// Generated by SmartRF Studio version 2.30.0 (build#397)
// The applied template is compatible with cc13x2_26x2 SDK version 2.30.xx.xx or newer.
// Device: CC1352P7 Rev. B (1.1). Only supported by CC26x2 SDK version 5.10.xx.xx or newer
//
//*********************************************************************************
//*********************************************************************************
// Parameter summary
// RX Address0: 0xAA
// RX Address1: 0xBB
// RX Address Mode: No address check
// Frequency: 459.30000 MHz
// Data Format: Serial mode disable
// Deviation: 0.797 kHz
// Packet Length Config: Variable
// Max Packet Length: 255
// Packet Length: 20
// Packet Data: 255
// Preamble Count: 4 Bytes
// Preamble Mode: Send 0 as the first preamble bit
// RX Filter BW: 9.7 kHz
// Symbol Rate: 4.80042 kBaud
// Sync Word: 0x930b51de
// Sync Word Length: 32 Bits
// TX Power: 3 dBm
// Enable high output power PA: false
// Whitening: No whitening
#include "smartrf_settings_NGT.h"
#include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_prop.h)
// TI-RTOS RF Mode Object
RF_Mode RF_prop =
{
.rfMode = RF_MODE_AUTO,
.cpePatchFxn = &rf_patch_cpe_prop,
.mcePatchFxn = 0,
.rfePatchFxn = 0
};
// Overrides for CMD_PROP_RADIO_DIV_SETUP_PA
uint32_t pOverrides[] =
{
// override_tc706.xml
ADI_2HALFREG_OVERRIDE(0,16,0x8,0x8,17,0x1,0x1),
ADI_HALFREG_OVERRIDE(0,16,0x7,1),
HW_REG_OVERRIDE(0x609C,0x001A),
(uint32_t)0x000188A3,
ADI_HALFREG_OVERRIDE(0,61,0xF,0xD),
// override_prop_common_sub1g.xml
// TX: Set FSCA divider bias to 1
HW32_ARRAY_OVERRIDE(0x405C,0x0001),
// TX: Set FSCA divider bias to 1
(uint32_t)0x08141131,
// override_prop_common.xml
// DC/DC regulator: In Tx with 14 dBm PA setting, use DCDCCTL5[3:0]=0xF (DITHER_EN=1 and IPEAK=7). In Rx, use default settings.
(uint32_t)0x00F788D3,
(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, // 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 = 0x33,
.modulation.deviationStepSz = 0x2,
.symbolRate.preScale = 0xF,
.symbolRate.rateWord = 0xC4A,
.symbolRate.decimMode = 0x0,
.rxBw = 0x45,
.preamConf.nPreamBytes = 0x4,
.preamConf.preamMode = 0x0,
.formatConf.nSwBits = 0x20,
.formatConf.bBitReversal = 0x0,
.formatConf.bMsbFirst = 0x1,
.formatConf.fecMode = 0x9,
.formatConf.whitenMode = 0x0,
.config.frontEndMode = 0x2,
.config.biasMode = 0x0,
.config.analogCfgMode = 0x0,
.config.bNoFsPowerUp = 0x0,
.config.bSynthNarrowBand = 0x0,
.txPower = 0x40D6,
.pRegOverride = pOverrides,
.centerFreq = 0x01CB,
.intFreq = 0x8000,
.loDivider = 0x0A,
.pRegOverrideTxStd = 0,
.pRegOverrideTx20 = 0
};
// 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 = 0x01CB,
.fractFreq = 0x4CCD,
.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, // 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.bUseCrc = 0x1,
.pktConf.bVarLen = 0x1,
.pktLen = 0x14,
.syncWord = 0x930B51DE,
.pPkt = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
};
// CMD_PROP_RX
// Proprietary Mode Receive Command
rfc_CMD_PROP_RX_t RF_cmdPropRx =
{
.commandNo = 0x3802,
.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.bVarLen = 0x1,
.pktConf.bChkAddress = 0x0,
.pktConf.endType = 0x0,
.pktConf.filterOp = 0x0,
.rxConf.bAutoFlushIgnored = 0x0,
.rxConf.bAutoFlushCrcErr = 0x0,
.rxConf.bIncludeHdr = 0x1,
.rxConf.bIncludeCrc = 0x0,
.rxConf.bAppendRssi = 0x0,
.rxConf.bAppendTimestamp = 0x0,
.rxConf.bAppendStatus = 0x1,
.syncWord = 0x930B51DE,
.maxPktLen = 0xFF,
.address0 = 0xAA,
.address1 = 0xBB,
.endTrigger.triggerType = 0x1,
.endTrigger.bEnaCmd = 0x0,
.endTrigger.triggerNo = 0x0,
.endTrigger.pastTrig = 0x0,
.endTime = 0x00000000,
.pQueue = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
.pOutput = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
};
