Skip to content

feat(boards): add Amovlab Flycore support#27407

Open
amovlgf wants to merge 21 commits into
PX4:mainfrom
amovlgf:pr/amovlab-flycore-board
Open

feat(boards): add Amovlab Flycore support#27407
amovlgf wants to merge 21 commits into
PX4:mainfrom
amovlgf:pr/amovlab-flycore-board

Conversation

@amovlgf

@amovlgf amovlgf commented May 20, 2026

Copy link
Copy Markdown
Contributor

boards: add Amovlab Flycore support

PR Description

Solved Problem

PX4 does not currently include an upstream board target for the Amovlab Flycore flight controller.

This means Flycore users need to maintain the board port out-of-tree in a downstream PX4 fork.

There is no linked GitHub issue; this is a new board port.

Solution

This PR adds board support for the Amovlab Flycore flight controller, an STM32H743-based FMU.

The new board support includes:

  • boards/amovlab/flycore/ NuttX configuration, bootloader configuration, and board-level drivers (init.c, spi.cpp, i2c.cpp, timer_config.cpp, can.c, etc.)
  • amovlab_flycore_default and amovlab_flycore_bootloader targets
  • Firmware metadata using board_id 106 in firmware.prototype
  • Onboard sensor startup for BMI088, ICM42688P, and MS5611 in rc.board_sensors
  • Board manifest update for Flycore hardware: no PX4IO coprocessor and onboard USB present
  • UAVCAN support with BOARD_UAVCAN_TIMER_OVERRIDE=6 because the buzzer uses TIM2 on PA15
  • English and Chinese flight controller documentation:
    • docs/en/flight_controller/amovlab_flycore.md
    • docs/zh/flight_controller/amovlab_flycore.md
  • Manufacturer-supported autopilot index entries

The board has no onboard magnetometer. External I2C1 and I2C4 are documented for optional user-installed GPS/compass modules. CONFIG_COMMON_MAGNETOMETER is enabled so compatible external compass drivers can be started manually from NSH, but the default firmware does not start any magnetometer driver.

Changelog Entry

For release notes:

Feature: Add Amovlab Flycore board support
Documentation: Add en/zh flight controller pages for Amovlab Flycore

Alternatives

  • Keep Flycore support out-of-tree in a downstream PX4 fork.
  • Drop CONFIG_COMMON_MAGNETOMETER, CONFIG_COMMON_INS, or CONFIG_MODULES_UXRCE_DDS_CLIENT to reduce flash usage. The current default build uses about 94.6% of the 1920 KB application flash region.
  • Add a dedicated ROMFS airframe ID instead of using the default SYS_AUTOSTART value for FLYCORE0000.

Test coverage

Build environment:

  • Ubuntu
  • arm-none-eabi-gcc 10.2.1

Build tests:

  • make amovlab_flycore_default — pass
    • FLASH: 1859644 B / 1920 KB, about 94.6%
  • make amovlab_flycore_bootloader — pass

Hardware tests on Amovlab Flycore with the default firmware:

  • Boot, USB, and NSH — OK
  • ver all — reports:
    • HW arch: AMOVLAB_FLYCORE
    • HW type: FLYCORE000000
    • HW version/revision: 0x000
  • Onboard accelerometer, gyroscope, and barometer — OK
    • verified with listener sensor_accel
    • verified with listener sensor_gyro
    • verified with listener sensor_baro
  • No onboard magnetometer — expected; no sensor_mag is published unless a user starts an external compass driver
  • Tone alarm / UAVCAN timer configuration — OK on bench
  • QGroundControl firmware flashing with board_id 106 — OK

Context

  • Vendor: Amovlab
  • Board target: make amovlab_flycore_default
  • Bootloader target: make amovlab_flycore_bootloader
  • Board directory: boards/amovlab/flycore/
  • Fork branch: amovlgf:pr/amovlab-flycore-board

Flycore is similar to Pixhawk 6C class FMUs, with the following board-specific differences:

  • No PX4IO
  • No onboard magnetometer
  • Dual onboard IMUs on SPI
  • MS5611 barometer on SPI
  • Dual external CAN
  • 10 FMU PWM outputs

@github-actions github-actions Bot added scope:build-system CMake, Kconfig, board config, or build tooling. scope:boards Board-specific changes or hardware definitions. scope:docs labels May 20, 2026
Comment thread boards/amovlab/flycore/src/hw_config.h Outdated
Comment thread boards/amovlab/flycore/src/hw_config.h Outdated
@github-actions

github-actions Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

No broken links found in changed files.

@amovlgf amovlgf changed the title boards: add Amovlab Flycore support feat(boards): add Amovlab Flycore support May 20, 2026
Comment thread boards/amovlab/flycore/src/hw_config.h Outdated
#endif

#ifndef BOOT_DEVICES_FILTER_ONUSB
# define BOOT_DEVICES_FILTER_ONUSB USB0_DEV|SERIAL0_DEV|SERIAL1_DEV

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[error] bugprone-macro-parentheses [error]
macro replacement list should be enclosed in parentheses

Suggested change
# define BOOT_DEVICES_FILTER_ONUSB USB0_DEV|SERIAL0_DEV|SERIAL1_DEV
# define BOOT_DEVICES_FILTER_ONUSB (USB0_DEV|SERIAL0_DEV|SERIAL1_DEV)

@github-actions github-actions Bot added the kind:feature Request or change that adds new functionality. label May 20, 2026
@@ -0,0 +1,85 @@
# Amovlab Flycore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove all changes in the docs/zh path. If you want to translate this, you join crowdin and provide a translation there - then that round-trips from the English version.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — I have removed all changes under the docs/zh path in the latest update. Thanks for clarifying the translation workflow.

Comment thread docs/en/flight_controller/amovlab_flycore.md
Comment on lines +10 to +14
<!--
Insert description

Insert image
-->

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minimally we need an image and description here. That tells us things like what are the ports available.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — I have added the board image and expanded the description to include the available ports and board-level details.

Comment thread docs/en/flight_controller/amovlab_flycore.md Outdated

## Where to Buy {#store}

TBD

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where can people get this

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — I have added the availability/purchase information for the board.

Comment thread docs/en/flight_controller/amovlab_flycore.md
Comment thread docs/en/flight_controller/amovlab_flycore.md Outdated
Comment thread docs/en/flight_controller/amovlab_flycore.md
Comment thread docs/en/flight_controller/amovlab_flycore.md
Comment thread docs/en/flight_controller/amovlab_flycore.md
Comment thread docs/en/flight_controller/amovlab_flycore.md
@amovlgf

amovlgf commented May 22, 2026

Copy link
Copy Markdown
Contributor Author

@hamishwillee
Updated. I expanded the Flycore documentation with the standard flight-controller sections, including specifications, connections, pinouts, power, serial port mapping, RC, GPS/compass, telemetry, PWM outputs, SD card, debug port, and maintenance information.

I also corrected the TELEM2 flow-control entry because the physical TELEM2 connector only exposes GND/RX/TX, and added the mechanical dimensions, mounting hole spacing, weight, and PWM rail power information.

The Where to Buy link is not available yet and will be added later.

@amovlgf

amovlgf commented May 22, 2026

Copy link
Copy Markdown
Contributor Author

The Flycore documentation link-check issues have been fixed separately.

The current T3: Build Site failure appears unrelated to the Flycore documentation changes.

The build fails while processing:

docs/ko/frames_rover/index.md

with:

Could not resolve "../../assets/airframes/rover/axial_trail_honcho.png"

This does not seem to be caused by docs/en/flight_controller/amovlab_flycore.md, and this PR does not modify the Korean rover documentation or rover image assets.

Please let me know if you would like me to wait for the upstream docs issue to be resolved and then update the branch again.

@github-actions github-actions Bot added vehicle:rover Rover-specific behavior. scope:simulation SITL, Gazebo, jmavsim, lockstep, or simulated sensors. labels May 27, 2026
@amovlgf

amovlgf commented May 27, 2026

Copy link
Copy Markdown
Contributor Author

Hi @hamishwillee , all checks are green now and the review comments have been addressed. Could you please take another look when convenient? Thanks!

Comment thread src/modules/simulation/gz_plugins/gstreamer/README.md Outdated
@hamishwillee

Copy link
Copy Markdown
Contributor

Hi @amovlgf

Thanks for your updates - really helpful. One last docs thing. What connectors does the board use - I cant see. Are they the JS GH connectors defined in the Pixhawk standard connectors? If so, for which ports. If not, can you state what are used.

It matters if people want to connect to them and easily get hold of a cable.

@farhangnaderi Can you do a technical review of the board port, or suggest someone else please? I'm very nearly happy with the docs.

@amovlgf

amovlgf commented May 27, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for pointing this out. I have updated the Flycore documentation to clarify the connector types.

The external peripheral connectors use JST-GH 1.25 mm pitch connectors. The Pinouts section now documents the connector pin definitions, with POWER using XT30. USB, SD card, RTK antenna, and exposed pads are documented separately.

Please let me know if you would like the connector table adjusted to match a specific Pixhawk connector naming convention.

@hamishwillee

Copy link
Copy Markdown
Contributor

The external peripheral connectors use JST-GH 1.25 mm pitch connectors. The Pinouts section now documents the connector pin definitions, with POWER using XT30. USB, SD card, RTK antenna, and exposed pads are documented separately.

Please let me know if you would like the connector table adjusted to match a specific Pixhawk connector naming convention.

What you have done is fine. If you want and it is accurate it is usual to note that "Flycore uses Pixhawk standard connectors" in the introduction - because it saves people a lot of effort.

If not all of them match, such as the debug port, you might add "including X, Y, Z" for supported ports, or "with the exception of the Debug Port, X, Y, Z" depending on which ports are and are not. I'm not checking ;-)

@amovlgf

amovlgf commented May 28, 2026

Copy link
Copy Markdown
Contributor Author

Thanks, that makes sense. I checked the Flycore connector definitions against DS-009 and avoided claiming that the board uses Pixhawk standard connectors.

I updated the Connections section to say that Flycore uses Pixhawk-style port names for common interfaces such as TELEM, GPS, CAN, I2C, and RC, while the fitted connectors and pin assignments are board-specific and are not claimed to fully comply with the DS-009 Pixhawk Connector Standard. The Pinouts section is now called out as the authoritative connector definition for this board.

POWER, USB, the SD card slot, RTK antenna interfaces, and the exposed buzzer, SWD, and UART8 debug console pads remain documented separately.

@amovlgf
amovlgf requested a review from farhangnaderi July 2, 2026 02:07
farhangnaderi
farhangnaderi previously approved these changes Jul 2, 2026

@farhangnaderi farhangnaderi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@amovlgf Thanks, you need one more rebase. Conflicts again. Approved from my side.

@mrpollo

mrpollo commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Note the PID for the usb identifier hasn't been assigned yet.

pidcodes/pidcodes.github.com#1232

@amovlgf
amovlgf force-pushed the pr/amovlab-flycore-board branch from 7493192 to 444cc48 Compare July 3, 2026 01:53
@amovlgf

amovlgf commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

@amovlgf Thanks, you need one more rebase. Conflicts again. Approved from my side.

Done, rebased on latest upstream/main. Thanks!

@julianoes

Copy link
Copy Markdown
Contributor

@amovlgf pid.codes requires projects to be open source software and hardware. Is your hardware open source? If not, you will have to go another route, e.g. MCS or Dronecode.

@amovlgf

amovlgf commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

@amovlgf pid.codes requires projects to be open source software and hardware. Is your hardware open source? If not, you will have to go another route, e.g. MCS or Dronecode.

Yes, our hardware is open source. We will provide the public hardware design files and documentation link for verification.

@amovlgf

amovlgf commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

@mrpollo
Thanks for the heads-up. The Flycore USB ID has now been officially allocated through the Openmoko USB OUI registry as VID 0x1d50 and PID 0x61a0: openmoko/openmoko-usb-oui#79

I updated both the bootloader and application USB configurations, regenerated the bootloader binary, and verified that both make amovlab_flycore_bootloader and make amovlab_flycore_default build successfully.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind:feature Request or change that adds new functionality. scope:boards Board-specific changes or hardware definitions. scope:build-system CMake, Kconfig, board config, or build tooling. scope:docs scope:simulation SITL, Gazebo, jmavsim, lockstep, or simulated sensors. vehicle:rover Rover-specific behavior.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants