FlySpark logo
ArduPilot logoArduPilotFlight controller configuratorsUpdated

ArduPilot firmware: install Copter, Plane, Rover or Sub on any board

ArduPilot firmware is built separately for every vehicle type and every flight controller board. FlySpark's ArduPilot firmware tool reads the official list from the ArduPilot firmware server, finds the build for your exact board, downloads it and writes it over USB from your Android phone. Copter, Heli, Plane, Rover, Sub and Antenna Tracker are all there, in stable, beta and latest development releases.

It covers both situations pilots meet. A board that already runs ArduPilot is updated through its ArduPilot bootloader with the .apj file. A board that runs Betaflight or INAV, or a brand-new board, gets a first install in DFU mode with the _with_bl.hex file, which also writes the ArduPilot bootloader. Once that is done, every later update is a normal one.

This page explains the file types, how the tool picks the right build, step-by-step guides for both install methods, the error messages you may see and how to fix them, and what to check after flashing.

This tool runs in the FlySpark app on Android. The demo works in your browser.

  • Free
  • Demo without hardware
ArduPilot logo

In short

ArduPilot firmware is built per vehicle type and per flight controller board. FlySpark's ArduPilot firmware tool finds your board's build on the ArduPilot firmware server and writes it over USB OTG from an Android phone, either through the ArduPilot bootloader (.apj) or as a first install in DFU mode (_with_bl.hex).

Key facts

  • Reads the firmware.ardupilot.org manifest, refreshed at most once an hour.
  • Vehicles: Copter, Heli, Plane, Rover, Sub and Antenna Tracker, in Stable, Beta and latest development builds.
  • Boards already running ArduPilot are updated with the .apj file through the ArduPilot bootloader, verified by CRC.
  • First installs use the _with_bl.hex file in DFU mode, which holds both the bootloader and the firmware; .apj files cannot be used for DFU.
  • Checks the image's board ID, flash size and external flash needs against the board before writing.
  • Custom .apj, .px4 and .hex files can be flashed.
  • Runs in the Android app with USB OTG; not on iPhone or in web browsers.
  • Betaflight logoBetaflight
  • INAV logoINAV
  • ArduPilot logoArduPilot
  • PX4 logoPX4
  • BLHeli_S
  • Bluejay logoBluejay
  • AM32 logoAM32
  • ExpressLRS logoExpressLRS
  • EdgeTX logoEdgeTX
  • DroneCAN logoDroneCAN
  • MAVLink logoMAVLink

ArduPilot

Features

  • 01

    Every vehicle and release

    Copter, Heli, Plane, Rover, Sub and Antenna Tracker, each as stable, beta or development builds, with versions listed newest first.

  • 02

    Board search and detection

    Search the full board list by name, such as MatekH743 or CubeOrange, or let FlySpark identify the board over USB from its bootloader board ID, USB name or Betaflight/INAV target.

  • 03

    Update through the ArduPilot bootloader

    For a board that runs ArduPilot: the .apj image is written through the bootloader and verified with a CRC check. Your parameters stay on the board.

  • 04

    First install over DFU

    For a board that runs Betaflight, INAV or nothing yet: the _with_bl.hex image is written in DFU mode, bootloader included, so later updates work without DFU.

  • 05

    Safety checks before writing

    FlySpark compares the board ID, flash size and external flash needs of the image with the board and stops with a clear message if they do not match.

  • 06

    Custom files

    Flash your own build or a file from a manufacturer: .apj, .px4 or .hex.

  • 07

    Phone-friendly

    Runs over a USB OTG cable on Android, keeps a progress notification when you switch apps, and can start flashing as soon as the board is plugged in.

What ArduPilot firmware is

ArduPilot is autopilot software for many kinds of vehicles. The same project produces several firmwares: ArduCopter for multirotors, a Heli build of Copter for traditional helicopters, ArduPlane for fixed-wing aircraft and QuadPlane VTOLs, Rover for cars and boats, ArduSub for underwater vehicles and Antenna Tracker for tracking antennas. Each is compiled for each supported board, because pin maps, sensors and memory differ from board to board.

The builds are published on firmware.ardupilot.org in folders per vehicle, with stable and beta releases plus the latest development build. Picking a file by hand means knowing your exact board name, the vehicle, the release and the right file type. FlySpark reads the server's manifest, which lists every build with its board ID, vehicle, version and file format, and does the matching for you.

ArduPilot firmware file types: .apj, _with_bl.hex and .bin

An .apj file is the normal update image. It contains the firmware plus its board ID and is written through the ArduPilot bootloader, which is already on the board if it has run ArduPilot before. This is what ground stations use for updates, and it never touches the bootloader itself.

A _with_bl.hex file contains the ArduPilot bootloader and the firmware together. It is written in the chip's DFU mode, which every STM32 flight controller has in ROM. Use it the first time ArduPilot goes on a board, for example when converting a Betaflight or INAV board. DFU flashing erases the whole chip.

A .bin or .abin file is used for other routes, such as loading from an SD card on boards that support it. FlySpark uses .apj for updates and _with_bl.hex for DFU installs. In custom file mode it accepts .apj, .px4 and .hex files.

Which install method to choose

Choose Runs ArduPilot when the board already has ArduPilot on it, even an old version. FlySpark reboots it into the bootloader, checks the board ID against the image, erases, writes and verifies. Nothing outside the firmware area changes, so your parameters and calibrations stay.

Choose First install (DFU) when the board runs Betaflight or INAV, has never been flashed, or has a damaged bootloader. Put the board in DFU mode by holding its BOOT button while plugging in USB. FlySpark writes the _with_bl.hex image, which replaces everything on the chip including the bootloader. If you connect a board that runs Betaflight or INAV and pick the normal method, FlySpark tells you to use the DFU option instead, because those firmwares have no ArduPilot bootloader.

How FlySpark finds the right board

Every ArduPilot board has a numeric board ID, and every .apj image records the ID it was built for. When a board is in the ArduPilot bootloader, FlySpark reads that ID and filters the list to matching builds. Some boards share compatible IDs, and FlySpark knows those pairs.

When the board runs ArduPilot, the board name in its USB description helps narrow the list. When it runs Betaflight or INAV, FlySpark reads the target name and suggests the ArduPilot board with the same hardware where one exists. You can always search by name instead, and the search covers every board on the server.

Similar names can mean different hardware: a board and its V2 or a Pro variant often need different builds. If you are not sure, check the name printed on the board or in the manufacturer's documentation, and let FlySpark's board ID check catch a mismatch before anything is written.

Where the ArduPilot firmware tool runs

Flashing needs a wired USB connection, so the tool runs in the FlySpark app on Android with a USB OTG cable or adapter. It is not offered on iPhone, which has no USB access for apps, and it is not part of the web version. In the browser you can try a dry run against a simulated bootloader in the demo to see the steps.

Inside the ArduPilot and MAVLink ground station, Setup has its own Install firmware page. It shows the boards and vehicles, guesses your board from its boot messages, and on Android installs over USB. On a telemetry radio, Bluetooth or Wi-Fi link it lets you browse firmware but asks for a direct USB connection to install.

What to check after an ArduPilot firmware update

Updating within the same major version keeps parameters and needs no extra work. After a jump between major versions, read the release notes for parameter changes, then connect the ground station and check the Setup status chips, especially the frame type, flight modes and failsafes.

After a first install, the board starts with default parameters. Work through the mandatory setup: frame type for Copter, accelerometer, compass, radio calibration, flight modes, failsafe and, for Copter, initial tune parameters. FlySpark's ArduPilot ground station covers all of these.

At a glance

ArduPilot firmware tool specifications

Firmware sourcefirmware.ardupilot.org manifest, refreshed at most once an hour
VehiclesCopter, Heli, Plane (including QuadPlane), Rover, Sub, Antenna Tracker
ReleasesStable, Beta, latest development; versions newest first
Update method.apj through the ArduPilot bootloader, CRC verified
First install_with_bl.hex in STM32 DFU mode, whole chip erased
Custom files.apj, .px4, .hex
ChecksBoard ID (with known compatible IDs), flash size, external flash
Board detectionBootloader board ID, USB product name, Betaflight or INAV target
PlatformFlySpark app on Android with USB OTG; demo dry run in the browser
Not availableiPhone and web browsers (no wired USB flashing)

Compare

Ways to install ArduPilot firmware

FeatureFlySpark (Android)Mission PlannerSTM32CubeProgrammer
Picks the build from firmware.ardupilot.orgYesYesNoyou download the file
Updates through the ArduPilot bootloader (.apj)YesYesNo
First install over DFU (_with_bl.hex)YesArduPilot docs point to DFU tools such as STM32CubeProgrammerYes
Runs on an Android phoneYesNoNo
Runs on a desktop computerNoYesYes
Board ID check before writingYesYesNo

ArduPilot

How to install ArduPilot firmware from an Android phone

  1. Open the tool

    In the FlySpark app open Tools, then ArduPilot firmware.

  2. Choose vehicle and release

    Pick Copter, Heli, Plane, Rover, Sub or Tracker, then Stable, Beta or Dev and the version.

  3. Find the board

    Plug the board in over USB OTG and tap Identify board over USB, or search by name.

  4. Pick the method

    Runs ArduPilot for an update, or First install (DFU) for a Betaflight, INAV or blank board.

  5. Flash

    Start flashing and wait for the erase, write and verify to finish before unplugging.

  6. Set up

    Reconnect in the ground station and check or complete the mandatory setup.

Guide 01

Update a board that already runs ArduPilot

Remove the propellers. You need the FlySpark app on Android, a USB OTG adapter and a USB data cable.

  1. Open Tools, then ArduPilot firmware.

  2. Pick the vehicle: Copter, Heli, Plane, Rover, Sub or Tracker.

  3. Pick the release type (Stable, Beta or Dev) and the version.

  4. Plug in the board and tap Identify board over USB, or search for the board by name.

  5. Leave the method on Runs ArduPilot and start flashing.

  6. Tap Allow when Android asks for access to the USB device.

  7. Wait while FlySpark erases (this can take up to 20 seconds), writes and verifies. Do not unplug until it reports success.

  8. Reconnect in the ArduPilot ground station and check the version in Messages and the Setup status.

Guide 02

Convert a Betaflight or INAV board to ArduPilot

Check that ArduPilot supports your board: it must appear in the board list. Save a Betaflight or INAV diff first if you might go back.

  1. Open Tools, then ArduPilot firmware, and choose the vehicle and release.

  2. Search for the board, or plug it in and let FlySpark suggest the ArduPilot board from its Betaflight or INAV target.

  3. Choose First install (DFU). FlySpark selects the _with_bl.hex image.

  4. Unplug the board, hold its BOOT button and plug USB back in. Release the button once connected.

  5. Start flashing. The whole chip is erased and the bootloader and firmware are written.

  6. When it finishes, unplug and replug the board. It now boots ArduPilot, and future updates use the normal method.

Guide 03

Flash a custom ArduPilot build

Use this for a build from the custom firmware server, a manufacturer file or your own compile.

  1. Open the ArduPilot firmware tool and switch to the custom file option.

  2. Pick the .apj, .px4 or .hex file from your phone.

  3. For .apj or .px4, connect the board normally; for .hex, put it in DFU mode.

  4. Start flashing. The board ID and size checks still apply to .apj images.

Troubleshooting

Common problems and fixes

  • Problem

    This firmware is for board ID X, but the board says it is Y.

    Fix

    The image was built for a different board. Choose the firmware for your exact board, including its revision. Identify board over USB filters the list to matching builds.

  • Problem

    This firmware does not fit the board.

    Fix

    The image is larger than the chip's flash. You picked a build for a bigger board; choose the one for your exact model.

  • Problem

    This firmware needs external flash the board does not have.

    Fix

    Some builds run partly from external flash on boards that have it. Pick the build for your board variant without external flash.

  • Problem

    The board is not answering as an ArduPilot bootloader.

    Fix

    The bootloader only listens for a few seconds after power-up. Unplug the board, plug it back in and start again straight away, or tick Board already in bootloader and Flash on connect, then plug it in.

  • Problem

    The connected board runs Betaflight or INAV, which has no ArduPilot bootloader.

    Fix

    Switch to First install (DFU) and put the board in DFU mode with its BOOT button.

  • Problem

    No board in DFU mode found.

    Fix

    Unplug the board, hold its BOOT button while plugging USB back in, and try again. Some boards have BOOT pads to bridge instead of a button.

  • Problem

    No board appeared on USB.

    Fix

    Use a cable that carries data, not a charge-only cable, and check the OTG adapter. Tap Allow when Android asks about the USB device.

  • Problem

    Verification failed (CRC).

    Fix

    The written image does not match. Flash again before unplugging. A board in its bootloader can always be flashed again, so nothing is lost.

  • Problem

    Disarm the vehicle before installing firmware.

    Fix

    FlySpark refuses to reboot an armed autopilot. Disarm, remove the props, and start again.

  • Problem

    Installing firmware needs a wired USB connection.

    Fix

    You are connected over telemetry, Bluetooth or Wi-Fi. Connect the board's own USB port to the phone with an OTG cable.

Glossary

Glossary of terms

Bootloader
A small program at the start of flash that lets a ground station write new firmware over USB without DFU.
DFU
Device Firmware Upgrade, a mode built into the STM32 chip that can write the whole flash, including the bootloader. Entered by holding BOOT at power-up.
.apj
ArduPilot's update image with the board ID, written through the ArduPilot bootloader.
_with_bl.hex
Firmware plus ArduPilot bootloader in one file, for the first install over DFU.
Board ID
The number that identifies an ArduPilot board design; an image only runs on its own ID.
Manifest
The list of every build on the ArduPilot firmware server, with vehicle, board, version and format.
OTG
USB On-The-Go, the adapter or cable that lets an Android phone act as a USB host.
QuadPlane
An ArduPlane setup with lift motors for vertical takeoff and landing; it uses the Plane firmware.

FAQ

Frequently asked questions

Where do I download ArduPilot firmware?

Official builds are on firmware.ardupilot.org, in folders per vehicle with stable, beta and latest builds. FlySpark reads that server's manifest, so you pick the vehicle, release and board and it downloads the right file for you.

Can I install ArduPilot firmware from my phone?

Yes, on Android with a USB OTG cable. The FlySpark app writes .apj updates through the bootloader and does first installs in DFU mode. iPhone apps have no USB access, so it is not available there.

Can I flash ArduPilot in the browser?

Not with FlySpark. The web version offers a dry run in the demo only. Use the Android app, or a desktop ground station.

How do I put Betaflight or INAV boards on ArduPilot?

Check the board is in ArduPilot's board list, then use First install (DFU): hold BOOT while plugging in USB, and FlySpark writes the _with_bl.hex image with the ArduPilot bootloader. Later updates do not need DFU.

What is the difference between .apj and _with_bl.hex?

The .apj is the firmware only, written through the ArduPilot bootloader. The _with_bl.hex includes the bootloader and is written over DFU, erasing the whole chip. Use .apj for updates, _with_bl.hex for a first install.

Will updating ArduPilot firmware erase my parameters?

An update through the bootloader keeps your parameters. A DFU install erases the whole chip, so the board starts with defaults. Save a .param file in the ground station before a DFU install or a big version jump.

Stable, beta or dev: which should I choose?

Stable for normal flying. Beta is a release candidate for testing new features. Dev is the latest daily build and is meant for developers and testers.

Which firmware does a QuadPlane or VTOL use?

Plane. QuadPlane support is part of ArduPlane and is turned on with parameters after installation.

Which firmware does a helicopter use?

The Heli build of Copter, listed as Heli in FlySpark. It is a separate build from the multirotor Copter firmware.

My board is not answering as an ArduPilot bootloader. What now?

The bootloader listens only briefly after power-up. Replug the board and start again straight away, or turn on Board already in bootloader and Flash on connect so FlySpark starts the moment you plug it in.

Is a failed flash dangerous?

Not if the bootloader is intact: a board in its bootloader can always be flashed again. If a DFU install is interrupted, enter DFU with the BOOT button and run it again.

Does FlySpark flash PX4?

Yes. The same flasher has a firmware choice at the top: switch it from ArduPilot to PX4 to pick a PX4 release and the .px4 build for your board, which goes through the same bootloader protocol.

References

Sources

The official documentation behind the background facts on this page.

  1. ArduPilot Firmware buildsArduPilot · firmware.ardupilot.org
  2. Loading FirmwareArduPilot · ardupilot.org
  3. Loading Firmware onto boards without existing ArduPilot firmwareArduPilot · ardupilot.org

Tools

See every FlySpark tool

Get FlySpark

This tool runs in the FlySpark app on Android. The demo works in your browser.