Hi,
We developed a custom board based on CC1352P.
For Sub 1Ghz we use the following radio settings:
// Frequency: 868.00000 MHz
// Data Format: Serial mode disable
// Deviation: 5.000 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: 34.1 kHz
// Symbol Rate: 19.99969 kBaud
// Sync Word: 0x930b51de
According to the document "Finding Settings for new PHYs for the CC13xx Family" ,
The recommended RX BW :
RX BW > SBW + 4∗XTALppm∗fRF
Our crystal accuracy is 10ppm , So the recommended RX filter BW should be 30Khz + 34Khz = 64kHz , and not 34.1kHz we use today.
Since our device is already in production, my question is:
Is there any drawback to increasing RX filter to 68.3kHz ( Nearest to 64kHz) ?
//********************************************************************************* // 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: CC1352P Rev. E (2.1). // //********************************************************************************* //********************************************************************************* // Parameter summary // RX Address0: 0xAA // RX Address1: 0xBB // RX Address Mode: No address check // Frequency: 868.00000 MHz // Data Format: Serial mode disable // Deviation: 5.000 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: 34.1 kHz // Symbol Rate: 19.99969 kBaud // Sync Word: 0x930b51de // Sync Word Length: 32 Bits // TX Power: 20 dBm // Enable high output power PA: true // Whitening: CC1101/CC2500 compatible #include "smartrf_settings_Standard.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 }; // TX Power table // The macros RF_TxPowerTable_DEFAULT_PA_ENTRY/RF_TxPowerTable_HIGH_PA_ENTRY/RF_TxPowerTable_CC13x4Sub1GHz_DEFAULT_PA_ENTRY 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. RF_TxPowerTable_Entry txPowerTable[TX_POWER_TABLE_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 {15, RF_TxPowerTable_HIGH_PA_ENTRY(18, 0, 0, 36, 0) }, // 0x004812 {16, RF_TxPowerTable_HIGH_PA_ENTRY(24, 0, 0, 43, 0) }, // 0x005618 {17, RF_TxPowerTable_HIGH_PA_ENTRY(28, 0, 0, 51, 2) }, // 0x02661C {18, RF_TxPowerTable_HIGH_PA_ENTRY(34, 0, 0, 64, 4) }, // 0x048022 {19, RF_TxPowerTable_HIGH_PA_ENTRY(15, 3, 0, 36, 4) }, // 0x0448CF {20, RF_TxPowerTable_HIGH_PA_ENTRY(18, 3, 0, 71, 27) }, // 0x1B8ED2 RF_TxPowerTable_TERMINATION_ENTRY }; // Overrides for CMD_PROP_RADIO_DIV_SETUP_PA uint32_t pOverrides[] = { // override_tc706.xml // Tx: Configure PA ramp time, PACTL2.RC=0x3 (in ADI0, set PACTL2[4:3]=0x3) ADI_2HALFREG_OVERRIDE(0,16,0x8,0x8,17,0x1,0x1), // Rx: Set AGC reference level to 0x1A (default: 0x2E) HW_REG_OVERRIDE(0x609C,0x001A), // Rx: Set RSSI offset to adjust reported RSSI by -1 dB (default: -2), trimmed for external bias and differential configuration (uint32_t)0x000188A3, // Rx: Set anti-aliasing filter bandwidth to 0xD (in ADI0, set IFAMPCTL3[7:4]=0xD) ADI_HALFREG_OVERRIDE(0,61,0xF,0xD), // override_prop_common_sub1g.xml // Set RF_FSCA.ANADIV.DIV_SEL_BIAS = 1. Bits [0:16, 24, 30] are don't care.. (uint32_t)0x4001405D, // Set RF_FSCA.ANADIV.DIV_SEL_BIAS = 1. Bits [0:16, 24, 30] are don't care.. (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 }; // Overrides for CMD_PROP_RADIO_DIV_SETUP_PA uint32_t pOverridesTxStd[] = { // The TX Power element should always be the first in the list TX_STD_POWER_OVERRIDE(0x013F), // The ANADIV radio parameter based on the LO divider (0) and front-end (0) settings (uint32_t)0x11310703, // override_phy_tx_pa_ramp_genfsk_std.xml // Tx: Configure PA ramping, set wait time before turning off (0x1A ticks of 16/24 us = 17.3 us). HW_REG_OVERRIDE(0x6028,0x001A), // Set TXRX pin to 0 in RX and high impedance in idle/TX. HW_REG_OVERRIDE(0x60A8,0x0401), (uint32_t)0xFFFFFFFF }; // Overrides for CMD_PROP_RADIO_DIV_SETUP_PA uint32_t pOverridesTx20[] = { // The TX Power element should always be the first in the list TX20_POWER_OVERRIDE(0x001B8ED2), // The ANADIV radio parameter based on the LO divider (0) and front-end (0) settings (uint32_t)0x11C10703, // override_phy_tx_pa_ramp_genfsk_hpa.xml // Tx: Configure PA ramping, set wait time before turning off (0x1F ticks of 16/24 us = 20.3 us). HW_REG_OVERRIDE(0x6028,0x001F), // Set TXRX pin to 0 in RX/TX and high impedance in idle. HW_REG_OVERRIDE(0x60A8,0x0001), (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 = 0x14, .modulation.deviationStepSz = 0x0, .symbolRate.preScale = 0xF, .symbolRate.rateWord = 0x3333, .symbolRate.decimMode = 0x0, .rxBw = 0x4C, .preamConf.nPreamBytes = 0x4, .preamConf.preamMode = 0x0, .formatConf.nSwBits = 0x20, .formatConf.bBitReversal = 0x0, .formatConf.bMsbFirst = 0x1, .formatConf.fecMode = 0x0, .formatConf.whitenMode = 0x1, .config.frontEndMode = 0x0, .config.biasMode = 0x1, .config.analogCfgMode = 0x0, .config.bNoFsPowerUp = 0x0, .config.bSynthNarrowBand = 0x0, .txPower = 0xFFFF, .pRegOverride = pOverrides, .centerFreq = 0x0364, .intFreq = 0x8000, .loDivider = 0x05, .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 = 0x0364, .fractFreq = 0x0000, .synthConf.bTxMode = 0x0, .synthConf.refFreq = 0x0, .__dummy0 = 0x00, .__dummy1 = 0x00, .__dummy2 = 0x00, .__dummy3 = 0x0000 }; // 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 }; // 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 };