Transmitter Firmware STM32F072 · BARE-METAL RUST

Clean-slate Rust OS for FlySky FS-i6X & FS-i6S.

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.

FS-i6X Overview ↓ FS-i6S Overview ↓ Flashing Guides (DFU) ↓
Tactile Control Platform

FlySky FS-i6X

v0.25.0

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.

CRSF & ELRS (Ext) 115.2k–1.8M Baud · Native Configurator
AFHDS 2A (Int) 260 Hz Hard Real-Time (Sub-4ms Sync)
USB & CLI 100 Hz HID Simulator · CDC Serial CLI
Hardware Mods Aux Switches & Analog Expansion (Up to 16-Ch)
User Interface Tactile Buttons & Hardware Trim Matrix
Safety & Recovery <2 ms Watchdog · Inward Trims DFU
GitHub Repo ↗ Flashing Steps
Touchscreen & Soft-Power

FlySky FS-i6S

v0.3.0

Modern ergonomic radio variant featuring an integrated FocalTech capacitive touchscreen, electronic power latching, dual rear tactile buttons, and self-centering gimbals.

CRSF & ELRS (Ext) 115.2k–1.8M Baud · Native Configurator
AFHDS 2A (Int) 260 Hz Hard Real-Time (Sub-4ms Sync)
USB & CLI 100 Hz HID Simulator · CDC Serial CLI
Hardware Mods Aux Switches & Analog Expansion (Up to 16-Ch)
User Interface Capacitive Touchscreen & Dual Rear Buttons
Safety & Recovery <2 ms Watchdog · Zero-Disassembly DFU
GitHub Repo ↗ Flashing Steps
Memory Engineering

Deterministic Static Allocation

Both firmwares eliminate dynamic memory allocators entirely. All data buffers, protocol queues, LCD framebuffers, and parameter pools are allocated at compile time.

FS-i6X Allocation

FS-i6X On-Chip Budget

~9.5 KB Headroom

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.

Flash & SRAM Utilization ~9.5 KB AVAILABLE
Flash ROM: 110.5 KB App 9.5 KB Free (~7.9%)
0 KB 110.5 KB 120 KB (8 KB Store)
Static SRAM: 8.9 KB (.data + .bss) >7.0 KB Stack (~44%)
0 KB 8.9 KB Static 16 KB Total
FS-i6S Allocation

FS-i6S On-Chip Budget

>13.8 KB Headroom

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.

Flash & SRAM Utilization >13.8 KB AVAILABLE
Flash ROM: 106.2 KB App >13.8 KB Free (~11.5%)
0 KB 106.2 KB 120 KB (8 KB Store)
Static SRAM: ~8.8 KB (.data + .bss) >7.1 KB Stack (~44.5%)
0 KB 8.8 KB Static 16 KB Total
Flashing Guides

Zero Risk. Permanent Factory ROM DFU.

Uses the STM32F072's permanent factory ROM bootloader. Fully reversible: reflash stock backup or OpenI6X anytime.

FS-i6X Flashing

FlySky FS-i6X Workflow

Entering DFU Mode:

  • From OpenI6X or flysky-i6x-rs: Hold Roll Left + Yaw Right trims inward while powering on.
  • First-time flash from stock firmware: Temporarily bridge the two R53 solder pads on the PCB with tweezers while powering on.
CLI (dfu-util) — STM32 (0483:df11) or APM32 (314b:0106)
# 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
FS-i6S Flashing

FlySky FS-i6S Workflow

Entering DFU Mode (Zero Disassembly):

  • Hold both Rear Buttons simultaneously while pressing the power button.
  • Or select Reboot to DFU in the touch system menu, or send dfu over the USB CDC terminal.
CLI (dfu-util) — STM32F072
dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D flysky_i6s.bin
Hardware Specifications

FS-i6X & FS-i6S Comparison Matrix

Direct register-level breakdown of both platforms.

Microcontroller & Core
STMicroelectronics STM32F072VB (Cortex-M0 @ 48 MHz)
128 KB Flash (120 KB Code / 8 KB Storage) · 16 KB SRAM
Primary RF Transceiver
Amiccom A7105 @ 260 Hz (3.85 ms Packet Sync)
AFHDS 2A protocol via SPI1 + TIM16 periodic interrupt
External Module Protocol
CRSF / ExpressLRS on USART2 (115.2k – 1.8M)
128B interrupt ring buffer, native parameter configurator, hardware power switch
Display Subsystem
ST7567 128×64 Monochrome LCD
8-bit parallel bus, decoupled 30 Hz throttling (<1.2 ms flush)
User Input Hardware
i6X: Tactile Matrix // i6S: FT6236 Touchscreen & Dual Rear Buttons
Rear buttons support tap & swipe · Autonomous DMA ADC scanning of sticks, pots, and auxiliary expansion
Power Management
i6X: Mechanical Switch // i6S: Electronic Power Latch
i6S soft-shutdown hold detection (≥1.5s) with safe Flash sync and status LED drive
Safety & Watchdog
Independent Hardware Watchdog (pac::IWDG)
2.0s timeout, LSI isolation, <2 ms warm reset recovery bypassing safety traps