Holybro Pixhawk 6X-RT

Tags: arch:arm chip:imxrt part:imxrt1176 vendor:nxp

The Holybro Pixhawk 6X-RT flight controller

Holybro Pixhawk 6X-RT

The Pixhawk 6X-RT is a flight controller from Holybro built to the Pixhawk FMUv6X-RT open standard, using the i.MX RT1176 crossover MCU. This board port targets that standard, so it also covers the NXP MR-VMU-RT1176.

Features

  • MIMXRT1176DVMAA, Cortex-M7 and Cortex-M4. This port clocks the M7 at 996 MHz

  • 64 MB external QSPI flash, 2 MB RAM

  • CAAM cryptographic accelerator with a hardware entropy source

  • STM32F100 IO co-processor

  • USB-C device connector

  • 2 CAN buses, 100BASE-TX Ethernet, 16 PWM outputs

  • Three IMUs on a vibration isolation system, two BMP388 barometers, BMM150 magnetometer

  • microSD socket

Supported in NuttX: the CAAM entropy source through /dev/random and /dev/urandom, LPUART, USB device and the FlexSPI boot path.

Warning

The sensors, CAN, Ethernet and PWM outputs listed above are board features with no NuttX drivers in this port. Only the peripherals named as supported are wired up.

Buttons and LEDs

The board has no user buttons reachable from NuttX in this port. Its status LEDs are driven by the flight stack rather than by board logic, and are not used to signal NuttX state.

Serial Console

LPUART1 is on the DEBUG connector at 57600 baud.

Pin

Signal

Notes

DEBUG TX

GPIO_DISP_B1_02

LPUART1_TX, ALT9

DEBUG RX

GPIO_DISP_B1_03

LPUART1_RX, ALT9

The nsh configuration uses the USB CDC/ACM console instead, so the DEBUG connector is optional and a USB-C cable is enough.

Flash Layout

The board ships with the PX4 bootloader programmed at the base of QSPI flash. It occupies the first 128 KB and starts the application at 0x30020000. NuttX links to that address and is loaded by the bootloader rather than written to the flash base.

Address

Size

Contents

0x30000000

128 KB

PX4 bootloader, as shipped

0x30020000

4 MB - 128 KB

NuttX

Warning

Writing to the flash base removes the bootloader, and with it the ability to load firmware over USB. Recovering from that needs SWD.

Power Supply

The board is powered over USB-C for bench use, or from the vehicle power module in flight. Nothing in this port manages power.

Installation

The toolchain is the same as for every i.MX RT board; see the platform page.

Flashing uses the uploader from the PX4 source tree, Tools/px4_uploader.py. PX4 releases before 1.18 ship it as px_uploader.py, without the 4, with the same arguments. The bootloader enumerates as a USB CDC/ACM device for roughly five seconds after reset, so start the uploader first and then reset the board:

$ python Tools/px_mkfw.py --prototype firmware.prototype --image nuttx.bin > nuttx.px4
$ python Tools/px4_uploader.py --port "/dev/serial/by-id/*PX4*" nuttx.px4

The uploader expects a .px4 container rather than a raw binary.

Configurations

nsh

The basic NuttShell configuration. The console is USB CDC/ACM, so the shell appears on the same connector used for flashing, at /dev/ttyACM0 on the host. /dev/random and /dev/urandom are backed by the CAAM hardware entropy source.

rptun

nsh plus the SD card and the RPTUN backend for the CM4 (CONFIG_IMXRT_RPTUN). The board bring-up registers /dev/rptun/cm4 and holds the core; rptun start loads the ELF named by CONFIG_FMU_V6XRT_CM4_FIRMWARE (/mnt/sd/cm4.elf) into the CM4 code TCM and releases it. The image must carry a .resource_table section and link to 0x1ffe0000 with its shared memory in the upper 64 KB of that TCM; see the RPTUN section of the platform page.

nsh> mount -t vfat /dev/mmcsd0 /mnt/sd
nsh> rptun start /dev/rptun/cm4
nsh> sleep 2
nsh> rpmsg ping /dev/rpmsg/cm4 100 64 3 0
nsh> rpmsg dump all
nsh> rptun stop /dev/rptun/cm4

Start is asynchronous; the rpmsg node /dev/rpmsg/cm4 appears once the CM4 has announced its endpoints. rpmsg ping and rpmsg dump report through syslog, which this configuration keeps in a RAM log: read it with dmesg. After rptun stop the CM4 is parked in a wfi loop at its boot address; the next start reloads the image.

To run without an SD card, enable CONFIG_FMU_V6XRT_CM4_ROMFS and copy the CM4 image to boards/arm/imxrt/fmu-v6xrt/src/etc/cm4.elf before building. It is baked into the etc ROMFS that NuttX mounts at boot and the firmware path becomes /etc/cm4.elf, so the mount step goes away. The file is ignored by git.