The firmware landscape.
A working drone runs four distinct kinds of software. Most alumni discover this only when one of them needs updating and they realise they don't know which "firmware" the question refers to. This section maps the whole landscape so the rest of the page makes sense.
The four firmware-like things in a typical Lumipad cohort drone:
The configurator and the firmware versions need to match, especially across major versions. INAV Configurator 7.x cannot reliably configure INAV firmware 8.x; INAV Configurator 6.x cannot configure 7.x. Cross-version mismatch is a common source of "settings keep reverting" or "can't connect" errors. When you update FC firmware, update the configurator on the same laptop at the same time.
Bootloaders are the most stable layer — most alumni go years without touching them. The exception: a few cohort default FCs (the SpeedyBee F405 V4 in particular) shipped with an early bootloader that doesn't support some newer DFU operations. If your FC dates from before mid-2024 and you've never updated the bootloader, see Section 04.
When to update, when not.
The honest answer to "should I update?" is most often "no, not yet." A drone running a stable INAV 7.1.2 doesn't need to become a drone running INAV 7.1.3 unless 7.1.3 fixes something you actually care about. The "if it ain't broke" principle is doing real work here. This section is about the small number of cases where you should update, and the larger number where you shouldn't.
Three categories of update, ranked by urgency:
- Security or safety patches — rare in this ecosystem (most flight controller firmware doesn't connect to networks), but when they happen, update promptly. Recent example: an INAV 7.1.2 bug that caused failsafe to misfire on certain receivers; 7.1.3 fixed it. Worth updating.
- Bug fixes affecting your specific build — read the changelog. If the fix doesn't apply to your FC, your sensors, or your typical missions, you don't need it. Most "fixes" don't affect cohort default builds.
- New features — the most over-applied reason to update. New features mostly serve specific edge cases; for survey work, the existing feature set is mature and complete. Don't update for features you won't use.
The cohort recommendation: track the latest stable major version, but lag one or two minor versions behind. As of mid-2026, INAV 7.x is the stable major; we're running 7.1.2 across most cohort drones (skipping 7.1.0 entirely because it had known issues, and not yet adopting 7.1.3 because 7.1.2 works fine for our use cases). When 8.0 stable ships and matures for ~6 months, we'll plan a coordinated migration.
Reading a changelog usefully
Most firmware projects publish a changelog with each release. Reading them quickly without getting lost:
- Search for your FC's target name (e.g.
SPEEDYBEEF405V4) in the changelog. Anything mentioning your specific FC matters more than generic changes. - Search for keywords from your config: "failsafe", "RTH", your receiver protocol, your GPS module. If a change touches one of these, read the entry carefully.
- Skim the rest. Most entries are racing-pilot tuning improvements, FPV freestyle features, or specific FCs that aren't yours. None of this matters for survey work.
If after this scan you find nothing relevant, the update isn't required. Note the version in your logbook for awareness, and revisit at the next update.
Update procedure when you do decide to update — the same as fc-setup.html Section 03's flash procedure, with three additions:
- Save your current config first. CLI:
diff all, copy the entire output. This is non-negotiable. Updates occasionally break configs in ways the configurator's "preserve settings" option doesn't catch. - Update the configurator on your laptop at the same time. Match major versions: configurator 7.x for firmware 7.x.
- Test on the bench before flying. After updating: full Phase A pre-arm checklist (fc-setup.html Section 10). Most updates that go wrong reveal themselves during this check.
What to do if an update breaks something: revert. Roll back to the previous version using the same flash procedure. Save the broken version's config dump first if possible — the firmware project's bug trackers benefit from real reproduction cases. Then re-flash the previous stable version and restore your saved config.
ESC firmware.
The ESC firmware is the layer most alumni never touch. Default settings work for default builds, and fc-setup.html covers the basics. This section goes deeper: which ESC firmware ecosystem you have, what the trade-offs are, and the small number of cases where ESC firmware tuning produces noticeable improvement.
Three ESC firmware ecosystems are relevant in 2026:
- BLHeli_S — the older, simpler ecosystem. Runs on cheaper EFM8-based ESCs (Bouk-class chips). Limited features, fixed-function. Effectively frozen — no significant updates since 2022. Most ESCs in cohort default builds run BLHeli_S.
- BLHeli_32 — the modern ecosystem with active development. Runs on ARM-based ESCs. More features (RPM telemetry, advanced filtering, motor parameter tuning). Closed source, with some controversy in the FPV community over licensing.
- BlueJay — the open-source alternative to BLHeli_S, running on the same hardware. Active development, RPM filtering support, mostly drop-in replacement for BLHeli_S. Increasingly the cohort recommendation for new builds.
For Lumipad cohort defaults, the recommendation has shifted over time:
BlueJay flash procedure (when replacing BLHeli_S):
- Open BLHeli Configurator (or BLHeliSuite32 — works for BlueJay too despite the name).
- Connect to FC via USB; click "Read Setup". The configurator detects the ESCs through the FC.
- For each ESC: click "Flash BlueJay". Select the appropriate target (matching the ESC's MCU). Wait for the flash to complete.
- After all four ESCs are flashed, "Read Setup" again to verify all four show BlueJay firmware.
- Configure: enable RPM filtering at the FC level (INAV: Configuration tab → "Bidirectional DSHOT" must be enabled).
Settings worth tuning in BLHeli_32 / BlueJay beyond the cohort defaults:
- Bidirectional DSHOT — must be ON for RPM filtering. Significant noise improvement in flight.
- Demag compensation — set to "High" for builds with smaller props or higher-KV motors. Prevents desync at low throttle.
- Beep volume — adjust to a level you can hear in the field. Some defaults are inaudible outdoors.
- Beacon delay — how long after motor stop the beacon starts (for finding crashed drones). Default 60s is fine; 30s is more aggressive.
Most other ESC parameters can stay default. Tuning beyond this list is racing-pilot territory and rarely benefits survey work.
Bootloaders & recovery.
Bootloaders are the unglamorous layer that lets everything else recover from mistakes. Most alumni never deal with the bootloader directly — DFU mode just works. The exceptions are rare but real: an FC that won't enter DFU at all, a bootloader that itself has a bug, or a corruption that survives normal recovery.
The bootloader is a small piece of code burned into the FC's microcontroller at the factory. On power-on, the bootloader runs first; it checks whether to launch the main FC firmware or enter DFU mode (depending on whether a button is held, a pad is shorted, or a flag is set). Once it decides, it hands control to the FC firmware and gets out of the way.
For most alumni, the bootloader is invisible. The only reason to think about it is when something goes wrong with re-flashing: if DFU mode itself isn't working, the bootloader is the suspect.
Three bootloader-related problems and their solutions:
SWD programmer recovery (last resort)
For FCs that won't enter DFU mode at all and have a hardware-level issue with the BOOT button or related circuitry, an SWD (Serial Wire Debug) programmer can flash the chip directly via its debug pads. This is genuinely a last resort:
- You need an SWD programmer. ST-Link V2 clones are ~₱1,500 online.
- You need to identify and access the SWD pads on the FC PCB. Most modern FCs have these as testpoints — small unmarked pads near the main MCU. Datasheet required.
- You need software (STM32CubeProgrammer, or open-source alternatives) and the correct firmware
.elfor.hexfile. - Solder thin wires to the SWD pads (or use spring pogo pins). Connect to the programmer. Flash.
Cohort instructors typically don't recommend this for individual alumni — at this level of difficulty, replacing the FC (₱2,200) is usually faster than recovering it. SWD recovery makes sense for partner orgs with multiple drones where one FC failure shouldn't cost the whole drone. If you're at this point, ask in alumni Slack first; someone has probably faced your specific failure mode.
Updating a bootloader itself is a separate operation from updating FC firmware. Most alumni will never need to do this. The exception, mentioned above, is some early SpeedyBee F405 V4 boards from before mid-2024 that shipped with a bootloader missing newer DFU features. If you have such a board:
- Identify the version. The configurator's MCU info (or boot screen) shows the bootloader version. Below 1.4 is the old version.
- Download the bootloader update from SpeedyBee's product page (a small
.binfile). - Flash via STM32CubeProgrammer using SWD (same procedure as above), or use SpeedyBee's official update tool if available.
- Verify by checking the bootloader version after update.
This is a one-time operation. Once updated, the bootloader will support all current and near-future DFU operations.
Fleet firmware management.
Once you have more than two or three drones, firmware drift becomes a real operational concern. Drone A is on INAV 7.0.4; Drone B is on 7.1.2; Drone C is on a custom build the previous owner left behind. Configurations that worked on one don't work on another. This section is about keeping a fleet coherent.
Three problems show up in fleets that don't show up with single drones:
- Version drift — different drones run different firmware. Switching pilots between drones means re-learning quirks. Configurations don't port cleanly. Diagnostics become harder.
- Update logistics — updating twelve drones in coordinated fashion is meaningfully different from updating one. Power supplies, cables, scheduling, regression testing.
- Knowledge silos — when only one person has updated firmware on the fleet, that person becomes a bottleneck. If they leave, the next firmware update becomes a project.
The Lumipad fleet management approach has three components:
The version logbook is the most important of the three. The discipline of writing down what changed when, on which drone, prevents most fleet management problems before they start. The downloadable spreadsheet template (linked at the top of this page) provides the structure; partner orgs adapt it to their context.
Coordinated update windows are easier to manage than rolling updates because the entire fleet stays consistent. Rolling updates create a window where some drones are on the new version and others aren't, and that's exactly when configurator-version mismatches cause problems. Pick a date, do them all, test each, then return the fleet to service.
Don't update right before a major mission. The Lumipad team has a hard rule: no firmware changes within two weeks of a scheduled survey. Updates introduce a small but real risk of unexpected behaviour; that risk is acceptable on a low-stakes test flight, not on a paying client mission. Schedule updates during quieter periods.
Custom firmware.
Building INAV (or BetaFlight, or BlueJay) from source code with custom modifications. Used by alumni doing research-grade work, partner orgs with specific hardware that needs custom support, or contributors fixing bugs upstream. Most readers will never need this; included for completeness.
Reasons to build firmware from source:
- Custom target support — your FC isn't in the official supported list, but the underlying MCU is supported. You can write a custom target file and compile firmware for it.
- Specific feature combinations — INAV's official builds disable some features by default to fit in flash memory. Building from source lets you enable just the features you need.
- Bug fixes upstream — found a bug, fixed it, want to flash the fix before it ships in a stable release. Building from source is how.
- Research applications — adding custom flight modes, sensor integrations, or telemetry channels for academic or research work.
Reasons NOT to build from source:
- "Latest features" — if the feature you want is in master but not in stable, wait for stable. Master is unstable for production use.
- "Better performance" — custom-tuned firmware is rarely meaningfully faster than stock for survey work. Tuning happens at the configuration level, not the firmware level.
- "More secure" — these are open-source projects without significant attack surface. Building from source doesn't add security in any meaningful way.
The build environment for INAV (the cohort default firmware):
- Linux (Ubuntu 22.04 or similar; macOS works with extra setup; Windows works via WSL2). Cohort recommends Ubuntu.
- ARM cross-compiler toolchain. INAV's documentation lists exact version requirements; usually
gcc-arm-none-eabi10.x or 11.x. - Make and Python 3.x.
- About 2GB free disk space for the source tree and build artifacts.
The basic build commands (from the INAV repo root):
git clone https://github.com/iNavFlight/inav.git— clone the source tree.cd inavgit checkout 7.1.2— switch to the stable tag you want as your baseline.make TARGET=SPEEDYBEEF405V4— build firmware for the cohort default FC. The output is a.hexfile in theobj/directory.- Flash the resulting
.hexvia the configurator's "Load Firmware (Local)" option, same as any other firmware flash.
Building from source is well-documented in each project's repository. The README and the developer documentation cover edge cases the above doesn't. Once the build environment is set up, recompiling is fast (~2-3 minutes for a clean build of INAV).
For alumni or partner orgs interested in contributing fixes back upstream, the INAV project has clear contribution guidelines. The community is welcoming. Most accepted contributions start as bug reports with reproduction cases (which alumni in the field are well-positioned to provide), then escalate to fixes once the contributor is comfortable with the codebase.