Hello,
We are using a cc1120, and we want to use sniff mode. We use the following settings:
We have :
symbol rate of 100 ksps
bitrate of 50 kbps (Manchester enable)
2-GFSK,
32MHz Xtal,
Rx filter BW of 200 kHz
See the used rfSettings[] below.
When we go to sniff mode we will strobe to SIDLE, strobe to receive SRX and eventually we will strobe SWOR
Before we go to receive we will program extra WOR settings to the cc112x chip. See rfSettings_WOR[] below.
For sniff mode we use a preamble of 300 ms. (=3700 bytes)
We have the following issues, which we do not understand:
1) The radio does not receive packets when we are close to the radio (50 cm). We have a 100% PER test if we stand on 2 meter
2) The radio has bad performance with sniff mode. We expect to come twice as far. We also see in the RSSI that the signal fluctuates in time. Note that we have a much better performance if we use the lower symbol rate of 50 kbps. Unfortunately, we cannot use this symbol rate…..
Our questions:
Could somebody give us a helpful suggestion what is wrong with our settings?
What we never have seen, is that the radio does not receive packets, within 50 cm. BUT it is able to receive packets, when the receiver is 1..15 meters away from the transmitter!! Note that we have a CC1120, and we transmit with 0 dBm (without a cc1190), so it cannot be saturation of the CC1120 receiver.
const cc112xRegister_t rfSettings[]={
{CC112X_IOCFG3 , 0x02}, // IOCFG3 GPIO3 IO pin configuration register. 0x00 for rx
{CC112X_IOCFG2 , 0x06}, // IOCFG2 GPIO2 IO pin configuration register. Tx
{CC112X_IOCFG1 , 0xB0}, // IOCFG1 GPIO1 IO pin configuration register.
{CC112X_IOCFG0 , 0x17}, // IOCFG0 GPIO0 IO pin configuration register.
{CC112X_SYNC3 , 0xD3}, // SYNC3 Sync word programming (31:24).
{CC112X_SYNC2 , 0x91}, // SYNC2 Sync word programming (23:16).
{CC112X_SYNC1 , 0xD3}, // SYNC1 Sync word programming (15:8).
{CC112X_SYNC0 , 0x91}, // SYNC0 Sync word programming (7:0).
{CC112X_SYNC_CFG1 , 0x0B}, // SYNC_CFG1 Sync Word Detection Programming ///was 0x44
{CC112X_SYNC_CFG0 , 0x14}, // SYNC_CFG0
{CC112X_DEVIATION_M , 0x9A}, // DEVIATION_M Frequency Deviation Programming new werkt goed, behalve dichtbij
{CC112X_MODCFG_DEV_E , 0x0E}, // MODCFG_DEV_E Modulation Format and Frequency Deviation Programming,
{CC112X_DCFILT_CFG , 0x3D}, // DCFILT_CFG Digital DC removal Programming
{CC112X_PREAMBLE_CFG1 , 0x34}, // PREAMBLE_CFG1 Preamble Length Programming
{CC112X_PREAMBLE_CFG0 , 0x2A}, // PREAMBLE_CFG0 //added default values was 0x2F
{CC112X_FREQ_IF_CFG , 0x3A}, // FREQ_IF_CFG RX Mixer Frequency Programming
{CC112X_IQIC , 0x00}, // IQIC Digital Image Channel Compensation Programming
{CC112X_CHAN_BW , 0x01}, // CHAN_BW Channel Filter Programming (old 0x02)100 kHz => 200 kHz
{CC112X_MDMCFG1 , 0x76}, // MDMCFG1
{CC112X_MDMCFG0 , 0x05}, // MDMCFG0
{CC112X_DRATE2 , 0xA9}, // DRATE2 Symbol Rate Programming Exponent and Mantissa (19:16).
{CC112X_DRATE1 , 0x99}, // DRATE1 Symbol Rate Programming Exponent and Mantissa (15:08).
{CC112X_DRATE0 , 0x9A}, // DRATE0 Symbol Rate Programming Exponent and Mantissa (07:00).
{CC112X_AGC_REF , 0x3C}, // AGC_REF AGC Reference Level
{CC112X_AGC_CS_THR , 0x09}, // AGC_CS_THR
{CC112X_AGC_CFG1 , 0xA0}, // AGC_CFG1 AGC Programming //was 0xA9
{CC112X_AGC_CFG0 , 0xC3}, // AGC_CFG0 AGC Programming //was 0xCF
{CC112X_FIFO_CFG , 0x40}, // FIFO_CFG //was 0x40 ->0x80 met autoflush
{CC112X_FS_CFG , 0x12}, // FS_CFG
{CC112X_PKT_CFG0 , 0x20}, // PKT_CFG0
{CC112X_PA_CFG2 , 0x3F}, // PA_CFG2 Power Amplifier Level Programming
{CC112X_PA_CFG0 , 0x7A}, // PA_CFG0
{CC112X_PKT_LEN , 0xFF}, // PKT_LEN
{CC112X_IF_MIX_CFG , 0x00}, // IF_MIX_CFG IF MIX configuration
{CC112X_FREQOFF_CFG , 0x22}, // FREQOFF_CFG Frequency Offset Removal programming.
{CC112X_TOC_CFG , 0x0A}, // TOC_CFG Data Rate Offset Removal Programming
{CC112X_FREQ2 , 0x6C}, // FREQ2
{CC112X_FREQ1 , 0x89}, // FREQ1
{CC112X_FREQ0 , 0x99}, // FREQ0
{CC112X_FS_DIG1 , 0x00}, // FS_DIG1
{CC112X_FS_DIG0 , 0x5F}, // FS_DIG0
{CC112X_FS_CAL1 , 0x40}, // FS_CAL1
{CC112X_FS_CAL0 , 0x0E}, // FS_CAL0
// {CC112X_FS_CHP , 0x27}, // FS_CHP
{CC112X_FS_DIVTWO , 0x03}, // FS_DIVTWO Divide by 2
{CC112X_FS_DSM1 , 0x00}, // FS_DSM1 Digital synthesizer module, reg 1
{CC112X_FS_DSM0 , 0x33}, // FS_DSM0 Digital synthesizer module, reg 0
{CC112X_FS_DVC1 , 0xFF}, // FS_DVC1 Divider chain, reg 1
{CC112X_FS_DVC0 , 0x17}, // FS_DVC0 Divider chain, reg 0
{CC112X_FS_PFD , 0x50}, // FS_PFD Phase-frequency detector
{CC112X_FS_PRE , 0x6E}, // FS_PRE Prescaler
{CC112X_FS_REG_DIV_CML , 0x14}, // FS_REG_DIV_CML
{CC112X_FS_SPARE , 0xAC}, // FS_SPARE
{CC112X_XOSC5 , 0x0E}, // XOSC5 Crystal oscillator, reg 5
{CC112X_XOSC2 , 0x00}, // XOSC2 Crystal oscillator, reg 2
{CC112X_XOSC1 , 0x03}, // XOSC1 Crystal oscillator, reg 1
{CC112X_DCFILTOFFSET_I1 , 0x02}, // DCFILTOFFSET_I1
{CC112X_DCFILTOFFSET_I0 , 0x39}, // DCFILTOFFSET_I0
{CC112X_DCFILTOFFSET_Q1 , 0x1A}, // DCFILTOFFSET_Q1
{CC112X_DCFILTOFFSET_Q0 , 0x58}, // DCFILTOFFSET_Q0
{CC112X_RSSI1 , 0x80}, // RSSI1 Received signal strength indicator, reg 1
{CC112X_MARCSTATE , 0x41}, // MARCSTATE MARC state value
{CC112X_PQT_SYNC_ERR , 0xFF}, // PQT_SYNC_ERR Preamble Detection and Sync Word Detection Status
{CC112X_ASK_SOFT_RX_DATA, 0x30}, // ASK_SOFT_RX_DATA
{CC112X_RNDGEN , 0x7F}, // RNDGEN
{CC112X_CHFILT_I2 , 0x08}, // CHFILT_I2
{CC112X_FSCAL_CTRL , 0x01}, // FSCAL_CTRL
{CC112X_PARTNUMBER , 0x48}, // PARTNUMBER
{CC112X_PARTVERSION , 0x21}, // PARTVERSION
{CC112X_RX_STATUS , 0x10}, // RX_STATUS
{CC112X_XOSC_TEST1 , 0x3C}, // XOSC_TEST1
};
const cc112xRegister_t rfSettings_WOR[]={
{CC112X_SETTLING_CFG , 0x1B}, // SETTLING_CFG
{CC112X_WOR_CFG1 , 0x08}, // WOR_CFG1
{CC112X_WOR_CFG0 , 0x26}, // WOR_CFG0
{CC112X_WOR_EVENT0_MSB, 0x24}, // WOR_EVENT0_MSB
{CC112X_WOR_EVENT0_LSB, 0xef}, // WOR_EVENT0_LSB /
{CC112X_RFEND_CFG1 , 0x0F}, // RFEND_CFG1
{CC112X_RFEND_CFG0 , 0x0C}, // RFEND_CFG0
};