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.

CC1310: The RSSI value received from the RF_cmdPropCs and RF_getRssi () is different

Part Number: CC1310

When we measured the RSSI value, the value received from the RF_cmdPropCs and RF_getRssi () statements, it had a small different.
When measuring RSSI at (-30 + 7) dBm, (-70 + 8) dBm, (-95 +8) dBm, (-115 + 9) dBm:
(in the circuit we have mounted an amplifier circuit about 7-8dB)
Carrier cmd:     -28.1dBm, -68.2dBm, -93.2dBm, -115.4dBm
Get RSSI cmd: -27.3dBm, 67.4dBm, -92.1dBm, -108.0dBm
Test method: let LED light when RSSI value read > test threshold.

Our code:

1. RF_cmdPropCs:

1.1. void API_RF_Carrier (int8_t RSSI_level)

{

// Carrier
RF_cmdPropCs.status = IDLE;
RF_cmdPropCs.condition.rule = 0x1; // run next command
RF_cmdPropCs.condition.nSkip = 0x0; // same
RF_cmdPropCs.csConf.busyOp = 0x1; // end cs if busy
RF_cmdPropCs.csConf.idleOp = 0x0; // continue if idle
RF_cmdPropCs.rssiThr = RSSI_level;
RF_cmdPropCs.csEndTrigger.triggerType = TRIG_REL_START;
RF_cmdPropCs.csEndTime = RF_convertUsToRatTicks (CS_TIMEOUT_5MS);

RF_runCmd (rfHandle, (RF_Op *) & RF_cmdPropCs, RF_PriorityNormal, NULL, 0);
if (RF_cmdPropCs.status == PROP_DONE_IDLE)
{
LED_CA_OFF;
}
else if ((RF_cmdPropCs.status == PROP_DONE_BUSY) || (RF_cmdPropCs.status == PROP_DONE_BUSYTIMEOUT))
{
LED_CA_ON;
}
else
{
RF_resetRF ((uint32_t) RF_cmdPropCs.status);
}

}

1.2. in main function

while (1)
 {
          API_RF_Carrier (RSSI_level);
        Delay (100);
  }

2. RF_getRssi:

2.1. void API_RF_CarrierKanDo (int8_t RSSI_level)
{
        static int8_t rssiValue;

rssiValue = RF_getRssi (rfHandle);
if (rssiValue == RF_GET_RSSI_ERROR_VAL) // Error
{
          // LED_CA_OFF;
}
else
{
       if (rssiValue> = RSSI_level)
      {
              LED_CA_ON;
       }
        else
       {
            LED_CA_OFF;
      }
}

}

2.2.   in main function

Start_RX ();

while (1)

{

      API_RF_CarrierKanDo (RSSI_level);

       Delay (100);

}


1. We want to confirm that the difference in RSSI value when received in these two ways is normal, or unusual?

2. What is the cause?

3. Which of the two methods in which method will give the RSSI value closer to the actual value? (And how to read the RSSI value more precisely?)

  • Hi,

    I'm not sure I follow your test method exactly, how did you verify the numbers for the CS command, it seems you simply went by status?
    The RF_getRSSI() API gets an immediate snap shot from the radio (this assumes that the radio is already put into RX BEFORE calling the API), I would assume that your RSSI varies over time which means you can't make two exactly equal measurements like you want to do (only very similar assuming you fully control the RF environment).

    Both cases give you valid RSSI values, it is just a value sampled at different times. As for which to use, I would suggest you use the approach what best fit your application. The CS command could be conditionally chained with other commands which makes it a good fit for CCA/LBT type of applications.
  • Hi, 

    I use a transmitter to test, it can adjust the transmit power. I increase the transmit power until the LED is "stable" (not blink).
    In the function Start_RX (); I have a 5ms delay for RF stability.
    I test at baudrate: 100kbps, carrier wave: 922.0MHz.
    When using RF_getRSSI () API, while debugging, the  RSSI varies over time (may be the noise of the envirement). Maybe when using RF_getRSSI () API, the received RSSI value will be more variable, and therefore the level of "stable" bright LED will be different???
    We will check the value of RF_getRSSI () later ,see if it changes a lot.

  • Hi,

    You got any new updates on the subject?
  • Hi,

    After I changed the logic of the program into:

    2. RF_getRssi:
             while (1)
             {
                 WATCH_DOG_ON;
                 rssiCheckTime = 5; // decrease by 1ms in the callback of timer 1ms
                 isBusy = false;
                 while (rssiCheckTime> 0) // check rssi in 5ms
                 {
                     rssiValue1 = RF_getRssi ();
                     if (rssiValue1> = RSSI_level)
                     {
                         isBusy = true;
                         break;
                     }
                 }
                
                 if (isBusy)
                 {
                     LED_CA_ON;
                 }
                 else
                 {
                     LED_CA_OFF;
                 }
                
                 API_Timer_WaitBlocking (100);
             }
    I realized that there was still a difference but not much. This difference may be due to logic processing.
    The data is:
    Setting value: -30 + 7, -70 + 8, -100 + 7, -115 + 9
    Carrier cmd: -29.0dBm, -69.0dBm, -100.2dBm, -114.2dBm
    Get RSSI cmd: -28.9dBm, -69.1dBm, -100.7dBm, -116.7dBm

    Thank for your suggestion.