You plug in, hear the ESC tones, throttle up — nothing. The OSD flashes “ARMING DISABLE” but the flag list scrolls too fast to read. Every pilot hits this. The arming disable flag system is Betaflight’s most useful diagnostic tool and its most frustrating UI. Here’s how to decode every flag and fix the underlying problem.
Understanding the Arming Disable Flag System
Betaflight maintains a 32-bit bitmask where each bit represents one reason the flight controller refuses to arm. The OSD shows a human-readable list, but the real power is in the CLI where you can query each flag individually.
Step 1: Read Flags in the OSD
In Betaflight Configurator → OSD tab, add the “Arming Disable Flags” element to your display. Position it somewhere you can read before takeoff. When arming fails, this element shows which flags are active. The OSD shows up to 3-4 flags at a time — if you have more, they rotate.
Step 2: Read Flags via CLI (Recommended for Diagnostics)
Connect USB, open CLI, type status. Look for the “Arming disable flags” line. It shows the bitmask hex value and a decoded list. Example:
Arming disable flags: 0x104 CLI MSP
The hex value 0x104 means bits 2 (CLI=0x4) and 8 (MSP=0x100) are set, totaling 0x104. Here’s the full bitmask map:
| Flag Name | Hex Value | Bit | Meaning | Fix |
|---|---|---|---|---|
| NO_GYRO | 0x1 | 0 | Gyro not detected | Reflow FC, check ribbon cable |
| FAILSAFE | 0x2 | 1 | Radio link lost | Check RX power, antenna connection |
| RX_FAILSAFE | 0x4 | 2 | RX failsafe active | Bind RX, verify channel output |
| BAD_RX | 0x8 | 3 | No valid RX signal | Check serial protocol, wiring |
| BOXFAILSAFE | 0x10 | 4 | Failsafe switch active | Check mode tab, switch positions |
| THROTTLE | 0x20 | 5 | Throttle not at zero | Lower throttle below min_check |
| ANGLE | 0x40 | 6 | Tilt angle exceeds limit | Place quad level (small_angle default 25°) |
| BOOT_GRACE | 0x80 | 7 | Boot grace period active | Wait 5 seconds after power |
| NOPREARM | 0x100 | 8 | Pre-arm switch not engaged | Set up pre-arm in modes tab |
| LOAD | 0x200 | 9 | CPU load too high | Reduce PID loop to 4kHz or disable features |
| CALIB | 0x400 | 10 | Sensor calibration in progress | Wait for calibration, keep quad still |
| CLI | 0x800 | 11 | CLI is open | Close CLI tab in Configurator |
| CMS | 0x1000 | 12 | CMS menu open | Exit OSD menu (yaw left + pitch up) |
| BST | 0x2000 | 13 | Blackbox device not ready | Wait for SD card init |
| MSP | 0x4000 | 14 | MSP connection active | Disconnect USB/Configurator to arm |
| PARALYZE | 0x8000 | 15 | Crash recovery active | Quad must be level and still |
| GPS | 0x10000 | 16 | GPS rescue count too low | Increase GPS rescue min satellites |
| RESC | 0x20000 | 17 | GPS rescue switch active | Disable GPS rescue mode |
| RPMFILTER | 0x40000 | 18 | RPM filter not ready | ARM after ESC telemetry stabilizes |
| REBOOT_REQD | 0x80000 | 19 | Settings need reboot | Save and reboot after config change |
| DSHOT_BITBANG | 0x100000 | 20 | DShot bitbang active | Disable bidirectional DShot in config |
| ACC_CALIB | 0x200000 | 21 | Accelerometer calibrating | Wait for calibration |
| MOTOR_PROTO | 0x400000 | 22 | Motor protocol mismatch | Set correct ESC protocol |
| OVER_TEMP | 0x800000 | 23 | FC temperature too high | Let cool down (>80°C triggers) |
| OSD_MENU | 0x1000000 | 24 | OSD menu active | Exit OSD menu |
| CRASH_RECOVERY | 0x2000000 | 25 | Crash recovery mode | Clear by disarming and re-arming |
| ARM_SWITCH | 0x4000000 | 26 | Arm switch in wrong position | Check arm mode switch assignment |
Step 3: Decode MSP Flag (Most Confusing for Beginners)
When you see MSP in the flags, it means the flight controller thinks a computer is connected. This disables arming as a safety measure — Betaflight won’t let you arm while you could be changing settings from the computer.
Three things trigger MSP flag:
1. USB cable connected (most common) — simply unplug USB
2. Bluetooth/WiFi module on a UART with MSP enabled — disable MSP on that UART
3. Open Configurator tab even after USB disconnect — close and reopen
Quick test: If status shows MSP and USB is unplugged, check the Ports tab for MSP enabled on UARTs that have nothing connected.
Step 4: The THROTTLE + ANGLE Combo — Most Common Field Problem
You land, disarm, walk to a new launch spot, try to arm — nothing. Flags show THROTTLE and ANGLE. Your throttle stick isn’t fully down (below min_check, default 1050) and the quad isn’t level within small_angle (default 25°).
Fix: Lower throttle to absolute zero AND place quad on level ground. If you’re on a slope (e.g., flying from a hillside), increase small_angle to 180 in CLI: set small_angle = 180 then save. This disables the angle check entirely — useful for launching from uneven terrain but disables the tip-over protection.
Common Mistakes & How to Avoid Them
Mistake 1: Not Setting Up a Pre-Arm Switch
Without a pre-arm, the arm switch alone can trigger accidental arming when you set the radio down. Pre-arm requires two deliberate actions — hold pre-arm, flick arm. Every quad I build has pre-arm on a momentary switch. In the Modes tab: add a range for “PREARM” on an aux channel. The pre-arm must be active for arming to work. If the pre-arm switch breaks in flight, you can still disarm normally.
Mistake 2: Forgetting to Close CLI Before Field Arming
You connect at home, tweak PIDs in CLI, type save, unplug, head to the field — and the quad won’t arm. CLI flag is set because the save command reboots with CLI still technically open in the session. Fix: After save in CLI, type exit before unplugging. Or just power cycle the quad after config changes.
Mistake 3: GPS Rescue Triggering GPS Flag
If you’ve configured GPS rescue but haven’t acquired enough satellites, the GPS flag blocks arming. Default gps_rescue_min_sats is 8. On overcast days or in urban canyons, GPS lock can take 2-3 minutes. Fix: Lower to 5-6 satellites in CLI (set gps_rescue_min_sats = 5) if you’re comfortable with reduced rescue accuracy, or wait for full lock. The wait is worth it — a rescue triggered with 4 satellites can land your quad 200m from its actual position.
Mistake 4: Crashing Without Understanding CRASH_RECOVERY
After a crash, Betaflight may enter crash recovery mode automatically. The quad won’t re-arm until it detects level attitude and zero throttle. If you crash into tall grass where the quad can’t self-level, the flag persists. Fix: Physically pick up the quad and hold it level for 2 seconds, or disable crash recovery in CLI: set crash_recovery = OFF (then re-enable it after).
Mistake 5: RPMFILTER Flag on First Boot After Flash
Fresh Betaflight 4.5+ flash, bidirectional DShot enabled, RPM filtering active — and the RPMFILTER flag blocks arming for the first 2-3 seconds after plug-in while ESC telemetry initializes. It’s not a bug, it’s a safety delay. Wait 5 seconds and try again. If it persists beyond 10 seconds, your ESCs don’t support bidirectional DShot — disable RPM filtering or upgrade ESCs.
⚠️ Regulatory Notice: The arming safety features described in this article are consistent with 2026 remote ID and flight safety requirements in most jurisdictions. In the United States, the FAA’s Remote ID rule requires that UAS not be capable of arming unless all required telemetry is broadcasting. Always verify your failsafe and pre-arm configurations comply with local regulations. The EASA (EU) Open Category requires a reliable means of immediately stopping the flight — Betaflight’s disarm switch fulfills this requirement.
If you’re wrestling with persistent RX-related arming flags, our ExpressLRS binding troubleshooting guide covers the radio side. For pilots who want the full CLI diagnostic toolkit, our Betaflight CLI power user guide details every command worth memorizing.
For pilots who want a flight controller with robust pre-arm handling and dual-stage arming built into the target defaults, the SpeedyBee F405 V4 Stack comes pre-configured with sensible arming safety defaults and excellent CLI documentation. Available at uavmodel.com under flight controllers.
