RSSI (Received Signal Strength Indicator) measurement is continuously running and the current result is stored in a HW register after the Rx is started. This register gets updated after each measurement window.
When the Rx is started the first RSSI result is not available immediately. The first RSSI acquisition time can be split into three parts:
As stated 1) depends on the starting state and also on a RAIL configuration that explicitly sets state transition times. More on this you can read here: RAIL Tutorial: Time, timestamping and Scheduling
Contribution 2) depends on the PHY configuration (and varies with PHY configuration). This time is mainly driven by the delay through the channel filter so as a rule of thumb it scales inversely proportionally with the configured channel bandwidth. For a typical FSK modulation where the channel filter roughly equals the signal bandwidth itself this time is ~ 3-4 Ts, where Ts is the symbol time.
RSSI measurement is held off for some amount of time to make sure no false RSSI readings are reported due to partial signal propagation. This time is configurable on the radio configurator advanced AGC section (AGC Settling Delay). Note that this parameters primarily adjusts the AGC (Automatic Gain Control) time schedule so it is recommended not to be tampered with as the AGC may go unstable or converge slowly.
Also note that this time period may be extended (by as much as 2x) for gain adjustments in the front end. It means that this time period depends on the signal level presented to the Rx. Typically you get the fastest response time around sensitivity level and may experience longer acquisition times above ~ sensitivity + 20 dB.
Contribution 3) is the RSSI measurement itself. Once the “blanking” period explained in point2) expires the first RSSI measurement commences. The measurement window through which the RSSI samples are averaged can be set on the configurator GUI with control RSSI Update Period. (Measurement and update period = 2^RSSI Update Period [Ts].) This control sets the length of the measurement window as well as the measurement update period. A result is reported after each back to back measurement window and stored in a HW register. Each result represents the average reading of the preceding measurement window. The HW register stores an invalid value until the 1st result gets written into it. (This is the invalid value RAIL also reports if a measurement results is not available, i.e., the device is not in Rx state or a valid result has not arrived yet in Rx state.)
As an example take a 100 kbps 2GFSK PHY with 50 kHz deviation and a 200 kHz channel filter with an RSSI Update Period of 1 meaning a 2Ts window. Suppose the starting state is idle. The time contributions will have the following values
** Note that the state transition time may also be configured to as fast as possible: from idle to Rx this typically means 60-80 us. In this mode the state transition time is not consistent. i.e., it varies from Rx start to Rx start. The shortest consistent state transition time from idle state to Rx state is 100 us. Look for RAIL_StateTiming_t for more details.
The sum is ~ 150 us most of which is taken up by the state transition itself. If we take a much lower DR PHY as an example you may see that the RSSI acquisition time will mostly be driven by the symbol time.
If you are not happy with the RSSI acquisition time as the whole operation burns too much energy here is the tricks (and tradeoffs) you may apply to make it faster. As the state transition time is a given these will have the most benefits at low data rate PHYs.
Below are some explanations of the RAIL RSSI related APIs:
RAIL_GetRssi(): When this function is called it simply returns the current value stored in the HW RSSI register. It does not initiate a new measurement. It returns an invalid value if the HW register has an invalid value in it as explained above.
RAIL_StartAverageRssi() .This function can only be called from idle state. This function makes the radio transition to Rx state and measure one RSSI value with the exact measurement window given to it. This function reconfigures the radio to align the HW RSSI measurement window to the desired averaging time. This means that during the measurement packets cannot be received. To this end signal detection is disabled during the operation of this function. Once the RSSI measurement is acquired the configuration is restored and the radio returns to idle state. The HW supports a finer adjustment on the measurement window which is not exposed on the configurator GUI – this function makes use of this method to match the desired measurement window as accurate as possible from HW. The resolution of window adjustment is ~ Ts/10 – Ts/5. So taking the 100 kbps example the resolution will be between 1us – 2us. The exact resolution depends on the PHY configuration. Note that based on the operations of this API there will be a maximum time limit (dependent on the PHY) the API is capable of supporting. If a longer time period is requested RAIL_STATUS_INVALID_PARAMETER is returned.