RPi CM4 Flash Guide
Steps taken to flash the CM4 board, boot it, and connect it to PX4
Please Note:
If you are using PX4, you will need to use PX4 1.13.1 or newer for PX4 to recognize this baseboard.
The fan does not indicate if the RPi CM4 is powered/running or not.
The power module plugged into Power1/2 does not power the RPi part. You can use the additional USB-C Cable from the PM03D power module to the CM4 Slave USB-C port.
The Micro-HDMI port is an output port.
Some RPi CM4 might not have Wifi device and therefore won’t connect automatically, unless you plug it into a router or a compatible Wifi dongle into the CM4 Host ports.
Flash EMMC
First we need to have the CM4 up and running. We need to prepare the hardware for it first. Considering the fact that you have already mounted your CM4 onto the baseboard do the following to be able to flash any required image on RPi CM4:
Switch the Dip-Switch on Holybro Pixhawk 6X+CM4 base board (located on top of UART&I2C port) to RPi
Connect the baseboard to your desktop computer USB-C CM4 Slave port used power & flash the RPi CM4. There may be a prompt on some systems like macOS to allow the connection. Please allow it! Otherwise, where to connect? 😀
You need to use usbboot:
Linux / Cygwin / WSL
Clone this repository on your Pi or other Linux machine. Make sure that the system date is set correctly, otherwise Git may produce an error.
This git repository uses symlinks. For Windows builds clone the repository under Cygwin:
Note: sudo isn't required if you have write permissions for the /dev/bus/usb device.
macOS
From a macOS machine, you can also run usbboot, just follow the same steps:
Clone the usbboot repository
Install libusb (brew install libusb)
Install pkg-config (brew install pkg-config)
(Optional) Export the PKG_CONFIG_PATH so that it includes the directory enclosing libusb-1.0.pc
Build using make
Run the binary
If the build is unable to find the header file libusb.h then most likely the PKG_CONFIG_PATH is not set properly. This should be set via export PKG_CONFIG_PATH="$(brew --prefix libusb)/lib/pkgconfig".
If the build fails on an ARM-based Mac with a linker error such as ld: warning: ignoring file /usr/local/Cellar/libusb/1.0.26/lib/libusb-1.0.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64 then you may need to build and install libusb-1.0 yourself:
Running “make” again should now succeed!
After running rpiboot the below screen from your terminal should say that you are good to go for flashing a new image onto your CM4 board.
Note: if there are any pop-ups after this stage to eject an unknown disk, simply ignore them.
You can now install your favorite Linux distro, e.g. Raspberry Pi OS 64bit, using The
rpi-imager
. Make sure to add wifi and ssh settings (hidden behind the gear/advanced symbol).
Once done, unmount the volumes, and power off the CM4 by unplugging USB-C CM4 Slave.
Switch Dip-Switch back to EMMC.
Power on CM4 by providing power to USB-C CM4 Slave port.
To check if it’s booting/working, either check HDMI output, or connect via ssh (if set up in rpi-imager, and wifi is available).
Connect PX4 to CM4 via serial
Pixhawk 6X talks to CM4 using Telem2 (/dev/ttyS4
).
To enable this MAVLink instance, set the params:
- MAV_1_CONFIG: TELEM2 - MAV_1_MODE: Onboard - SER_TEL2_BAUD
:921600 8N1
reboot the FMU
On the RPi side, you can connect it to Wifi using a router or a Wifi Dongle.
Enable serial port to FMU by using
raspi-config
: Go to3 Interface Options
, thenI6 Serial Port
. Choose- login shell accessible over serial → No - serial port hardware enabled
→Yes
Finish, and reboot. (This will addenable_uart=1
to/boot/config.txt
, and removeconsole=serial0,115200
from/boot/cmdline.txt
Now MAVLink traffic should be available on
/dev/serial0
at a baudrate of 921600.
Try out MAVSDK-Python
Make sure the CM4 is connected to the internet, e.g. using a wifi, or ethernet.
Install MAVSDK Python:
Copy an example from the MAVSDK-Python examples.
Change the
system_address="udp://:14540"
tosystem_address="serial:///dev/serial0:921600"
Try out the example. Permission for the serial port should already be available through the
dialout
group.
You can also use your own power supply to power the RPi CM4 baseboard.
Last updated