Skip to content

Commit 247a256

Browse files
ric96aescolar
authored andcommitted
board: arm: add flysky fs_i6s rc controller
Add board support for the Flysky FS-i6s controller Signed-off-by: Sahaj Sarup <sahajsarup@gmail.com>
1 parent 4791751 commit 247a256

12 files changed

Lines changed: 628 additions & 0 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# FS_I6S board configuration
2+
3+
# Copyright (c) 2026 Sahaj Sarup
4+
# SPDX-License-Identifier: Apache-2.0
5+
6+
if BOARD_FS_I6S
7+
8+
config ADC_STM32_DMA
9+
default y if ADC
10+
11+
endif # BOARD_FS_I6S
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Copyright (c) 2026 Sahaj Sarup
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
config BOARD_FS_I6S
5+
select SOC_STM32F072XB

boards/flysky/fs_i6s/board.cmake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
# Copyright (c) 2026 Sahaj Sarup
4+
# SPDX-License-Identifier: Apache-2.0
5+
6+
# keep first
7+
board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
8+
board_runner_args(stm32cubeprogrammer "--port=swd" "--reset-mode=hw")
9+
board_runner_args(jlink "--device=STM32F072VB" "--speed=4000")
10+
11+
# keep first
12+
include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
13+
include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake)
14+
include(${ZEPHYR_BASE}/boards/common/openocd-stm32.board.cmake)
15+
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)

boards/flysky/fs_i6s/board.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
board:
2+
name: fs_i6s
3+
full_name: FlySky FS-i6S
4+
vendor: flysky
5+
socs:
6+
- name: stm32f072xb
14.5 KB
Loading

boards/flysky/fs_i6s/doc/index.rst

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
.. zephyr:board:: fs_i6s
2+
3+
Overview
4+
********
5+
The FlySky FS-i6s is a 10-channel 2.4GHz remote controller transmitter commonly
6+
used for RC multirotors and fixed-wing aircraft. The internal hardware is driven
7+
by an ST STM32F072VB microcontroller. It features a capacitive
8+
touchscreen, physical gimbals, switches, push buttons, and an integrated RF
9+
module.
10+
11+
Hardware
12+
********
13+
14+
- STM32F072VB in LQFP100 package
15+
- ARM® 32-bit Cortex®-M0 CPU
16+
- 48 MHz max CPU frequency
17+
- VDD from 2.0 V to 3.6 V
18+
- 128 KB Flash
19+
- 16 KB SRAM
20+
- GPIO with external interrupt capability
21+
- 12-bit ADC with 39 channels
22+
- 12-bit D/A converters
23+
- RTC
24+
- General Purpose Timers (12)
25+
- USART/UART (4)
26+
- I2C (2)
27+
- SPI (2)
28+
- CAN
29+
- USB 2.0 full speed interface
30+
- DMA Controller
31+
32+
Supported Features
33+
==================
34+
35+
.. zephyr:board-supported-hw::
36+
37+
Default Zephyr Peripheral Mapping:
38+
==================================
39+
40+
LEDs and Audio
41+
--------------
42+
* **LCD Backlight:** ``PF3`` (Screen backlight control)
43+
* **Left Power LED:** ``PD10`` (Blue LED under the left power button)
44+
* **Right Power LED:** ``PD11`` (Blue LED under the right power button)
45+
* **Buzzer:** ``PA8`` (Piezo buzzer, can be driven by ``TIM1_CH1``)
46+
47+
Buttons and Power Management
48+
----------------------------
49+
.. note::
50+
The two physical power buttons must be pressed simultaneously to trigger the associated GPIO.
51+
Single button presses cannot be read independently.
52+
53+
* **Power Buttons:** ``PB14`` (Both power buttons pressed together)
54+
* **Rear Left Button:** ``PA9`` (Tactile push button on the back)
55+
* **Rear Right Button:** ``PA10`` (Tactile push button on the back)
56+
* **Powerdown Trigger:** ``PB15`` (Used to trigger system power off)
57+
58+
Analog Inputs (ADC)
59+
-------------------
60+
All gimbals, potentiometers, and toggle switches are read using the STM32's
61+
ADC multiplexer.
62+
63+
* **Right Stick L/R:** ``PA0``, ``ADC_CH0`` (Right gimbal horizontal axis)
64+
* **Right Stick U/D:** ``PA1``, ``ADC_CH1`` (Right gimbal vertical axis)
65+
* **Left Stick U/D:** ``PA2``, ``ADC_CH2`` (Left gimbal vertical axis, throttle)
66+
* **Left Stick L/R:** ``PA3``, ``ADC_CH3`` (Left gimbal horizontal axis)
67+
* **Switch A (Left):** ``PA4``, ``ADC_CH4`` (2-way toggle switch)
68+
* **Switch B (Left):** ``PA5``, ``ADC_CH5`` (3-way toggle switch)
69+
* **Jog Wheel Left:** ``PA6``, ``ADC_CH6`` (Left proportional shoulder wheel)
70+
* **Jog Wheel Right:** ``PA7``, ``ADC_CH7`` (Right proportional shoulder wheel)
71+
* **Switch C (Right):** ``PB0``, ``ADC_CH8`` (3-way toggle switch)
72+
* **Switch D (Right):** ``PB1``, ``ADC_CH9`` (2-way toggle switch)
73+
* **Battery Voltage:** ``PC0``, ``ADC_CH10`` (Requires scaling, Divider:
74+
R9=10kΩ, R10=5.1kΩ to GND)
75+
76+
Display (Sitronix ST7567)
77+
-------------------------
78+
The LCD uses a Sitronix ST7567 controller and is wired to the MCU using an
79+
8-bit parallel interface.
80+
81+
* **LCD_D0 - D7:** ``PE0`` - ``PE7`` (8-bit Data Bus)
82+
* **LCD_RS:** ``PB3`` (Register Select / Data Command)
83+
* **LCD_RST:** ``PB4`` (Hardware Reset)
84+
* **LCD_RW:** ``PB5`` (Read/Write)
85+
* **LCD_RD:** ``PD7`` (Read enable)
86+
* **LCD_CS:** ``PD2`` (Chip Select)
87+
88+
Touch Controller (Focaltech FT6236)
89+
-----------------------------------
90+
The capacitive touch overlay is driven by an FT6236 communicating over ``I2C1``.
91+
92+
* **TOUCH_SCL:** ``PB8`` (I2C1 Clock)
93+
* **TOUCH_SDA:** ``PB9`` (I2C1 Data)
94+
* **TOUCH_INT:** ``PC12`` (Interrupt out from FT6236)
95+
* **TOUCH_RST:** ``PA15`` (Hardware Reset)
96+
97+
USART
98+
-----
99+
100+
- **UART_1_TX:** ``PB6``
101+
- **UART_1_RX:** ``PB7``
102+
103+
RF Module (For Reference Only, Not Used)
104+
----------------------------------------
105+
The internal RF module is labeled ``FS-HS060``. It contains an XL7105
106+
transceiver and PA/LNA chips.
107+
108+
* **SPI Lines:** ``PE15`` (SDIO), ``PE13`` (SCK), ``PE12`` (SCS)
109+
* **Control Lines:** ``PE11`` (RF1), ``PE10`` (RF0), ``PE8`` (RX-W),
110+
``PE9`` (TX-W)
111+
* **Interrupts:** ``PB2`` (GIO2), ``PE14`` (GIO1)
112+
113+
Programming and Debugging
114+
*************************
115+
116+
.. zephyr:board-supported-runners::
117+
118+
119+
SWD Interface
120+
=============
121+
The PCB features labeled test points for the Serial Wire Debug (SWD) interface,
122+
making it easy to solder a header for an ST-Link or J-Link programmer. These
123+
are also accessible via the small ``J4`` connector on the board:
124+
125+
* **SWDIO**
126+
* **SWCLK**
127+
* **NRST**
128+
* **GND**
129+
130+
DFU Bootloader
131+
==============
132+
Because the STM32F072 has a built-in USB DFU bootloader, you can
133+
flash Zephyr without a dedicated SWD programmer. Depending on your unit, the
134+
internal flash may need its write protect bit turned off using ST-Link SWD.
135+
136+
To enter DFU mode:
137+
138+
1. Locate resistors ``R59`` and ``R60`` (connected to the ``BOOT1`` pin).
139+
2. Short ``R60``.
140+
3. Connect the batteries (or USB).
141+
4. Press the two power buttons simultaneously.
142+
5. The device should enumerate on your PC as an "STM32 BOOTLOADER" device,
143+
allowing you to flash the Zephyr ``.bin`` using ``dfu-util``.
144+
145+
146+
Flashing an Application
147+
-----------------------
148+
149+
The dfu-util runner is supported on this board and so a sample can be built and
150+
tested easily.
151+
152+
.. zephyr-app-commands::
153+
:zephyr-app: samples/basic/blinky
154+
:board: fs_i6s
155+
:goals: build flash
156+
157+
158+
References
159+
**********
160+
* Hardware reverse-engineering and pinout source:
161+
`fishpepper.de - OpenGround
162+
<https://fishpepper.de/2016/09/15/openground-part-1-components-pinout/>`_

0 commit comments

Comments
 (0)