MA-RTK-AIR-626 for Drone Light Shows — Fix the Skybrush TIMESYNC Warning
The MicoAir MA-RTK-AIR-626 is the low-cost centimeter-level RTK module built for drone swarms and light shows. With the official Skybrush firmware, though, every drone carrying a 626 shows a yellow TIMESYNC warning in Skybrush Live, even though its position and RTK fix are perfect. This page explains why, and gives you free Skybrush 4.6 firmware for 20 flight controllers that fixes it.
Short answer: the 626 never sends the GPS week number, so the flight controller never has a valid GPS time. Install the Robofusion Skybrush 4.6 build for your exact flight controller, keep GPS_AUTO_CONFIG = 0, and the warning goes away. Nothing on the 626 itself changes.
These builds are made by Robofusion from the public Skybrush source with one published change. The MicoAir743v2 build has been confirmed on a customer's Skybrush fleet. The other targets are build-verified only: they compile, fit in flash and contain the fix, but we have not flown them. Fly a normal test with the new firmware on every drone, and confirm the checks in step 6, before you use it in front of an audience. You use this firmware at your own risk. It is not affiliated with or endorsed by the Skybrush project or ArduPilot.
Who needs this?
You need this page if all three of these are true:
- your drones use the MA-RTK-AIR-626 RTK module,
- they run Skybrush firmware (Skybrush's ArduCopter build, "CMCopter"), or any other ArduPilot setup that needs a valid GPS time,
- Skybrush Live shows a TIMESYNC warning on those drones.
You do not need it with the MA-RTK-AIR-982 or MA-RTK-AIR-F9P. Both give a valid GPS time on the official firmware.
What the problem looks like
- Skybrush Live shows a yellow TIMESYNC (time synchronization) warning for each drone with a 626.
- The GPS has a 3D fix or an RTK FIXED solution, and pre-arm checks pass.
- Mission Planner shows a correct position, but the drone's GPS date and time are missing or nonsensical, and logs have no real UTC timestamps.
A light show depends on every drone starting the show clock at the same instant. Skybrush takes that clock from GPS time, so a drone without a valid GPS time cannot be trusted to stay in step with the fleet.
Why it happens
A few terms first:
- UBX is the binary protocol of u-blox GPS receivers. The 626 uses a Unicore UM626N receiver, but it speaks a u-blox-compatible subset of UBX so that ArduPilot treats it as a u-blox GPS.
- NAV-PVT ("position, velocity, time") is the main UBX message. It carries the position, the time of week and the UTC date and time.
- GPS time is counted as a week number since 6 January 1980 plus the time of week in milliseconds. A flight controller needs both to know the absolute time.
ArduPilot's u-blox driver takes the time of week from NAV-PVT, but it takes the week number only from two other messages, NAV-SOL or NAV-TIMEGPS. A real u-blox receiver sends those. The 626 sends only NAV-PVT, and its firmware cannot be told to send anything else. So the week is never set, it stays at 0, and the flight controller never reports a valid GPS time. Skybrush sees that and raises TIMESYNC.
Two things that look like fixes but are not:
- Changing GPS parameters.
GPS_AUTO_CONFIGmust stay 0 on the 626, as the MA-RTK manual explains: the module ships pre-configured, and letting ArduPilot reconfigure it would overwrite that. And even with auto-configuration on, the module cannot add the missing messages. - Updating the 626. The UBX output is fixed in the receiver module's own firmware. There is no user setting or update that adds NAV-TIMEGPS.
That leaves the flight controller side, which is what the Robofusion build changes.
What the fix does
The firmware is the unmodified Skybrush CMCopter-4.6 source (ArduCopter V4.6.3) with one change in the u-blox GPS driver:
- If the receiver has never sent a GPS week, the driver works the week out from the UTC date and time inside NAV-PVT.
- The result is rounded against the receiver's own time of week, so a leap-second difference of a second or two cannot put it in the wrong week.
- It only acts when NAV-PVT flags its date and time as valid. Until then nothing changes.
- As soon as a receiver does send NAV-SOL or NAV-TIMEGPS, the driver uses that instead, exactly as before. Other GPS modules are not affected.
- When it takes effect, the flight controller prints one message:
u-blox 1: GPS week XXXX from NAV-PVT date.
It adds about 300 bytes to the firmware. The full source change and build record are published with the downloads; see technical details.
Step 1: Identify your flight controller and Skybrush version
Every flight controller type needs its own firmware file. Find the exact board name before you download anything.
-
Connect the drone to Mission Planner with its current firmware.
-
Open Flight Data → Messages. If the start-up lines have scrolled away, disconnect and connect again.
-
Look for lines like these (your values will differ):
ArduCopter V4.6.3 (5263d784)ChibiOS: 6a1f2d9cMicoAir743v2 0031002A 33335110 35353936- The first line is the firmware version. These downloads are for 4.6 (
ArduCopter V4.6.x). - The line with three groups of eight hex digits is the board line. The word before them is the board name, here
MicoAir743v2. That word must match the board name in the file you download.
- The first line is the firmware version. These downloads are for 4.6 (
The files below are built from Skybrush 4.6. If the first line shows 4.5 or 4.7, ask us for a matching build instead of changing version at the same time. Going from 4.7 back to 4.6 in particular is a downgrade: parameters renamed in 4.7 are not converted back.
Step 2: Download the firmware for your board
Release r1, built 2026-10-19 to 2026-10-22 from Skybrush CMCopter-4.6 commit 5263d784 (ArduCopter V4.6.3). Use the .apj file. The _with_bl.hex file is only for the DFU fallback in step 4.
Flight-proven means confirmed on a customer's Skybrush show fleet. Build-verified means the file compiles, fits in flash and contains the fix, but has not been flown yet.
| Your flight controller | Board name | Board ID | Status | Firmware | DFU fallback |
|---|---|---|---|---|---|
| MicoAir H743 V2 | MicoAir743v2 | 1179 | Flight-proven | .apj | _with_bl.hex |
| MicoAir H743 V2 AIO 45A | MicoAir743v2 | 1179 | Flight-proven | same file as the H743 V2 | same file as the H743 V2 |
| MicoAir H743 AIO 35A | MicoAir743-AIO | 1176 | Build-verified | .apj | _with_bl.hex |
| MicoAir F405 V2 | MicoAir405v2 | 1150 | Build-verified | .apj | _with_bl.hex |
| MicoAir F405 Mini | MicoAir405Mini | 1161 | Build-verified | .apj | _with_bl.hex |
| NxtPX4 V2 | NxtPX4v2 | 1159 | Build-verified | .apj | _with_bl.hex |
| Cube Orange | CubeOrange | 140 | Build-verified | .apj | _with_bl.hex |
| Cube Orange+ | CubeOrangePlus | 1063 | Build-verified | .apj | _with_bl.hex |
| Cube Black (Pixhawk 2.1) | CubeBlack | 9 ⚠ | Build-verified | .apj | _with_bl.hex |
| Pixhawk 1 (2 MB flash) | Pixhawk1 | 9 ⚠ | Build-verified | .apj | _with_bl.hex |
| Holybro Pixhawk 6C / 6C Mini | Pixhawk6C | 56 | Build-verified | .apj | _with_bl.hex |
| Holybro Pixhawk 4 | Pixhawk4 | 50 ⚠ | Build-verified | .apj | _with_bl.hex |
| Holybro Pixhawk 4 Mini | PH4-mini | 50 ⚠ | Build-verified | .apj | _with_bl.hex |
| Holybro Durandal | Durandal | 139 | Build-verified | .apj | _with_bl.hex |
| Matek H743 (WING / SLIM / MINI) | MatekH743 | 1013 ⚠ | Build-verified | .apj | _with_bl.hex |
| Matek H743, bidirectional DShot build | MatekH743-bdshot | 1013 ⚠ | Build-verified | .apj | _with_bl.hex |
| QioTek Zealot H743 | QioTekZealotH743 | 1036 | Build-verified | .apj | _with_bl.hex |
| SpeedyBee F405 V3 | speedybeef4v3 | 1082 | Build-verified | .apj | _with_bl.hex |
| SpeedyBee F405 V4 | speedybeef4v4 | 1136 | Build-verified | .apj | _with_bl.hex |
| Generic FMUv3 board | fmuv3 | 9 ⚠ | Build-verified, ask us first | .apj | _with_bl.hex |
| Generic FMUv5 board | fmuv5 | 50 ⚠ | Build-verified, ask us first | .apj | _with_bl.hex |
⚠ = board ID shared with other targets; read the warning below.
Check your download. SHA256SUMS.txt lists the checksum of every file. On Windows run certutil -hashfile <file> SHA256; on macOS or Linux run shasum -a 256 <file>. The result must match the line for your file.
The H743 V2 AIO 45A uses MicoAir743v2, the same file as the standalone H743 V2. The MicoAir743-AIO file is only for the older H743 AIO 35A. Flashing the 35A file on a 45A board is refused by Mission Planner. If you are not sure which board you have, the H743 AIO manual shows how to tell them apart.
Step 3: Back up your parameters
In Mission Planner: Config → Full Parameter List → Save. Keep one file per drone, named after the drone, for example drone03-before-626-fix.param. You need it if anything is reset and to roll back.
Step 4: Install the firmware
- Connect the drone by USB. Do not click Connect in Mission Planner, and close Skybrush Live or any other program that is talking to the drone.
- Setup → Install Firmware.
- Click Load custom firmware (bottom right).
- Select the
.apjfile for your board. - Follow the prompts. Mission Planner may ask you to unplug and re-plug USB. Wait until it reports the upload is complete and the board reboots.
If Mission Planner shows an error, note its exact text. "Board ID mismatch" means the file is for a different board: go back to step 1. "No response from board" usually means a charge-only USB cable, a hub, or another program holding the port.
If the normal method fails: DFU
Use this only when the normal method keeps failing.
- Make sure you have the parameter backup from step 3. A DFU flash can erase parameters.
- Hold the BOOT button while plugging in USB. The board appears as an "STM32 BOOTLOADER" device.
- Flash the
_with_bl.hexfile for your board with STM32CubeProgrammer, MicoConfigurator ordfu-util. The Firmware Flashing Guide walks through DFU in detail. - Unplug, re-plug, connect with Mission Planner and restore the parameter file if the parameters were reset.
Step 5: Check the parameters
- Reconnect and open Config → Full Parameter List.
- Confirm your parameters are still there. Compare with the backup if in doubt.
- Confirm
GPS_AUTO_CONFIG = 0. - Confirm the GPS settings are unchanged:
GPS1_TYPE(1 = auto or 2 = u-blox), theSERIALn_PROTOCOLandSERIALn_BAUDof the GPS port, and your RTCM / RTK settings. - If anything was reset, Load the backup file and Write Params, then reboot.
Step 6: Verify outdoors
With the drone outdoors and a GPS fix:
- Messages shows, once per boot, a line like
u-blox 1: GPS week 2441 from NAV-PVT date. The number is the current GPS week (about 2440 in October 2026). - The yellow TIMESYNC warning is gone in Skybrush Live.
- The UTC time the drone reports matches real UTC within about a second.
- Position, RTK status and pre-arm checks behave exactly as before.
- Fly a normal test flight on every drone before using the firmware in a show.
The fix only acts when NAV-PVT marks its UTC date and time as valid. If you have a 3D fix for several minutes and the message never appears, contact us with a screenshot of the Messages tab rather than flying a show.
Rolling back
- Setup → Install Firmware and install the official Skybrush firmware for your board again.
- Config → Full Parameter List → Load your backup file, then Write Params.
- Reboot and check the GPS settings.
Easy to confuse
Mission Planner will not catch every wrong file
Every firmware file carries a numeric board ID, and the bootloader on the flight controller refuses a file with a different ID. Some targets share an ID, so the check cannot tell them apart:
| Board ID | Targets with this ID |
|---|---|
| 9 | Pixhawk1, CubeBlack, fmuv3 |
| 50 | Pixhawk4, PH4-mini, fmuv5 |
| 1013 | MatekH743, MatekH743-bdshot |
| 1179 | MicoAir743v2, used by both the H743 V2 and the H743 V2 AIO 45A (the same file, so this one is safe) |
A wrong file from the first three groups installs without complaint and then runs with the wrong sensors or outputs. Always match the board name from the Messages tab exactly, and do not use fmuv3 or fmuv5 unless we have told you to.
.apj or _with_bl.hex?
The .apj contains only the firmware and is what Mission Planner's "Load custom firmware" expects. The _with_bl.hex contains the firmware and the bootloader, and is only for DFU recovery. It overwrites the bootloader, so use only the one for your exact board.
Skybrush and ArduCopter version numbers match
Skybrush 4.6 is ArduCopter 4.6 with Skybrush's show additions. The first line in Messages tells you which you have.
The firmware version text does not change
After flashing, Messages still shows ArduCopter V4.6.3 (5263d784). The GPS-week message in step 6 is how you know the fix is installed.
Need a different board or version?
If your flight controller is not in the table, or your fleet runs Skybrush 4.5 or 4.7, email support@robofusion.net with:
- a screenshot of the Mission Planner Messages tab right after connecting (you can blank out the serial number),
- the product name of the flight controller,
- how many drones, and the date of the show if there is one.
We build from the same source, so a new target is usually quick. Boards with only 1 MB of flash may not have room for Skybrush.
Alternatives that need no custom firmware
If you would rather stay on official Skybrush firmware, choose a module that sends the GPS week itself:
| Module | Why time works on official firmware | Trade-off against the 626 |
|---|---|---|
| MA-RTK-AIR-F9P | u-blox ZED-F9P sends the GPS week natively; PX4 also supported | higher price per drone |
| MA-RTK-AIR-982 | ArduPilot's Unicore NMEA driver takes the date from the NMEA messages; triple-band, dual-antenna heading | higher price and power per drone |
For a large fleet the 626 with this firmware is usually the cheapest way to centimeter positioning; one base station serves every drone.
Technical details for developers
- Base: Skybrush ArduPilot branch
CMCopter-4.6, commit5263d78433d4ed909f9394c84cf557b32bcdbcb5(ArduCopter V4.6.3). - Change: robofusion-pvt-gps-week.patch, touching only
libraries/AP_GPS/AP_GPS_UBLOX.cppand.h. - Week calculation:
week = round((unix_seconds + leap_seconds − 315964800 − iTOW_seconds) / 604800), whereunix_secondscomes from the NAV-PVT UTC date and time and 315964800 is the GPS epoch (1980-01-06) in Unix time. Rounding to the nearest week makes a leap-second offset harmless. - Testing: an independent test of the formula passes 1,305 cases, covering ordinary dates from 2020 to 2099, the seconds around GPS week rollover (Saturday 23:59:42 UTC), receivers whose leap-second count differs by up to ±2 s, and sub-second offsets. In ArduPilot SITL with a simulated receiver that sends only NAV-PVT, the patched driver reports the correct week and a valid UTC time, while the unpatched driver reproduces the missing GPS time. On hardware the fix is confirmed on a customer's Skybrush fleet flying MicoAir H743 V2 and H743 V2 AIO 45A boards.
- Build record: toolchain, flash headroom per board and checksums are in BUILD_INFO.md; the build script rebuilds any board.
- License: ArduPilot and Skybrush are GPLv3, and so are these builds. The source folder README has the complete corresponding source and the commands to reproduce a build.
FAQ
Does the TIMESYNC warning mean my RTK is not working? No. Position and RTK are unaffected. Only the absolute time is missing, and Skybrush needs that to keep a show in step.
Will this firmware change how my drones fly? No. The only change is in how the GPS week is worked out. Flight control, Skybrush show handling and every other part are the unmodified Skybrush 4.6 source.
What happens if I later fit a different GPS? Nothing special. Receivers that send NAV-SOL or NAV-TIMEGPS are handled exactly as in the official firmware, and non-u-blox receivers use their own drivers.
Can I use the 626 with PX4? No. The 626 is supported on ArduPilot only, and this fix is for ArduPilot-based firmware.
Do I need one firmware file per drone? One file per flight controller type. Every drone with the same flight controller uses the same file.
Is there a fix for official Skybrush coming? We have submitted the change to ArduPilot as pull request #34848. Whether and when it is merged, and when Skybrush picks it up, is up to those projects. Until a release includes it, use these builds or a module from the alternatives.
Where to buy
Volume pricing for 10 or more modules is available: email info@robofusion.net with your fleet size. Ships worldwide from the Robofusion Hong Kong warehouse.
- MA-RTK-AIR-626 — budget RTK for swarms & light shows
- MA-RTK-BASE Kit — one base station for the whole fleet
- RTK Complete System Bundle — base station, 626 rover and LR900-F radio pair
- MicoAir H743 V2 flight controller and H743 V2 AIO 45A, both on the
MicoAir743v2build that has been confirmed in a show fleet
Related guides
- MA-RTK Series User Manual — 626 specifications, wiring and ArduPilot parameters
- RTK Setup Guide — base station and broadcasting corrections to a fleet
- What Is RTK? — why light shows need centimeter positioning
- WiFi Link multi-drone networking — one network for a Skybrush fleet
- Firmware Flashing Guide —
.apj,_with_bl.hex, bootloaders and DFU explained - Field Notes: tracing the missing GPS week — how we found the cause, designed the fix and tested it
Written and maintained by the Robofusion engineering team.