Article

Betaflight won't arm: how to read arming disable flags in the CLI, OSD and beeper

You flip the arm switch and nothing happens. On a Betaflight quad that is rarely a mystery: the flight controller keeps a list of reasons it is refusing to arm, called arming disable flags, and it will tell you which ones are active. Read the flags first and change settings second. Most refusals are safety checks doing their job, not broken hardware.

Every flag on the list has to clear before the quad arms. Fixing one and still getting no motors usually means a second flag was hiding behind it.

Four places to read the flags

CLI. Connect USB, open the CLI tab and type status. The Arming disable flags: line lists every active reason by name. On some targets with little flash space Betaflight prints only a hexadecimal value; the Betaflight wiki says to decode it against the armingDisableFlags_e enum in runtime_config.h, using the file from the same firmware version you are running.

Two flags show up there simply because you are connected: CLI (the CLI is open) and MSP (the Configurator is talking to the board). They clear once you exit the CLI and disconnect. It also means the quad will not arm on the bench while the USB cable is plugged into the Configurator, which is a common first-build surprise.

OSD. In the OSD tab, enable the Warnings element and, in the warnings list, turn on Arming Disabled. When you try to arm, the goggles show the reason by name, for example THROTTLE. For field troubleshooting this is the most convenient option, because you do not need a laptop.

Setup tab. The Configurator also shows the arming disable flags on the Setup tab. Oscar Liang notes they often appear as numbers there, which you then look up in the table from the Betaflight wiki.

Beeper. If a buzzer is connected, a failed arm attempt produces a code for the most important active flag, meaning the one with the lowest number:

  1. five short "attention" beeps, which you can ignore;
  2. a number of long beeps, each worth 5;
  3. a number of short beeps with long gaps, each worth 1.

The flag number is 5 × long beeps + short beeps. One long and two short beeps is 7; two long beeps and no short ones is 10. Check the number against the column for your firmware version, because the numbering has shifted between releases. The current Betaflight source on GitHub adds CRASHFLIP, ALTHOLD and POSHOLD before ARMSWITCH, so on the newest firmware the last numbers may not match the wiki table. Flag names are reliable everywhere; numbers depend on the version.

The flags you will actually meet

Names and fixes below come from the Betaflight wiki table, with practical notes from Oscar Liang's arming guide.

Flag What it means What to do
THROTTLE Throttle is above min_check Lower the stick fully. The default min_check is 1050, so the Receiver tab should show less than that at stick-low. If it does not, fix the radio endpoints
ANGLE The quad is tilted more than small_angle (default 25°) Put it on a level surface. The same limit is Maximum Arm Angle in the Configuration tab
ARMSWITCH Arm switch is in an unsafe position Switch it off and on again
RXLOSS or RX_FAILSAFE No valid receiver signal Check binding, wiring and the Receiver tab
NOT_DISARMED or BADRX The receiver just came back from failsafe with the arm switch on Switch arm off first
FAILSAFE Failsafe is active Fix the cause of the failsafe and try again
BOOTGRACE You tried too soon after power-on Wait pwr_on_arm_grace seconds (default 5)
CALIB Sensor calibration is still running Keep the quad still and wait
NOPREARM A prearm switch is configured and was not toggled Toggle the prearm switch, then arm
RUNAWAY, CRASH Runaway Takeoff Prevention or Crash Recovery has triggered Disarm to clear
GPS GPS Rescue is configured but there is no satellite fix yet Wait for the fix, allow arming without a fix, or disable GPS Rescue
RESCUE_SW The GPS Rescue switch is on Turn it off
RPMFILTER or DSHOT_TELEM RPM filtering is enabled but one or more ESCs send no RPM telemetry Check that the ESCs and their firmware support bidirectional DShot
MOTOR_PROTO No ESC protocol is selected Pick one on the Configuration tab
REBOOT_REQD A setting needs a reboot Reboot the flight controller
LOAD CPU load is too high Reduce load (see below)
NO_ACC_CAL The accelerometer needs calibrating Calibrate it or disable features that use it
CMS The OSD or other config menu is open Exit the menu
NOGYRO No gyro detected Possible hardware failure, a firmware problem, or firmware built for the wrong board
DSHOT_BBANG Bitbang DShot is not working Usually a timer conflict with another enabled feature
PARALYZE Paralyze mode was activated Power cycle the flight controller

A few of these need more than one line.

THROTTLE with the stick already down. Oscar Liang recommends channel ranges of roughly 1000-2000. Slightly outside that, such as 988 or 990 at the bottom and 2010-2012 at the top, is fine. If the lowest throttle value sits inside the range and above 1050, recalibrate the gimbals and endpoints on the radio rather than raising min_check.

ANGLE on a flat surface. Oscar Liang lists three options: level the quad, raise Maximum Arm Angle (he mentions 45° or 60°), or set it to 180° to disable the check. Some pilots disable it so they can arm a quad stuck in a tree and try to shake it free; that is a safety feature you are switching off, so decide deliberately. If the flag stays on even when the quad is level, he suspects the accelerometer. Disabling the accelerometer also disables Angle, Horizon, GPS Rescue and Position Hold, because they all depend on it.

CALIB that never finishes. Some boards have sensitive gyros and refuse to complete calibration after power-up. Oscar Liang suggests raising gyro_calib_noise_limit in the CLI to 100 or even 120.

LOAD. Check the CPU load at the bottom of the Configurator. Oscar Liang cites the Betaflight 4.5 recommendation of staying below 75% and suggests dropping the PID loop from 8 kHz to 4 kHz or disabling unused features such as LED_STRIP and soft serial.

RXLOSS or BADRX in flight. The Betaflight wiki notes that these can appear on the OSD while flying. Treat that as a sign of a faulty radio system or the edge of your range, the same way you would treat an "RSSI critically low" warning.

No flags, still no arming

If status shows nothing that blocks arming, the problem is usually elsewhere:

  1. Is ARM assigned at all? In the Modes tab, assign ARM to an AUX switch; with ExpressLRS this is usually AUX 1, which is channel 5. Flip the switch on the bench and watch the mode range respond. The Betaflight wiki also notes that a bad receiver initial state or failsafe setting can still cause problems with switch arming.
  2. Does the receiver map correctly? In the Receiver tab, move each stick and check that the matching channel moves. If they are mixed up, try a different channel map.
  3. Are the ESCs alive? With a battery plugged in, the motors should beep as the ESCs start. Choose DShot300 or DShot600 as the protocol, then remove the props and spin each motor from the Motors tab.

If you are still stuck after that, post the full status output when you ask for help on a forum. It answers the first question anyone will ask.