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.

CC1200: C1200 when configured with RF Sniff Mode does not receive any data

Part Number: CC1200
Other Parts Discussed in Thread: TEST

Hi,

I am configuring cc1200 in Sniff mode (eWOR with RX Termination on PQT) with the below configuration:

  {CC1200_IOCFG3,            0x06},
  {CC1200_IOCFG2,            0x3B},
  {CC1200_IOCFG0,            0x38},
  {CC1200_SYNC3,             0xF0},
  {CC1200_SYNC2,             0xCC},
  {CC1200_SYNC1,             0xF0},
  {CC1200_SYNC0,             0xCC},
  {CC1200_SYNC_CFG1,         0xA8},
  {CC1200_SYNC_CFG0,         0x13},
  {CC1200_DEVIATION_M,       0x68},
  {CC1200_MODCFG_DEV_E,      0x04},
  {CC1200_DCFILT_CFG,        0x26},
  {CC1200_PREAMBLE_CFG0,     0x8A},
  {CC1200_PREAMBLE_CFG1,     0x28},
  {CC1200_IQIC,              0x00},
  {CC1200_CHAN_BW,           0x82},
  {CC1200_MDMCFG1,           0x42},
  {CC1200_MDMCFG0,           0x05},
  {CC1200_SYMBOL_RATE2,      0x7F},
  {CC1200_SYMBOL_RATE1,      0x75},
  {CC1200_SYMBOL_RATE0,      0x10},
  {CC1200_AGC_REF,           0x2A},
  {CC1200_AGC_CS_THR,        0x01},
  {CC1200_AGC_CFG1,          0x16},
  {CC1200_AGC_CFG0,          0x84},
  {CC1200_FIFO_CFG,          0x78},
  {CC1200_FS_CFG,            0x12},
  {CC1200_PKT_CFG2,          0x00},
  {CC1200_PKT_CFG1,          0x00},
  {CC1200_PKT_CFG0,          0x20},
  {CC1200_PA_CFG0,           0x55},
  {CC1200_PKT_LEN,           0xFF},
  {CC1200_IF_MIX_CFG,        0x18},
  {CC1200_TOC_CFG,           0x03},
  {CC1200_MDMCFG2,           0x00},
  {CC1200_FREQ2,             0x5B},
  {CC1200_FREQ1,             0x99},
  {CC1200_FREQ0,             0x99},
  {CC1200_IF_ADC1,           0xEE},
  {CC1200_IF_ADC0,           0x10},
  {CC1200_FS_DIG1,           0x07},
  {CC1200_FS_DIG0,           0xAB},
  {CC1200_FS_CAL1,           0x40},
  {CC1200_FS_CAL0,           0x0E},
  {CC1200_FS_DIVTWO,         0x03},
  {CC1200_FS_DSM0,           0x33},
  {CC1200_FS_DVC0,           0x17},
  {CC1200_FS_PFD,            0x00},
  {CC1200_FS_PRE,            0x6E},
  {CC1200_FS_REG_DIV_CML,    0x1C},
  {CC1200_FS_SPARE,          0xAC},
  {CC1200_FS_VCO0,           0xB5},
  {CC1200_IFAMP,             0x0D},
  {CC1200_XOSC5,             0x0E},
  {CC1200_XOSC1,             0x03},
  {CC1200_PARTNUMBER,        0x20},
  {CC1200_SERIAL_STATUS,     0x08},
  {CC1200_WOR_CFG0,          0x20},
  {CC1200_WOR_CFG1,          0x08},
  {CC1200_WOR_EVENT0_MSB,    0x00},
  {CC1200_WOR_EVENT0_LSB,    0x67},
  {CC1200_RFEND_CFG0,        0x04},
  {CC1200_RFEND_CFG1,        0x0F},
  {CC1200_FS_VCO4,           0x13},
  {CC1200_FS_VCO2,           0x64},
  {CC1200_FS_VCO1,           0xAC}

With this configuration in our custom board, I am not able to receive any packets.

So, the same configuration, i tried in smart RF studio and with that i am able to receive all the packets transmitted from another smart RF device.

Could you please guide me, if i need to change any configuration or if there is any way i can check the radio state and confirm that its going from sniff mode to RX after timeout.

  • Since this is a custom board: Have you verified the conducted RX and TX performance of the board before you have tested sniff mode?

    Does that mean that you control your custom board using SmartRF Studio and it works?

  • Hi,

    To answer your questions-

    1. Before implementing sniff mode, I have successfully performed RX and TX on our custom board without sniff mode.

    2. No, what I meant is, when I use the same configuration on the Eval Board (CC1200 with Msp430) using smart RF studio, i am able to receive packets in sniff mode, whereas with the same config , custom board doesnt work when run in debug mode on MCUXpresso IDE(smart RF is not used here for RF communication on custom board).

  • You are not setting any sniff mode registers in the register dump you are showing, and you are not using any of the standard data rates etc. from SmartRF Studio.

    This is not Sniff mode settings exported from SmartRF Studio.

    Where does the posted settings come from? How have they been generated?

    Siri

  • The register settings are generated by us according to client requirement for our custom board.

    As per my understanding  below are the sniff mode registers - 

      {CC1200_WOR_CFG0,                    0x20},
      {CC1200_WOR_CFG1,                    0x08},
      {CC1200_WOR_EVENT0_MSB,    0x00},
      {CC1200_WOR_EVENT0_LSB,     0x67},
      {CC1200_RFEND_CFG0,                0x04},
      {CC1200_RFEND_CFG1,                0x0F},

    And the same register dump(mentioned at first), we are importing in SmartRF studio to run on eval board, on which it works correctly

  • Please provide the RF parameters etc. , packet format, etc. that has lead to these settings. I cannot go through each register manually to try to understand what you have tried to configured.

    What is your data rate, RF frequency, deviation , RX Filter BW, preamble length, CS threshold, sync word, packet format etc.

  • Sure. Below are the details -

    data rate - 19.2kbps

    freq dev - 55kHz

    filter bw - 208.33kHz

    preamble length - 8 bytes of 0xAA

    sync word - 0xF0 0xCC 0xF0 0xCC (32 bits)

    packet format - variable packet length

    CRC check is disabled, address check is disabled, packet length check is disabled.

    Since we are using RF sniff mode using eWOR with RX termination on PQT, I guess CS threshold is not an important parameter.

  • With the above RF parameters, SmartRF Studio gives me the following settings for sniff mode:

    // Address Config = No address check 
    // Bit Rate = 19.2 
    // Carrier Frequency = 867.999878 
    // Deviation = 54.931641 
    // Device Address = 0 
    // Manchester Enable = false 
    // Modulation Format = 2-GFSK 
    // Packet Bit Length = 0 
    // Packet Length = 255 
    // Packet Length Mode = Variable 
    // RX Filter BW = 208.333333 
    // Symbol rate = 19.2 
    // Whitening = false 
    
    static const registerSetting_t preferredSettings[]= 
    {
      {CC120X_IOCFG2,            0x13},
      {CC120X_IOCFG0,            0x06},
      {CC120X_SYNC3,             0xF0},
      {CC120X_SYNC2,             0xCC},
      {CC120X_SYNC1,             0xF0},
      {CC120X_SYNC0,             0xCC},
      {CC120X_SYNC_CFG1,         0xA9},
      {CC120X_DEVIATION_M,       0x68},
      {CC120X_MODCFG_DEV_E,      0x0C},
      {CC120X_PREAMBLE_CFG0,     0x8A},
      {CC120X_IQIC,              0x48},
      {CC120X_CHAN_BW,           0x82},
      {CC120X_MDMCFG1,           0x42},
      {CC120X_MDMCFG0,           0x05},
      {CC120X_SYMBOL_RATE2,      0x7F},
      {CC120X_SYMBOL_RATE1,      0x75},
      {CC120X_SYMBOL_RATE0,      0x10},
      {CC120X_AGC_REF,           0x2A},
      {CC120X_AGC_CS_THR,        0xF7},
      {CC120X_AGC_CFG1,          0x00},
      {CC120X_AGC_CFG0,          0x90},
      {CC120X_FIFO_CFG,          0x00},
      {CC120X_SETTLING_CFG,      0x03},
      {CC120X_FS_CFG,            0x12},
      {CC120X_WOR_CFG0,          0x20},
      {CC120X_WOR_EVENT0_LSB,    0x6D},
      {CC120X_PKT_CFG2,          0x00},
      {CC120X_PKT_CFG0,          0x20},
      {CC120X_RFEND_CFG0,        0x0C},
      {CC120X_PA_CFG0,           0x55},
      {CC120X_PKT_LEN,           0xFF},
      {CC120X_IF_MIX_CFG,        0x1C},
      {CC120X_TOC_CFG,           0x03},
      {CC120X_MDMCFG2,           0x02},
      {CC120X_FREQ2,             0x56},
      {CC120X_FREQ1,             0xCC},
      {CC120X_FREQ0,             0xCC},
      {CC120X_IF_ADC1,           0xEE},
      {CC120X_IF_ADC0,           0x10},
      {CC120X_FS_DIG1,           0x07},
      {CC120X_FS_DIG0,           0xAF},
      {CC120X_FS_CAL1,           0x40},
      {CC120X_FS_CAL0,           0x0E},
      {CC120X_FS_DIVTWO,         0x03},
      {CC120X_FS_DSM0,           0x33},
      {CC120X_FS_DVC0,           0x17},
      {CC120X_FS_PFD,            0x00},
      {CC120X_FS_PRE,            0x6E},
      {CC120X_FS_REG_DIV_CML,    0x1C},
      {CC120X_FS_SPARE,          0xAC},
      {CC120X_FS_VCO0,           0xB5},
      {CC120X_IFAMP,             0x09},
      {CC120X_XOSC5,             0x0E},
      {CC120X_XOSC1,             0x03},
      {CC120X_PARTNUMBER,        0x20},
      {CC120X_PARTVERSION,       0x11},
      {CC120X_MODEM_STATUS1,     0x10},
    };

    The IOCFG register is modified based on how my sniff application is implemented.

    Comparing my settings with what you sent, I see several difference, and I have no idea why these changes are made and what they might do for the RF performance.

    Using the exported Studio setting into the sniff mode example found here in swrc274, I was able to receive all packets sent with the same settings from SmartRF Studio.

    Siri

  • in the above compared register settings, the values are set according to client requirement since some backward compatibility issues are there, except PREAMBLE_CFG1 register. the value for PREAMBLE_CFG1 should be 0x28 as 8bytes of 0xAA is required.Also, RFEND_CFG0 is required to be 0x04 since we dont want antenna diversity feature and PKT_CFG1 is required to be 0x00 since we dont want any CRC check or status bytes appended

    The main issue is like:

    the register dump i have attached at first, that when we import in eval board and receive in smart RF, we are able to do reception. I ma not sure why the register settings dont work for our custom board.could you help me in understanding the same? Or can you tell me how the RX FIFO is read in the eval board, then i can try reading the FIFO in same way.

    Currently are reading the RX FIFO at falling edge of GPIO3 which is configured as PKT_SYNC_RXTX (i.e at the end of the packet). But what I am observing is, this interrupt itself doesnt come up even once when operating in sniff mode.

    also, how can we confirm that our RF is in sniff mode

  • I tested you settings in the sniff mode example found here:

    https://www.ti.com/lit/zip/swrc274

    I only modified the GPIO signals to fit the implementation in the code, disabled autocal since this is recommended when doing sniff mode, and also used CRC, since I do not have any code to check for OK packets manually.

    Settings are below:

    static const registerSetting_t preferredSettings[]= 
    {
      {CC120X_IOCFG2,            0x13},// Application spesific
      {CC120X_IOCFG0,            0x06},// Application spesific
      {CC120X_SYNC3,             0xF0},
      {CC120X_SYNC2,             0xCC},
      {CC120X_SYNC1,             0xF0},
      {CC120X_SYNC0,             0xCC},
      {CC120X_SYNC_CFG1,         0xA8},
      {CC120X_SYNC_CFG0,         0x13},
      {CC120X_DEVIATION_M,       0x68},
      {CC120X_MODCFG_DEV_E,      0x04},
      {CC120X_DCFILT_CFG,        0x26},
      {CC120X_PREAMBLE_CFG0,     0x8A},
      {CC120X_IQIC,              0x00},
      {CC120X_CHAN_BW,           0x82},
      {CC120X_MDMCFG1,           0x42},
      {CC120X_MDMCFG0,           0x05},
      {CC120X_SYMBOL_RATE2,      0x7F},
      {CC120X_SYMBOL_RATE1,      0x75},
      {CC120X_SYMBOL_RATE0,      0x10},
      {CC120X_AGC_REF,           0x2A},
      {CC120X_AGC_CS_THR,        0x01},
      {CC120X_AGC_CFG1,          0x16},
      {CC120X_AGC_CFG0,          0x84},
      {CC120X_SETTLING_CFG,      0x03},// Application spesific
      {CC120X_FIFO_CFG,          0x78},
      {CC120X_FS_CFG,            0x12},
      {CC120X_WOR_CFG0,          0x20},
      {CC120X_WOR_EVENT0_LSB,    0x67},
      {CC120X_PKT_CFG2,          0x00},
      {CC120X_PKT_CFG1,          0x03},// Application spesific
      {CC120X_PKT_CFG0,          0x20},
      {CC120X_RFEND_CFG0,        0x04},
      {CC120X_PA_CFG0,           0x55},
      {CC120X_PKT_LEN,           0xFF},
      {CC120X_IF_MIX_CFG,        0x18},
      {CC120X_TOC_CFG,           0x03},
      {CC120X_MDMCFG2,           0x00},
      {CC120X_FREQ2,             0x5B},
      {CC120X_FREQ1,             0x99},
      {CC120X_FREQ0,             0x99},
      {CC120X_IF_ADC1,           0xEE},
      {CC120X_IF_ADC0,           0x10},
      {CC120X_FS_DIG1,           0x07},
      {CC120X_FS_DIG0,           0xAB},
      {CC120X_FS_CAL1,           0x40},
      {CC120X_FS_CAL0,           0x0E},
      {CC120X_FS_DIVTWO,         0x03},
      {CC120X_FS_DSM0,           0x33},
      {CC120X_FS_DVC0,           0x17},
      {CC120X_FS_PFD,            0x00},
      {CC120X_FS_PRE,            0x6E},
      {CC120X_FS_REG_DIV_CML,    0x1C},
      {CC120X_FS_SPARE,          0xAC},
      {CC120X_FS_VCO4,           0x13},
      {CC120X_FS_VCO2,           0x64},
      {CC120X_FS_VCO1,           0xAC},
      {CC120X_FS_VCO0,           0xB5},
      {CC120X_IFAMP,             0x0D},
      {CC120X_XOSC5,             0x0E},
      {CC120X_XOSC1,             0x03},
    };

    I received all packets without problems.

    I have no idea how you have implemented your code, so I cannot tell why it is not working.

    A good idea to debug sniff mode applications is to output different signals on the available GPIOs to verify that the radio changes mode from sleep to RX as expected.

    LNA_PD can be used to see when the device is in RX mode and CHIP_RDYn can be used to monitor if the crystal is running or not (XOSC off in SLEEP).

    Siri

  • After initialization of modules, I am configuring the GPIO3 to get end of packet interrupt and them i am settings the registers with values mentioned. then i am doing the below -

       //Enable RF IDLE mode to calibrate RC Oscillator
        TrxSpiCmdStrobe(CC1200_SIDLE);
        //Calibrate the 40kHz RC Oscillator
        CalibrateRCOsc();

        while(1)
        {
            TrxSpiCmdStrobe(CC1200_SWOR);
            while(Test_irqFlag != 1);
            Test_irqFlag = 0;
            CC120xSpiReadReg(CC1200_NUM_RXBYTES, &rxBytes);
            CC120xSpiFIFORead(RFBuffer, rxBytes);
            for(byte i = 0; i< rxBytes; i++)
            {
                printf("%x ", RFBuffer[i]);
            }
        }

    This is set to 1 in the GPIO3 interrupt handler.

    But since this interrupt itself i am not getting, my code is stuck in the while loop.

    I probed GPIO0 configuring it as Event1 for both custom board and eval board. Below is the waveform captured.

    The waveforms dont match except the portion when the eval board is receiving some data.

    I am not sure what the waveforms denote. Could you please explain it to me?

  • Have you tried your settings in normal RX and not sniff mode, and verified that you are actually able to receive all packet then?

    Have you verified that your transmitter is sending a long enough preamble (min 8 bytes)

    I am not able to help you in any other way than providing you with a sniff mode example that actually works with SmartRF Studio as the transmitter and your setting on the receiver side (with the modifications I have mentioned).

    The code example can be found here:

    https://www.ti.com/lit/zip/swrc274

    I have made some plots that I got when running this code. I added the following debug signals:

    RX Side:

    IOCFG2 = 0x13:               PKT_CRC_OK (used by the application)

    IOCFG0 = 0x38:               Event 1

    IOCFG3 = 0x58:               LNA_PD Inverted (Low in SLEEP, High in RX)

    TX Side:

    IOCFG3 = 0x59:               PA_PD Inverted (Low in SLEEP, High in TX)

    IOCFG2 = 0x06:               PKT_SYNC_RXTX

     

    When transmitting packets with SmartRF Studio (modified with your RF parameters, sync word, and preamble length) it looks like this:

    Siri

  • Hi,

    I am still stuck on this issue.

    Since I could not get any output using my custom application, i am using the configuration given in demo application (https://www.ti.com/lit/zip/swrc274) along with the same code flow.

    With that too I am observing the RF current is coming as ~30mA. I have attached a snap of that current waveform for your reference.

    could you tell me what might be going wrong or what i can check to make this work.

  • Unfortunately, I do not know how I can help you as I have provided you both with settings and code that work.

    Your current plot does not tell me much. The peak RX current should be in in the range 19-23 mA when in RX, so that most of the time the current consumption of the device should be around 0.5 uA.

    Are you able to receive all packets OK when not using Sniff mode?

    If you are, you simply have a timing issue, and you need to find a way to output some debug signals so that you can figure our what your code is doing.

    Siri

  • yes without sniff mode i am able to receive all packets properly

  • Then you need to verify that the radio goes in and out of the SLEEP and RX as intended. If your HW is OK and the RF PHY settings are OK, there is no reasons why you should not receive anything if your receiver is in RX while your transmitter is transmitting.

    Siri