You plug in, the ESC chimes, everything looks right — but the motors won’t spin. The arm switch does nothing. Every pilot hits this. The fix is always in the Arm Status Flags, and 90% of the time it’s one of five things. Let’s decode them.
Understanding Betaflight Arm Status Flags
Arm Status Flags are bitmask values that Betaflight uses to track exactly which condition is blocking arming. Instead of guessing, you read the flags and fix the specific problem. There are two places to check them:
OSD Warnings (quick check): Add the “Warnings” element to your OSD. When you try to arm, Betaflight flashes the blocking condition on screen for a few seconds — throttle above minimum, CLI MSP active, GPS rescue not ready, etc.
CLI status command (definitive): Connect via Betaflight Configurator, open the CLI tab, and type status. Look for the line that says Arming disable flags:. If it shows anything other than 0, arming is blocked.
Step 1: Read the Flags
Connect your flight controller via USB (a smoke stopper is fine — the FC doesn’t need battery voltage for status checking). Open the CLI and run:
status
You’ll see output like:
Arming disable flags: RX_FAILSAFE MSP CLI
Each word is a separate blocking condition. Multiple flags mean multiple problems — fix them one at a time, starting with the easiest.
Troubleshooting note: If the flags say CLI, that’s just because you have the CLI tab open. It’s not a real problem — arming will work fine once you disconnect the Configurator. Ignore it for diagnosis.
Step 2: Decode the Most Common Flags
Here’s what each flag actually means and how to fix it:
THROTTLE — Your throttle stick is not at zero. Lower it completely. If it still triggers, check your radio’s channel endpoints on the Receiver tab — throttle should read 1000 or lower when the stick is fully down. Adjust endpoints on your radio until the Receiver tab shows a clean 1000.
RX_FAILSAFE — The flight controller isn’t receiving a valid signal from your receiver. Check:
– Receiver is bound and powered (solid LED on the receiver)
– Correct Serial RX provider in the Ports tab and Receiver tab
– Correct protocol: CRSF for Crossfire/ELRS, SBUS for FrSky, etc.
– If using ELRS, verify the Model Match setting isn’t preventing the bind
MSP — The MultiWii Serial Protocol is active (usually Betaflight Configurator connected). Disconnect USB and try again. If it persists without USB connected, something is keeping an MSP connection open — check for Bluetooth modules or OSD chips wired to a UART with MSP enabled.
GPS — GPS rescue is enabled but the GPS module hasn’t acquired enough satellites. Check on the GPS tab that you have at least 8 satellites and a valid 3D fix. Also verify the gps_rescue_min_sats setting in CLI isn’t set unreasonably high (default is 8).
ACC_CALIB — The accelerometer needs calibration. Place the quad on a level surface and click “Calibrate Accelerometer” in the Setup tab. If you’re running with the accelerometer disabled (set acc_hardware = NONE), this flag should never appear — double-check your configuration.
PARALYZE — Betaflight’s crash recovery mode is active. This triggers when the flight controller detects a violent impact (motor command exceeds crash_dthreshold while gyro rate exceeds crash_gthreshold). Disarm and re-arm to clear it, or set crash_recovery = OFF in CLI if you’re getting false triggers.
ANGLE — You’re in Angle mode and the quad is tilted too far. Return the quad to level. Some flight controllers require the accelerometer to be calibrated and active for Angle mode to arm.
CALIB — The gyro is still calibrating. Wait 2-3 seconds after plugging in before trying to arm. If it never clears, your gyro may be faulty — try reflowing the FC or replacing it.
Step 3: Verify with arm_flag_check (Advanced)
Once you’ve cleared the flags from status, run this in CLI:
arm_flag_check
This runs a more granular check and returns each condition individually. If nothing appears, all pre-arm conditions are satisfied and the drone should arm.
Step 4: Hardware Failure Patterns
When software flags are clean but the drone still won’t arm, the problem is hardware:
No ESC tones at all: Check the XT60 connection, inspect the battery lead solder joints on the ESC, and verify battery voltage with a multimeter. A LiPo at storage voltage (3.8V/cell) can still power the FC through the BEC but the ESCs may refuse to initialize if voltage sags below their threshold.
FC lights up but no ESC startup chime: The ESC isn’t getting power or the FC-to-ESC harness is disconnected/broken. Reseat the harness. If using a 4-in-1 ESC, check the JST connector is fully seated — a half-inserted plug can leave the ESC in bootloader mode.
ESCs chime but motors twitch instead of spinning: This is usually a motor protocol mismatch. In the Configuration tab, verify the ESC/Motor Protocol matches what your ESCs support (DShot300/600 for modern ESCs, Multishot or Oneshot125 for older ones). Also check that the protocol you selected matches in BLHeliSuite — if you flashed Bluejay onto BLHeli_S ESCs, you must use DShot, not Multishot.
Arming Prevention: Parameter Reference Table
| Condition | Arm Flag | CLI Fix Command | Typical Cause | Effect if Ignored |
|---|---|---|---|---|
| Throttle not at zero | THROTTLE | Adjust radio endpoints to 1000-2000 | Stick not fully down, endpoint drift | Won’t arm; motor safety |
| No receiver signal | RX_FAILSAFE | Check Serial RX provider + UART | Receiver unbound, wrong protocol | Won’t arm; no control link |
| Configurator connected | MSP | Disconnect USB | CLI tab open, Bluetooth MSP active | Won’t arm; safety lockout |
| No GPS lock | GPS | Set gps_rescue_min_sats=5 |
Indoor, initial cold start, antenna obscured | Won’t arm with GPS rescue enabled |
| Crash detected | PARALYZE | Set crash_recovery=OFF or disarm/rearm |
Hard landing, bump during handling | Won’t re-arm until cleared |
| Accelerometer uncalibrated | ACC_CALIB | Calibrate in Setup tab | First power-up, FC moved during boot | Won’t arm in Angle/Horizon |
| Gyro calibrating | CALIB | Wait 3 seconds, do not move quad | Moving quad during power-up | Won’t arm until stable |
| Angle mode tilt too high | ANGLE | Level quad, calibrate accel | Picking up tilted quad, bench testing | Won’t arm in Angle mode |
Common Mistakes and How to Avoid Them
Mistake 1: Toggling the arm switch repeatedly while staring at a black screen
The consequence: You never see the OSD warning that tells you exactly why it won’t arm. The fix: Add “Warnings” to your OSD layout in Betaflight Configurator. It takes 30 seconds and saves hours of head-scratching. Every FPV pilot should have it displayed on screen at all times.
Mistake 2: Using the CLI status command with USB connected and assuming MSP is the only problem
The MSP flag always shows when USB is connected. If you see MSP alongside other flags like RX_FAILSAFE, those other flags are real problems. The fix: Always run status, note every flag, then mentally subtract MSP and CLI if USB is connected. Fix the remaining flags individually.
Mistake 3: Forgetting that Betaflight 4.4+ added mandatory GPS for arming when GPS rescue is enabled
Before Betaflight 4.4, you could arm with GPS rescue enabled but no satellite lock — the rescue just wouldn’t work. In 4.4+, the GPS flag actively blocks arming. The fix: Either wait for a 3D fix (outdoors, clear sky, 2-5 minutes on first cold start) or disable GPS rescue temporarily with set gps_rescue_allow_arming_without_fix = ON. Never fly with GPS rescue disabled as a permanent solution — it’s your best recovery tool.
Mistake 4: Assuming a bound receiver means a working receiver
A bound receiver with a solid green LED is only half the story. The FC still needs the correct UART, correct serial protocol, and correct provider setting. The fix: On the Ports tab, confirm the correct UART has “Serial Rx” enabled. On the Receiver tab, confirm the Serial Receiver Provider matches (CRSF for ELRS/Crossfire, SBUS for FrSky, IBUS for FlySky). Then check the Receiver tab shows real-time stick movement.
Mistake 5: Skipping endpoint calibration on a new radio setup
If your throttle channel reads 1005 at the lowest position instead of 1000, the THROTTLE flag blocks arming even though the stick feels all the way down. The fix: On the Receiver tab, verify ALL channels read between 1000-2000 with centers at 1500. Adjust your radio’s output endpoint settings until the values are within ±3 of these targets. This also prevents mid-stick deadband issues in flight.
⚠️ Regulatory Notice: The arming procedures and pre-flight configuration described in this article should be followed in accordance with the latest 2026 drone regulations in your country or region. Always verify that your drone’s failsafe behavior (disarm, GPS rescue, land) complies with local requirements. Regulations vary significantly between the FAA (US), EASA (EU), CAA (UK), CAAC (China), and other authorities. Some regions mandate specific failsafe behaviors for drones above 250g — check your local rules before configuring arming and disarm triggers.
As we covered in our Betaflight Modes Tab setup guide, getting your arm switch configured correctly is the first step. And once you’re armed, having proper failsafe behavior configured ensures you don’t lose your quad on signal loss.
For a reliable flight controller that handles arming detection seamlessly, the SpeedyBee F405 V4 stacks include a dedicated arm-status LED and a clean BEC circuit that eliminates brownout-related arming failures. Available at uavmodel.com with full Betaflight 4.5 compatibility out of the box.
