OmnibusF4SD target support & request for development guidance


My name is Nathan. I have helped with the Betaflight code for the Omnibus series of flight controllers and given the popularity of the recent Omnibus-Ardupilot port, I thought it fitting to start developing PX4 support for this target.

Specifically, I am working on the OmnibusF4SD target, which has an MPU6000, BMP280, SDcard, 50Ohm shunt resistor, and a MAX7456 chip for the OSD.

I was hoping to add native OSD support for this now widely available and inexpensive board. My hope is to use this hardware on a more capable software stack with a more permissive license than Ardupilot or Betaflight.

Sorry these are not hyperlinked, I am not allowed to post 5 hyperlinks because I am a new user:

As a first step, I have added target support to the bootloader here: GitHub - nathantsoi/Bootloader at omnibusf4sd

PR: initial omnibusf4sd target support by nathantsoi · Pull Request #101 · PX4/PX4-Bootloader · GitHub

I am working on basic firmware for the board here (v1.7.4): (working, see below for more details)

and here (master, does not build currently): (does not compile currently, see below for more details)


Note that I have made an un-related change in these branches to add support for building within a pyenv-virtualenv. This can be removed or separated into it’s own commit before merging.

Any guidance on the following questions or other general advice would be much appreciated. My apologies in advance if some of these questions have obvious answers, but I greatly appreciate your pointers as I have not spent much time in the PX4 code, yet.

Development Questions:

  • after rebasing my 1.7.4 code against master and removing the geo libraries, adding lib/FlightTasks, I get the following errors, including a flash overflow: omnibusf4sd-master build log · GitHub what did I miss?

  • on the 1.7.4 branch, my timer configuration or fmu driver configuration is not correct, as after enabling pwm test via nsh, i see:

  • binding nsh to uart 1, boot log is fine and the nsh> prompt appears, but the uart rx input interrupt never fires when characters are sent over the uart. uart over mavlink via the usb port is how I have been connecting:

Tools/ /dev/tty.usbmodem1

  • the baro fails to start on boot, but can be started manually via nsh later. here is the boot log:

[boot] Fault Log info File No 4 Length 3177 flags:0x01 state:1 j�O��� I���o%o
[boot] Fault Log is Armed
sercon: Registering CDC/ACM serial driver
sercon: Successfully registered the CDC/ACM serial driver
FW git-hash: 805b598fac6488952f46a2c7fa854bef93487629
FW version: 1.7.4 0 (17236992)
OS: NuttX
OS version: Release 7.22.0 (118882559)
OS git-hash: efc3d9e92bd10623ab3025f012fd7d481e1a7267
Build datetime: Apr 13 2018 23:52:52
Build uri: localhost
Toolchain: GNU GCC, 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496]
MFGUID: 3134383531334715003a0027
MCU: STM32F???, rev. Z
UID: 3A0027:31334715:31343835
[hardfault_log] Fault Log is Armed
nsh: tone_alarm: command not found
INFO [tune_control] Publishing standard tune 1
WARN [mtd] MTD not enabled, skipping.
INFO [param] selected parameter default file /fs/microsd/params
nsh: rgbled: command not found
nsh: blinkm: command not found
nsh: rgbled_pwm: command not found
ERROR [param] Parameter SYS_USE_IO not found
INFO [dataman] Unknown restart, data manager file ‘/fs/microsd/dataman’ size is 350216 bytes
MPU6000 on SPI bus 1 at 1 (1000 KHz)
INFO [mpu6000] accel cutoff set to 30.00 Hz
INFO [mpu6000] gyro cutoff set to 80.00 Hz
WARN [hmc5883] no device on bus 2 (type: 2)
WARN [bmp280] bus option number is 1
ERROR [bmp280] driver start failed
ERROR [param] Parameter SENS_EN_LL40LS not found
ERROR [param] Parameter SENS_EN_LL40LS not found
ERROR [param] Parameter SENS_EN_SF0X not found
ERROR [param] Parameter SENS_EN_SF1XX not found
ERROR [param] Parameter SENS_EN_MB12XX not found
ERROR [param] Parameter SENS_EN_TR����Ŵ�کٸ"�B;��C��;�R�K�����/��Dz��Z9�|�����{�����z�y��Ŵ��陸b�B��ׯ��/G���’�<���3u&#�o�}�o�����k����?���Ƭ��E4T66��� [load_mon] stack check enabled
ERROR [param] Parameter UAVCAN_ENABLE not found
ERROR [param] Parameter SENS_EN_LL40LS not found
ERROR [param] Parameter TRIG_MODE not found
INFO [mavlink] mode: OSD, data rate: 1000 B/s on /dev/ttyS0 @ 57600B
WARN [mavlink] hardware flow control not supported
ERROR [param] Parameter UAVCAN_ENABLE not found
px4flow [196:100]
WARN [px4flow] scanning I2C buses for device…
INFO [mavlink] mode: Config, data rate: 800000 B/s on /dev/ttyACM0 @ 57600B




That’s certainly an interesting target - assuming we can get a critical mass of developers going to sustain the maintenance of it.

I’ve followed the discussion around the PR on Github - are all of the questions you posted here still open or are there some that @dagar or I still need to answer?

Thanks! Tracking on github is good. @dagar (and everyone else helping out) is super helpful.

Re. developer support, agreed. I’ve certainly seen the maintenance work new targets can add to a project and would like to minimize this as much as possible going forward, while bringing the integrated OSD to px4.

I´m trying to find smaller controllers 22mm that could run PX4. There are a lot of Omnibus F4 (SD) mini available that offer similar architecture with only one difference instead of a sdcard slot there is an 8 Mb spi flash (25Q64).
MTD activated -> WARN [mtd] MTD not enabled, skipping.
without MTD, settings, calibrations and missions could not be saved.

What has to be changed to activate MTD access to this flash
in cmake configs and drivers boards

Allow to use this flash would support a lot more Omni F4 targets especially the smaller ones.

hi Nathan!

Please, explain to a newcomer how to manually initialize driver for the Baro.

The message I get upon starting my Pixhawk PX4 is:

“Check BRD_TYPE: Baro: unable to initialize driver”




I’ve tried to flash OmnibusF4 Pro V3 and I’ve only received the error that the built firmware is bigger that available flash on microcontroller. I’ve used git tag 1.8.2. Do you have similar issue? Do you know how to resolve it? My steps below

  1. Flash bootloader
git clone --recursive
cd Bootloader
make omnibusf4sd_bl
dfu-util -a 0 --dfuse-address 0x08000000 -D  build/omnibusf4sd_bl/omnibusf4sd_bl.bin
  1. Flash PX4 Firmware
git clone
git checkout v1.8.2
make omnibus-f4sd_default upload

EDIT. It works for v1.9.0

currently I got on Omnibus F4 SD targets with virtual com port:
Firmware image is too large for this board

Big size Omnibus F4 boards with silabs can be flashed properly, does that virtual com consume so much flash-space?

All Boards with smaller form factor eg 25x25 mm offer no silabs port (DFU for flashing).
finally I was so happy now to find boards smaller / lighter than 36 mm.

How can I flash PX 4 ?
I have an already very nice flying 19cm wing span 30g weight tailsitter waiting for gps functionality. the fc has to be below 5g. (Pixracer or normal size Omnibus F4 are much to heavy …) the gps module below 1g is already tested and functional.

Hello!I’m also finding smaller cotrollers 22mm that could run PX4, but I’m failed. If you find it, can you share its buying link with me. Thanks a lot!

V1.11.0 beta now runs on the most Omnibus Nano fc even on the 20x20mm Banggood nano F4, parameters now get saved without sd card.
Log and missions currently not offered cause flash not mountable as mtd.
Only vtol code doesn’t fit anymore into 1Mb flash … :frowning:

1 Like

Mamba F405 Mini MK2 (FURYF4OSD) seems to be a very good 20x20mm PX4 target with most suitable breakouts for UARTS in this size and there are also the correct 4 ESC outputs pins only 3 and 4 are swapped. RC in also works immediately. Unfortunately with MK3 the target has changed completely and does not fit to PX4 anymore.