RSSI says 80% at 100 meters but you failsafe at 300 meters. That percentage is lying to you — RSSI is a logarithmic scale mapped to a linear display, and the scaling math is almost always wrong by default. Here is how to calibrate RSSI so the number in your OSD actually means something.
RSSI Fundamentals: dBm vs Percentage
RSSI (Received Signal Strength Indicator) is measured in dBm — a logarithmic unit where -30dBm is a strong signal (transmitter next to the receiver) and -110dBm is the noise floor. The problem: Betaflight and most OSD setups display RSSI as a 0-100% value, and the mapping from dBm to percentage is arbitrary unless you calibrate it.
A receiver with a sensitivity of -112dBm (ExpressLRS typical) loses packets around -108dBm. If your RSSI percentage hits 50% at -95dBm and you failsafe at -108dBm, the bottom half of your scale represents only the last 13dBm of usable range — leaving you no warning between “signal degrading” and “failsafe.”
Step 1: Determine How Your Receiver Reports RSSI
Three methods exist, and using the wrong one produces garbage numbers:
Method A — RSSI Channel (AUX channel injection): The receiver outputs RSSI as a PWM value on a dedicated channel. In Betaflight Receiver tab, assign an unused AUX channel (typically AUX8-12) as the RSSI channel. The receiver maps its dBm reading to a 1000-2000μs PWM range. This is the most reliable method because the scaling happens in the receiver firmware.
Method B — RSSI_ADC (analog pad): Legacy analog receivers output RSSI as a 0-3.3V analog signal on a dedicated pad. Requires the RSSI_ADC feature enabled in Betaflight and the correct scaling factor. Rarely used in 2026 — digital receivers have replaced this method.
Method C — Over-the-air via serial protocol: CRSF (Crossfire) and CRSFshot (ELRS) embed RSSI and LQ in the serial telemetry stream. Betaflight reads these directly — no channel mapping needed. Enable set rssi_source = protocol in Betaflight CLI. This method also provides LQ (Link Quality) as a separate value, which is more useful than RSSI for digital links.
Step 2: Calibrate RSSI Scaling
For AUX channel RSSI, the default Betaflight scaling from 1000-2000μs to 0-100% is seldom accurate. The actual correlation: measure RSSI at known distances and calibrate:
- Place the quad 1m from the radio with the transmitter at 25mW
- Note the reported RSSI channel value in Betaflight Receiver tab (e.g., 1950μs)
- Walk to 100m, note the value (e.g., 1750μs)
- Walk to 300m, note the value (e.g., 1550μs)
- Use the Betaflight CLI to set RSSI scale to calibrate 100% to your 1m reading and 0% to your failsafe threshold
For serial protocol RSSI (CRSF/ELRS), the receiver reports RSSI in dBm. Betaflight converts this using rssi_dbm_scale and rssi_dbm_offset:
set rssi_dbm_scale = 100
set rssi_dbm_offset = -130
This maps -130dBm to 100% (perfect signal) and 0dBm to 0% — not useful. Better scaling for ExpressLRS:
set rssi_dbm_scale = 100
set rssi_dbm_offset = -108
This makes -108dBm (near failsafe) = 0% and -8dBm = 100%, matching the usable range.
Step 3: Set OSD Warning Thresholds
| Threshold | Recommended RSSI % | Why |
|---|---|---|
| Warning (Yellow) | 40% | You still have margin — time to assess orientation and consider turning back |
| Critical (Red) | 25% | Immediate action required — turn back or increase altitude for better line-of-sight |
| Failsafe (Radio) | 10-15% | Radio failsafe activates. Set based on real-world range test, not guesswork |
For digital links (CRSF/ELRS), display LQ instead of RSSI as your primary link health indicator. LQ is reported as 0-100 where 100 = no lost packets and <80 = link degrading. RSSI can read 80% while LQ drops to 50% because the RSSI averaging window masks brief dropouts. LQ catches those dropouts instantly.
In Betaflight OSD: add the “Link Quality” element (not “RSSI dBm”) and place it adjacent to RSSI. A reading of “RSSI:85 LQ:100” means clean link at good range. “RSSI:80 LQ:70” means you are losing packets and should turn back regardless of RSSI.
Step 4: Validate with a Range Test
Real-world range test protocol:
1. Set transmitter to 25mW fixed (not dynamic) for a consistent baseline
2. Place quad at head height, props off, antenna oriented as in flight
3. Walk away while watching OSD in goggles (or have a spotter read values)
4. Note RSSI and LQ at 100m, 300m, 500m
5. At the distance where LQ drops below 80, that is your reliable range at 25mW
6. Multiply by the power ratio: 1W is 40× the power of 25mW, so range increases by √40 ≈ 6.3× in open air — roughly 6× range at 1W versus 25mW
RSSI Scaling Reference
| Receiver Protocol | Betaflight RSSI Source | Scale Command | Display Recommendation |
|---|---|---|---|
| ExpressLRS (CRSF) | set rssi_source = protocol |
set rssi_dbm_offset = -108 |
Display LQ as primary, RSSI dBm as secondary |
| Crossfire (CRSF) | set rssi_source = protocol |
set rssi_dbm_offset = -120 |
Display LQ as primary, RSSI as percentage |
| ExpressLRS (AUX channel) | Select AUX channel in Receiver tab | Default PWM mapping usually correct | Display RSSI as percentage, LQ from telemetry Lua |
| Analog (RSSI_ADC) | set rssi_source = adc |
Adjust rssi_scale per measurement |
Display RSSI percentage only |
Common RSSI Setup Mistakes
Mistake 1: Displaying RSSI percentage without calibrating the dBm offset
The consequence: RSSI shows 90% while LQ has already dropped to 60%. You fly further, confident the link is solid, and failsafe with no warning. The fix: Adjust rssi_dbm_offset to match the actual sensitivity floor of your receiver. If you do not know the number, display LQ alongside RSSI and trust LQ over RSSI.
Mistake 2: Mapping RSSI to an AUX channel that conflicts with a switch
The consequence: The RSSI PWM value on, say, AUX8 overrides whatever the radio is sending on channel 8 — that channel is now slaved to signal strength and your mode switch on the same channel stops working. The fix: Always assign RSSI to a high AUX channel (AUX12 if available) that is not mapped to any switch, slider, or function.
Mistake 3: Setting RSSI critical warning too low
The consequence: You set critical at 20%, thinking that provides warning buffer. But because RSSI scaling is often compressed, 20% might represent only 2-3dBm above failsafe — mere meters of range at the edge. The fix: Set critical at 30-35% until you validate the actual range-to-percentage mapping with a ground test. Bump it down only after proving 30% gives you sufficient buffer.
Mistake 4: Trusting RSSI without checking antenna orientation
The consequence: RSSI reads 95% with the quad sitting on the bench in one orientation. In flight, as the quad banks and the antenna null points toward the transmitter, RSSI drops 30-40dBm momentarily — a dropout that RSSI averaging masks but LQ instantly reveals. The fix: During range testing, rotate the quad through all orientations at each distance. The lowest LQ value in any orientation is the true link health for that distance.
⚠️ Regulatory Notice: Radio link testing and operation should follow 2026 regulations for unlicensed or licensed radio frequency use in your jurisdiction. In many regions, operating radio control equipment above certain power levels requires a valid amateur radio license. Always verify your transmitter’s regulatory compliance for power output, frequency allocation, and spurious emissions before extended range flights.
As detailed in our ELRS telemetry and Lua script configuration guide, your radio’s Lua telemetry screen provides RSSI and LQ readouts directly — cross-reference these with the Betaflight OSD values during setup to ensure consistency.
For serial protocol troubleshooting, our Betaflight ports tab configuration guide covers UART assignment — the RSSI serial stream arrives on the same UART as the receiver, so a misconfigured port disables RSSI along with control.
For ExpressLRS pilots who want reliable link monitoring, our ExpressLRS receiver bundles include pre-configured LQ channel mapping and optimized RSSI dBm offsets — plug in and your OSD reads accurately out of the box. Available at uavmodel.com.
