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.

CCS/SIMPLICITI: CC2500 Strength of RF link

Part Number: SIMPLICITI

Tool/software: Code Composer Studio

I am using EZ430-RF2500 and am very new to RF communication and SimpliciTI. From my understanding of the given example code, an End Device radio goes through three steps - join, link and TX. I need to make some decisions in the End Device based on the strength of its RF link with the Access Point (if at all that makes any sense). But since the End Device is never in RX mode, we cannot read the RSSI. Is there any other parameter that I can read from the "join" and the "link" stages to get the strength of the link? I see in the MRFI_Init function inside mrfi_radio.c there is a step of generating a random seed using the RSSI value (as shown below). Can this RSSI value give any indication?

  /* Generate Random seed:
   * We will use the RSSI value to generate our random seed.
   */

  /* Put the radio in RX state */
  mrfiSpiCmdStrobe( SRX );

  /* delay for the rssi to be valid */
  MRFI_RSSI_VALID_WAIT();

  /* use most random bit of rssi to populate the random seed */
	{
		uint8_t i;
		for(i=0; i<16; i++)
		{
			mrfiRndSeed = (mrfiRndSeed << 1) | (mrfiSpiReadReg(RSSI) & 0x01);  		
		}
	}

  • I am not very familiar with the details of SimpliciTI, but in general there are two ways to obtain the RSSI.

    1) You can look at the RSSI appended to a packet if your device has been in RX and received data (I think PKTCTRL1.APPEND_STATUS = 1) in SimpliciTI.

    2) you can put the device in RX (strobe SRX), wait for the RSSI to be valid and then read the RSSI register:

    mrfiSpiCmdStrobe(SRX);
    
    MRFI_RSSI_VALID_WAIT();
    
    mrfiSpiReadReg(RSSI);

    BR

    Siri

  • Thank you for your reply Siri!

    I notice in the project (SEH Sensor Monitor) that the three functions - smplStatus_t nwk_ping(linkID_t lid), smplStatus_t nwk_join(void) and smplStatus_t nwk_link(linkID_t *lid) have something similar inside them, as shown below.

          NWK_CHECK_FOR_SETRX(radioState);
          NWK_REPLY_DELAY();
          NWK_CHECK_FOR_RESTORE_STATE(radioState);

    Can I read the RSSI value after the NWK_REPLY_DELAY() using mrfiSpiReadReg(RSSI)? If yes, can you please suggest how to get that value on the application layer using the SMPL_Link(&linkID1) function which only returns the status? Thanks again!

  • Thank you very much Siri.

    I am able to read the rssi value in the "link" step. This brings me back to my original question: does this rssi value indicate the link strength? I have tried varying the distance between the End Device (ED) and the access point (AP) including some obstructions, but the change in rssi value for the "link" is not persistent -- it either does not change at all, or changes a little bit, sometimes in a wrong way (example values are -102.4, -97.28, -99.84 etc). Isn't this garbage? How do I know the strength of my link?

  • What do you mean by the "strength" of the link?

    RSSI is the "received signal strength indicator" and varies by a lot of factors: The transmitter power, the distance between RX and TX, any obstacles between TX and RX (like you!), multipath...

    As such it can very quite a bit. In your case, you probably need to see what RSSI causes errors in reception (i.e., the BER) add 10 dB or so to that and use that as a "floor value" as a warning that your link is close to being compromised.

    For some boards TI offers "BER" measuring examples like this:
    dev.ti.com/.../rfPacketErrorRate_README.html

    If they don't have one for your board, you can probably adapt this one.