Deterministic firmware written directly for FlySky radios. Pure #![no_std] Rust delivers 260 Hz RF frame sync, native CRSF / ExpressLRS on USART2, Catmull-Rom spline curves, and instant sub-2ms hardware watchdog recovery without dynamic heap allocations.
The classic workhorse radio pairing mechanical tactile switches, dedicated digital trims, and high-precision potentiometer gimbals with full expansion headers for aux switches, external RF bays, and hardware debugging.
Modern ergonomic radio variant featuring an integrated FocalTech capacitive touchscreen, electronic power latching, dual rear tactile buttons, and self-centering gimbals.
Both firmwares eliminate dynamic memory allocators entirely. All data buffers, protocol queues, LCD framebuffers, and parameter pools are allocated at compile time.
Consumes 110,552 bytes (~110.5 KB) Flash in the 120 KB partition and 8,940 bytes (~8.9 KB) static SRAM (.data 7,924 B + .bss 1,016 B), leaving a guaranteed >7.0 KB stack safety margin in 16 KB SRAM.
Consumes ~106.2 KB Flash (.text 100.9 KB + .data 7.8 KB) in the 120 KB partition and ~8.8 KB static SRAM, leaving a guaranteed >7.1 KB stack safety margin in 16 KB SRAM.
Uses the STM32F072's permanent factory ROM bootloader. Fully reversible: reflash stock backup or OpenI6X anytime.
Entering DFU Mode:
R53 solder pads on the PCB with tweezers while powering on.# STM32F072
dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D flysky_i6x.bin
# APM32F072
dfu-util -d 314b:0106 -a 0 -s 0x08000000:leave -D flysky_i6x.bin
Entering DFU Mode (Zero Disassembly):
dfu over the USB CDC terminal.dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D flysky_i6s.bin
Direct register-level breakdown of both platforms.