Radxa Rock CM3 Review: All You Need to Know
Radxa Rock CM3 is a system on a module marketed as a drop-in replacement for the Raspberry Pi CM4. Let’s find out if their claims hold true in this in-depth review.
Intro
The Rock CM3 is Radxa’s direct competitor to the Raspberry Pi CM4 (RPi CM4). Both compute modules have the same form factor but the Rock CM3 has a couple of tricks up its sleeve. While the RPi CM4 has two board-to-board connectors, the Rock CM3 has a third connector. This extra connector is needed because the Rock CM3 is not just a clone of the RPi CM4, it has additional features (more on this later).
That all sounds perfect but is the Rock CM3 a true replacement for the Raspberry Pi CM4? Will it work with any board designed for the RPi CM4? This is what I am trying to find out. To make this research whole, I’ll be collecting a range of CM4 carrier boards for an upcoming blog post so I’ll make sure to always test the Rock CM3 and check its compatibility with the Raspberry Pi system.
Continue reading for A LOT of detailed information on the Rock CM3. This is probably more information than you cared to know, but that’s how I roll.
OKdo sent me the Rock CM3 for review and only asked me to provide feedback in return. They did not sponsor this post and they have no control over what I write in this post.
If you find the information in this article useful, consider supporting me by buying a coffee.
Availability
Well, well, well, I’m writing this on what might be the tail end of the Raspberry Pi shortage of 2022-2023, in which acquiring a single RPi CM4 is a painful experience, let alone buying them in bulk. On the other hand, the Rock CM3 is readily available and you can buy them in bulk from many a few resellers, including their main distributor OKdo.
Will it Boot?
A lot of my readers will probably have already seen one or two comments from Jeff Geerling (on YouTube or Twitter) saying that his CM3 won’t boot. This has not been my experience. Yes, flashing the Rock CM3 requires a couple of additional steps (when compared to the RPi CM4) but flashing the module I received from OKdo went without a hitch.
In no way I doubt Jeff’s ability to flash a board but he has a pre-production module and hasn’t been able to make much headway testing his Rock CM3. I have a production unit and I’ve been able to flash it many times following the – not-so-great – instructions on Radxa’s Wiki/Website.
So, the answer is YES, it will boot.
Available Images
Speaking of booting. Radxa provides Debian, Ubuntu, and Android as standard images, but there are a few other community images available, like Armbian.
I usually choose Debian when running other non-Raspberry Pi brands of SBCs to assure maximum compatibility with Raspberry OS, which is built on Debian. The vast majority of the topics in this article were written while Debian was loaded and running on my Rock CM3, so keep in mind that things might work a little differently with a different OS.
Let’s flash an image.
Flashing the Module
If you are familiar with how to flash the RPi CM4, you’ll know your way around flashing the Rock CM3. Although the steps are similar, the software used is different. I’m using a Windows machine in the example below but Radxa provides documentation for Linux and Mac users also.
- Download and install the driver (DriverAssistant)
- Download the RockChip DevTool
- Download the RK356X loader
- Connect the device through USB to the host computer
- Push the disable eMMC button
- Connect to power and flash the device using DevTool
Now that you know the overall steps, let’s cover them in more detail.
The first step is to download the driver software (DriverAsssistant). This will assure that the host computer can communicate with the Rock CM3 in maskrom mode. Maskrom mode allows communication even if there is no bootable firmware on the board.
Next, download the RockChip DevTool from the Radxa CM3 Wiki Page. No installation is necessary here, just download and extract the zip file.
The first time you run DevTool (look for RKDevToo.exe), it will most likely be in Chinese. To change the language to English, you have to edit the config.ini file and set Selected=2. You can thank me later 😉
[Language]
Kinds=2
Selected=2
LangPath=Language\
The third step is to download the RK356X loader file (from the Wiki page linked above). This is needed for the DevTool to communicate with the Rock CM3 correctly.
Unlike the RPi CM4, where you have to short a couple of pins on the carrier board to put the module in bootloader mode, the Rock CM3 has a convenient push button on the module itself. Depressing this button prevents the module from booting using the onboard eMMC storage and puts it in maskrom mode. So, hey, kudos to Radxa for giving us an onboard button.
Alright, now that you have all of the necessary software, let’s get things cooking. Connect the CM3 to a carrier board, connect the carrier board to your host computer – most likely through a micro USB port on the carrier board, push the maskrom button on the CM3, and connect the power cable.
Your host computer should recognize the Rock CM3. Fire up DevTools and make sure it sees one device in maskrom mode.
Now… the instructions from this point on are from me poking and probing how to get things working in DevTool since the documentation on Radxa’s wiki does not match what I saw in DevTool… at all!
The first row in DevTool should say loader in the “name” column. Go ahead and click on the blank box in the rightmost column. This is where you select the rk356x loader file you downloaded in step number three.
Next, double-click the Address column and make sure it is set to “0x00000000”. I found this information by probing around other pages on their Wiki.
Alright, almost there. Still on the second row, double-click the “name” column and type “image” in the box. Radxa’s wiki says you have to select “image” from the drop-down menu but when I click on the drop-down arrow, I don’t see any other options available. Yeah… lack of clear instructions here.
Click on the rightmost column of the second row to select the image you will be flashing to the module. Keep in mind that DevTool is not able to unpack compressed files on the fly like most flashing tools can. You have to unpack/unzip the files before flashing. If the image file ends in .xz, it means you have to unzip it first. If the image file already ends in .img, you are good to go.
So, DevTool should look like the image below. Row #1 should point to the RK356X (.bin) loader file and row #2 should point to the image file (.img) you downloaded and unzipped.
Hit the “run” button and DevTool will do its things for a few minutes. When the flashing process is complete, the Rock CM3 will reboot and load the new image automatically.
This is what DevTool will look like when the image is being saved to the onboard eMMC.
Ease of Use
First things first. The WiFi signal on the board is really weak. At first, I thought the WiFi module on my CM3 wasn’t working because I couldn’t see any of my available networks. I noticed there is no antenna pattern on the board so I connected an external antenna. Only then, I was able to see available networks and connect to my local WiFi. I confirmed through Radxa’s documentation there is no onboard antenna and an external one is indeed required.
It’s worth mentioning that the RPi CM4 has a built-in antenna that works really well. I have never had any issues using any of my RPi CM4s without an external antenna around my house.
My biggest gripe with the Rock CM3 – and many other Radxa SBCs – is that it is pretty hard to set it up headlessly using WiFi. Unlike the Raspberry Pi boards, there is no way to enter WiFi credentials after you have flashed the module. As a matter of fact, once DevTools is done flashing the image, the board will reboot automatically and load the newly flashed OS, leaving no chance to make any modifications before the first boot.
In a Raspberry Pi ecosystem, the boot partition is accessible on Windows computers, allowing you to make setting changes (including WiFi credentials) before the system is booted for the first time. Radxa has made the config partition of the Series 4 and 5 boards (Rock 4 and Rock 5) images mountable but this has not been the case on their Series 3 boards yet.
On the Rock CM3, you either have to connect it to your network through ethernet (if your carrier board has an ethernet port) or use a USB-to-TTL serial connection to make changes to the files on the board – not ideal!
Quick Tips
I’ve added all of the commands in this blog post to a single GitHub Gist. If are after some quick fixes and don’t feel like reading this whole article, feel free to refer to the Gist.
Carrier Board Compatibility
Carrier board compatibility is unknown when compared to the RPi CM4. I was able to test it on the official RPi CM4IO board and it worked well after some device tree modifications. I also tried it on a carrier board I designed myself and it also worked well. But – there is always a but – there are accounts in Radxa’s forums of the CM3 not working on some carrier boards designed for the CM4.
If you will be using it on a carrier board designed for the CM4, there are additional steps to take to make USB and PCIe work. I’m making this post a one-stop-shop for everything Rock CM3 related (or almost everything :))
The Rock CM3 should be configured with different device trees when plugged into a board designed for the RPi CM4. After the first boot, run the commands below to make a backup of the cm3-io device tree file and then replace it with the rpi-cm4-io device tree file.
cd /boot/dtbs/$(uname -r)/rockchip/
sudo mv rk3566-radxa-cm3-io.dtb rk3566-radxa-cm3-io.dtb.bak
sudo cp rk3566-radxa-cm3-rpi-cm4-io.dtb rk3566-radxa-cm3-io.dtb
To get the PCIe bus to work, you also have to enable it first by editing the /boot/config.txt file to include the device tree overlay for PCIe.
sudo nano /boot/confix.txt
And add the line below.
dtoverlay=radxa-cm3-io-pcie2x1
After making changes to config.txt
you have to update the device tree information by running the script below.
sudo update_extlinux.sh
Don’t forget to reboot your board to apply the changes above.
Additional Functionality
The Rock CM3 is not just an RPi CM4 clone, it has additional features not present in RPI’s offering. It has two SATA ports (shared with USB 3.0 and PICe pins), which are not available in any of the RPi boards. It has a USB 3.0 port in addition to a USB 2.0 port. While it is possible to have USB 3.0 on the RPi CM4, it needs to use the PCIe pins. The Rock CM3 has separate PCIe pins. In addition to all of the GPIO pins present on the RPi CM4, the Rock CM3 has additional 22 GPIO pins.
All the extra bells and whistles come with a catch. They are only available if the carrier board has an extra 3rd connector. All of the carrier boards designed for the RPi CM4 only have two connectors. Through my research, I was only able to locate a single carrier board – Radxa’s official CM3 IO board – that has the 3rd connector. It would be cool to see the community designing boards around the Rock CM3 and keeping it compatible with the RPi CM4, but, as they say, only time will tell…
Use Cases
Well, the Rock CM3 is a system on a module meant to be used as an embedded system. So, the possibilities are endless. We already knew that. The main question I wanted to answer is: Can the Rock CM3 reasonably replace a Raspberry Pi CM4?
Let’s find out!
Home Assistant
Home Assistant is quickly becoming a staple in the homes of tech-savvy users. So much so that they ran a successful crowd-sourcing campaign to launch a gadget that can integrate all of your home automation devices. The Home Assistant Yellow board was designed around the RPi CM4 and many, many, many Home Assistant Yellow customers are complaining that they cannot source an RPi CM4 to make their board functional.
Even though I don’t have a Home Assistant Yellow board – and Home Assistant doesn’t have a board to lend me – I set out on a mission to get Home Assistant (the software) running on the Rock CM3. It does look like the CM3 would be operational on the Home Assistant Yellow but I can’t say for sure without a Yellow board to test.
It took me some googling and some digging to get Home Assistant Supervised to run on the Rock CM3. Here are the steps I took in case it helps other home automation enthusiasts out there.
First, before attempting to go through the install steps for HA, you need to make sure that you are able to run Docker on the Rock CM3. And to get Docker to run, you have to use the legacy iptables application.
sudo apt install iptables arptables ebtables
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
Next, edit /booot/config.txt to add the cgroup directive below. Again, do this before attempting to install Docker.
cmdline: systemd.unified_cgroup_hierarchy=0
After making changes to /boot/config.txt you have to update the device tree information by running the script below.
sudo update_extlinux.sh
Reboot the board and follow the steps outlined on the Home Assistant Supervised GitHub page.
The last step from the link above is to select a machine type, where you should choose raspberrypi4-64. I tried other relevant machine types and raspberrypi4-64 is the only one that works. Home Assistant will spin up for the first time, which takes a few minutes. For me, I had to wait 10-12 minutes before I could access the local Home Assistant page.
I am new to using Home Assistant but I have not found any issues while running it on the Rock CM3.
Octoprint
Unlike installing Home Assistance, it’s super easy to get Octorping running on the Rock CM3 thanks to the octoprint_install script. But it wasn’t as easy to connect Octoprint to my Prusa MINI 3D printer.
For some weird reason, the Rock CM3 boots up in USB on-the-go (device) mode instead of USB host mode by default. As you can imagine, to control a 3D printer, the Rock CM3 needs to be set to host mode. To do this, you have to set a system variable. This system variable is not persistent between reboots so it is best to set it in /etc/rc.local
so it gets applied with each boot.
sudo nano /etc/rc.local
And add the line below to set USB mode to host on each reboot.
echo host > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode
The Rock CM3 has more than enough processing power to control a 3D printer and I have been able to complete many prints on a Prusa MINI. I would only recommend this as an Octoprint host if you are not intending to use it with a webcam or a Raspberry Pi camera module. More on this below.
Web Server
This is where the Rock CM3 can shine. Since it runs Debian or Ubuntu, you can install any application available under these two distributions. Nginx proxy for your home network? Can do! LAMP stack for your web projects? Why not! Node-RED for all your automation needs? Yep, runs fine!
Running a web server is not dependent on hardware compatibility, which is lacking on Rock CM3, so this is a great option for the Rock CM3.
You might be thinking “Can I run a server cluster”? You probably can. I’m not going to pretend to be an expert in clustering and I haven’t tested running a cluster on CM3s (I only have one) but I don’t see why you wouldn’t be able to. Let me know in the comments below if you have a Rock CM3 cluster in your basement.
Cameras
This one is a dud. I’ve searched high and low on how to get the Raspberry Pi Camera Module v2 working with the Rock CM3 but I can’t find any official documentation. There is a forum post where a user says they created their own driver and it *might* work. I’m not even linking the forum post here because it did not work for me. It would be great if Radxa provided a working driver with the image.
So, if you are planning to use the Raspberry Pi Camera Module (any version) with your Octoprint instance or a surveillance system, you might want to look for a different option.
Radxa offers a 4K CSI camera module themselves but there is no indication in their documentation that this camera is compatible with the Rock CM3. I was not able to find anything through their forum either.
What about webcams? I don’t have any good news here either. I have an old Logitech webcam that works flawlessly with any Raspberry Pi – including the CM4 – but it was not recognized by the Rock CM3. So, <shrug emoji>.
Final Thoughts
Calling it a “drop-in replacement” for an RPi CM4 is a little bit of a stretch since software support is nowhere near that of a Raspberry Pi product. There are quite a few posts on Radxa’s forum indicating that the Rock CM3 doesn’t work on many boards designed for the Pi CM4 – some boards require a bodge wire solder job to make them work.
I couldn’t get a Raspberry Pi camera module (v2) to work with the Rock CM3 nor a USB webcam that works with all other Raspberry Pi computers that I have. This means that driver support is lacking.
With that in mind, I see the Rock CM3 more as a “CM4 alternative for advanced users”. If you are an expert user and looking for a viable RPi CM4 replacement for your next embedded project, the Rock CM3 is just the ticket. It’s also a great module for server applications like home automation or a local web server.