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.

Reading RSSI status register cc2500

Other Parts Discussed in Thread: CC2500

Hello,

before I start I'd like to say that I have seen a thread that talked about this problem:

http://e2e.ti.com/support/wireless_connectivity/f/155/t/247222.aspx

but I think my case here might be different

so, I am trying to build a spectrum sensor, I don't need to do any demodulation, I just need the radio chip to stay at infinity in RX mode, reading RSSI values at a specified carrier frequency

I used a module called CCRF click that features CC2500 with a PCB trace antenna:

http://www.mikroe.com/click/ccrf/

and I interfaced it with  MCU ATxmega128A1 featured on this development kit

http://www.atmel.com/tools/xmega-a1xplained.aspx

here are the settings I used:

 

RF_SETTINGS rfSettings = {
0x29,   // IOCFG2    GDO2 output pin configuration.
0x2E,   // IOCFG1    GDO1 output pin configuration.
0x06,   // IOCFG0D   GDO0 output pin configuration. //06
0x07,   // FIFOTHR   RXFIFO and TXFIFO thresholds.
0xD3,   // SYNC1     Sync word, high byte
0x91,   // SYNC0     Sync word, low byte
0x3D,   // PKTLEN    Packet length.
0x04,   // PKTCTRL1  Packet automation control.   //06
0x12,   // PKTCTRL0  Packet automation control.
0x00,   // ADDR      Device address.
0x03,   // CHANNR    Channel number. //00
0x0A,   // FSCTRL1   Frequency synthesizer control. //0A
0x00,   // FSCTRL0   Frequency synthesizer control.
0x5D,   // FREQ2     Frequency control word, high byte.
0x44,   // FREQ1     Frequency control word, middle byte.
0x0F,   // FREQ0     Frequency control word, low byte.
0x2D,   // MDMCFG4   Modem configuration.
0x3B,   // MDMCFG3   Modem configuration.
0xF0,   // MDMCFG2   Modem configuration.
0x23,   // MDMCFG1   Modem configuration.
0x3B,   // MDMCFG0   Modem configuration.
0x01,   // DEVIATN   Modem deviation setting (when FSK modulation is enabled).
0x07,   // MCSM2     Main Radio Control State Machine configuration.
0x30,   // MCSM1     Main Radio Control State Machine configuration.
0x18,   // MCSM0     Main Radio Control State Machine configuration.
0x1D,   // FOCCFG    Frequency Offset Compensation Configuration.
0x1C,   // BSCFG     Bit synchronization Configuration.
0xC7,   // AGCCTRL2  AGC control.
0x00,   // AGCCTRL1  AGC control.
0xB0,   // AGCCTRL0  AGC control.
0x87,   // WOREVT1   High event 0 timeout.
0x6B,   // WOREVT0   Low event 0 timeout.
0xF8,   // WORCTRL   Wake On Radio control
0xB6,   // FREND1    Front end RX configuration.
0x10,   // FREND0    Front end TX configuration.
0xEA,   // FSCAL3    Frequency synthesizer calibration.
0x0A,   // FSCAL2    Frequency synthesizer calibration.
0x00,   // FSCAL1    Frequency synthesizer calibration.
0x11,   // FSCAL0    Frequency synthesizer calibration.
0x41,   // RCCTRL1   RC oscillator configuration.
0x00,   // RCCTRL0   RC oscillator configuration.

I connected the corresponding four SPI pins and GDO2 through wires, I use GDO2 to check for chip_ready signal. I programmed the registers successfully and I read them back to make sure of that. I stropped the RX resister,  and read the MARCSTATE status register to make sure that the radio chip is in RX mode

I read the RSSI status register and applied the algorithm from Design Note DN505 to get the RSSI in dBm

I read RSSI every 40 u Sec, data rate is 2.4 KBaud

here is the problem that I am having:

RSSI readings are always high and incorrect, sometimes i always get values (-49 to -52) dBm , or (-17 to -23) dBm, even if I am in an anechoic chamber where there are no signals at all, I would still get such values.

  • See http://e2e.ti.com/support/wireless_connectivity/f/155/t/17252.aspx to see if the code helps you out. Not sure why you are using a GDO pin for the chip_ready since this is available on SO (See 10.1 in http://www.ti.com/lit/ds/symlink/cc2500.pdf)

    It sounds like you either:

    - read the RSSI when not valid

    - Read the wrong register (address)

    - do the conversion incorrectly

  • my first worry was the configurations, are they correct?

    I am reading address "0x34" thats RSSI, btw why does the data sheet also put (0xF4) between quotations?

    here is my conversion algorithm, its taken from the related application note:

    volatile uint8_t rssi_dec;
    volatile int16_t rssi_dBm;
    volatile uint8_t rssi_offset = 72;
    
    rssi_dec = (uint8_t) RfSpiReadStatus(CCxxx0_RSSI);				
    if (rssi_dec >= 128)
    rssi_dBm = (int16_t)((int16_t)( rssi_dec - 256) / 2) - rssi_offset;
    else
    rssi_dBm = (rssi_dec / 2) - rssi_offset;
    
    printf("RSSI = %d dbm\n\r",rssi_dBm);

    this leaves us with the possibility of invalid RSSI readings, what can cause that?