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.

CC1120 sniff mode, radio settings for 2 GFSK symbolrate 100 ksps

Other Parts Discussed in Thread: CC1120, CC1190

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

};

  • Hi

    Hi

    There is no need to strobe SRX when using RX Sniff mode. The radio will automatically enter RX when an SWOR strobe has been issued. Please take a look at the RX Sniff Mode Application’s report (http://www.ti.com/lit/swra428) and the corresponding code examples. 

    The RX Sniff mode settings from SmartRF Studio is shown below:

    // Carrier frequency = 868.000000

    // Deviation = 82.763672

    // Manchester enable = true

    // Address config = No address check

    // Packet length = 255

    // Packet length mode = Variable

    // Symbol rate = 100

    // TX power = 15

    // PA ramping = true

    // Modulation format = 2-GFSK

    // RX filter BW = 200.000000

    // Performance mode = High Performance

    // Whitening = false

    // Bit rate = 50

    // Packet bit length = 0

    // Device address = 0

     

    static const registerSetting_t preferredSettings[]=

    {

    {CC1120_IOCFG3, 0xB0},

    {CC1120_IOCFG2, 0x06},

    {CC1120_IOCFG1, 0xB0},

    {CC1120_IOCFG0, 0x40},

    {CC1120_SYNC_CFG1, 0x07},

    {CC1120_DEVIATION_M, 0x53},

    {CC1120_MODCFG_DEV_E, 0x0F},

    {CC1120_DCFILT_CFG, 0x04},

    {CC1120_PREAMBLE_CFG1, 0x18},

    {CC1120_FREQ_IF_CFG, 0x00},

    {CC1120_IQIC, 0x00},

    {CC1120_CHAN_BW, 0x01},

    {CC1120_MDMCFG1, 0x66},

    {CC1120_MDMCFG0, 0x05},

    {CC1120_SYMBOL_RATE2, 0xA9},

    {CC1120_SYMBOL_RATE1, 0x99},

    {CC1120_SYMBOL_RATE0, 0x99},

    {CC1120_AGC_REF, 0x3C},

    {CC1120_AGC_CS_THR, 0x0C},

    {CC1120_AGC_CFG3, 0x83},

    {CC1120_AGC_CFG2, 0x60},

    {CC1120_AGC_CFG1, 0xA0},

    {CC1120_AGC_CFG0, 0xC0},

    {CC1120_FIFO_CFG, 0x00},

    {CC1120_SETTLING_CFG, 0x03},

    {CC1120_FS_CFG, 0x12},

    {CC1120_WOR_CFG0, 0x20},

    {CC1120_WOR_EVENT0_LSB, 0x3C},

    {CC1120_PKT_CFG0, 0x20},

    {CC1120_RFEND_CFG0, 0x09},

    {CC1120_PA_CFG0, 0x01},

    {CC1120_PKT_LEN, 0xFF},

    {CC1120_IF_MIX_CFG, 0x00},

    {CC1120_TOC_CFG, 0x0A},

    {CC1120_FREQ2, 0x6C},

    {CC1120_FREQ1, 0x80},

    {CC1120_FS_DIG1, 0x00},

    {CC1120_FS_DIG0, 0x5F},

    {CC1120_FS_CAL1, 0x40},

    {CC1120_FS_CAL0, 0x0E},

    {CC1120_FS_DIVTWO, 0x03},

    {CC1120_FS_DSM0, 0x33},

    {CC1120_FS_DVC0, 0x17},

    {CC1120_FS_PFD, 0x50},

    {CC1120_FS_PRE, 0x6E},

    {CC1120_FS_REG_DIV_CML, 0x14},

    {CC1120_FS_SPARE, 0xAC},

    {CC1120_FS_VCO0, 0xB4},

    {CC1120_XOSC5, 0x0E},

    {CC1120_XOSC2, 0x00},

    {CC1120_XOSC1, 0x03},

    };

    From SmartRF Studio (and the app note) you will see that with these settings the minimum number of preamble bytes needed by receiver to run Sniff mode is 11. The CC1120 supports 12 bytes preamble so the transmitter is programmed to send this (PREAMBLE_CFG1.NUM_PREABLE = 0x0B). Running PER test with Studio (receiver is using RX Sniff Mode) the PER is 0 %. I have tested with the boards situated 15 cm apart, both using the antennas following the kit, and the transmitter sending 15 dBm output power. I have also tested long range. Note that SmartRF Studio sets the CS level to -90 dBm, setting the sensitivity limit. This level can off course be lowered.

    BR

    Siri

  • Hi Siri,

    These are settings which I needed, thanks a lot

    I have improved performance of my radio. In the near field (<5 cm) I can receive the rf packets, and also in the far field (> 30 meter) I can receive rf packets.

    Rudolf
  • Hi

    Glad to hear you were able to get it to work. SmartRF Studio is a great tool to use to help generating settings J

    BR

    Siri