All you need to know in one place.
Table of contents:
- Resources
- What is "Lite" about Rock 5C Lite
- Power consumption
- Custom case
- Thermals
- SD Card
- eMMC
- PCIe
- Power Supply
- OS
- GPIO
- UART
- I2C OLED
- SPI TFT IPS
- PWM Fan Control
- LEDs
- Known issues
Resource | URL |
---|---|
Product page | https://radxa.com/products/rock5/5c |
Documentation | https://docs.radxa.com/en/rock5/rock5c |
More Docs | https://dl.radxa.com/rock5/5c/ |
Community Forums | https://forum.radxa.com/c/rock5/5c |
Jeff Geerling's test/review | geerlingguy/sbc-reviews#41 |
Buy Rock 5C via Aliexpress | https://aliexpress.com/item/1005007473801146.html |
Buy official cooler via Aliexpress | https://aliexpress.com/item/1005007015934157.html |
Official store on Aliexpress | https://aliexpress.com/store/1103615006 |
Custom scripts | https://github.com/c0m4r/radxa_rock5c_lite |
Aliexpress is the most cost-effective way to get Radxa products. It is also available in other stores (see the links on the product page), but the shipping costs in these stores can be astronomical and completely ruin the cost-effectiveness and the choice of versions with a different RAM size may be limited.
Officially, it's the same as Rock 5C, but without GPU and with 6 instead of 8 cores of CPU (4xA55 + 2xA76).
And unofficially it is probably the same processor but with two cores and a GPU missing/disabled, i.e. a batch of processors that did not pass full QA and are therefore sold cheaper.
Sources:
- https://www.cnx-software.com/2024/03/25/rockchip-rk3582-is-a-cost-down-version-of-rk3588s-with-two-cortex-a76-cores-four-cortex-a55-cores-no-gpu/
- https://forum.radxa.com/t/announcing-the-rock-5c-power-performance-and-versatility-for-just-30/20429/20
For that reason, the Lite version of Rock 5C is great value for a homelab server (headless/cli).
It's not meant for use in a graphical environment and it may be insufficient for browsing the web and watching YouTube, although I was able to watch FullHD videos quite smoothly, however, the CPU usage was constantly high, the fan was working at max speed all the time and it required fast storage (at least SD card V30+).
State | Watt |
---|---|
Bare SBC on idle | ~ 1,8 - 2 |
SBC + USB pendrive on idle | ~ 2,4 |
SBC + USB pendrive openssl speed -multi 6 | ~ 5,5 - 6,5 |
SBC + USB pendrive openssl speed -multi 12 + wget to pendrive | ~ 7,5 - 8 |
SBC + USB pendrive watching youtube fullhd video | ~ 7,5 - 8,5 |
This one by any1 is a perfect snap fit case: https://www.printables.com/model/932627-radxa-rock-5c-case Print it out on a decent 3D printer, and you can simply pop the 5c inside, click the lid into place, and close it.
Without the official cooler (heatsink+fan) it's going to get hot real fast for sure and throttle at 80°C, but I didn't test it.
With the cooler turned off, inside any1's case, on idle, room temp 25°C it stays at around 40°C. On high load it can maintain 50°C at around 125 PWM, which is 50% of the fan speed, still fairly quiet. At higher speeds, you'll get better results. In other words - as long as you have at least a heatsink you're good and the fan maintains safe temperatures even at low speeds without the slightest problem.
If you would like to watch YouTube on that thing the fan in step_wise mode will turn on and off constantly so you better use custom script for PWM.
As a server, it works pretty well and is responsive on an SD Card, as long as it's at least UHS1/V10, but you should get V30 as the most optimal.
https://www.sdcard.org/developers/sd-standard-overview/speed-class/
Don't look for tests and reviews that only talk about the raw speeds of SD cards. Don't buy cheap cards. Stick with brands like SanDisk, Transcend, or Samsung. Look for high endurance versions of SD cards as these will be able to withstand more writes and will simply survive longer, sometimes even a few years longer, while cheaper cards will quickly degrade and stop working. For that reason don't treat the SD cards a main storage, but rather as a disposable one, only for the needs of system installation, and the important files should either be kept on a separate medium or make regular backups to avoid data loss in the event of an SD card failure
The OrangePI eMMC works with 5C.
Helper script to analyze the eMMC module: https://github.com/c0m4r/radxa_rock5c_lite/tree/main/emmc
Any eMMC 5.1 should work with 5C. It can be the one with a single connector as the second one is used for mounting.
to check:
- https://github.com/gitvanya34/rock_5c_install_system_eMMC + https://docs.radxa.com/en/rock3/rock3c/low-level-dev/3c-maskrom
Waveshare PCIe TO M.2 HAT+ | Flat cable connection |
---|---|
![]() |
![]() |
https://www.waveshare.com/wiki/PCIe_TO_M.2_HAT+
On kernel 6.1 and with Wireshare PCIe TO M.2 HAT+ I was able to get the NVMe drive detected and running. On kernel 6.12 it doesn't work at all.
root@rock-5c:~# dmesg | grep PCI
[ 11.970753] PCI/MSI: /interrupt-controller@fe600000/msi-controller@fe640000 domain created
[ 11.970782] PCI/MSI: /interrupt-controller@fe600000/msi-controller@fe660000 domain created
[ 12.070041] PCI: CLS 0 bytes, default 64
[ 12.882850] rk-pcie fe190000.pcie: PCIe Linking... LTSSM is 0x3
[ 12.963746] rk-pcie fe190000.pcie: PCIe Link up, LTSSM is 0x130011
[ 12.963765] rk-pcie fe190000.pcie: PCIe Gen.2 x1 link up
[ 12.963946] rk-pcie fe190000.pcie: PCI host bridge to bus 0004:40
[ 12.976803] pci 0004:41:00.0: 4.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x1 link at 0004:40:00.0 (capable of 63.012 Gb/s with 16.0 GT/s PCIe x4 link)
[ 12.987936] pci 0004:40:00.0: PCI bridge to [bus 41]
root@rock-5c:~# dmesg | grep nvme
[ 12.991874] nvme nvme0: pci function 0004:41:00.0
[ 12.991981] nvme 0004:41:00.0: enabling device (0000 -> 0002)
[ 13.005769] nvme nvme0: allocated 64 MiB host memory buffer.
[ 13.017584] nvme nvme0: 6/0/0 default/read/poll queues
[ 13.027100] nvme0n1: p1
root@rock-5c:~# lspci -vv | grep LnkSta
LnkSta: Speed 5GT/s, Width x1
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
LnkSta: Speed 5GT/s (downgraded), Width x1 (downgraded)
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
The performance is rather not really impressive, actually worse than that of a flash drive connected via USB 3.0, but aligns with the limitiations of the PCIe Gen.2 x1. Local disk operations can reach up to 400 MB/s, however downloading a file from the network on a 1 GBps link, starts high, but drops very quickly to 20 MB/s despite low CPU or power consumption, and unlike a pendrive where the download is stable. This could of course be a HAT or disk issue, but I don't have the opportunity to test other hardware at the moment.
root@rock-5c:/mnt/nvme# fio --name=seq_read --rw=read --direct=1 --bs=1M --size=1G --runtime=60 --time_based
seq_read: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1
Jobs: 1 (f=1): [R(1)][100.0%][r=369MiB/s][r=369 IOPS][eta 00m:00s]
seq_read: (groupid=0, jobs=1): err= 0: pid=2752: Thu Mar 27 09:19:47 2025
read: IOPS=377, BW=378MiB/s (396MB/s)(22.1GiB/60001msec)
clat (usec): min=2502, max=6880, avg=2642.92, stdev=369.61
lat (usec): min=2502, max=6880, avg=2643.22, stdev=369.62
bw ( KiB/s): min=374784, max=405504, per=100.00%, avg=387366.88, stdev=6879.37, samples=119
iops : min= 366, max= 396, avg=378.28, stdev= 6.73, samples=119
lat (msec) : 4=98.29%, 10=1.71%
cpu : usr=0.29%, sys=6.00%, ctx=22683, majf=0, minf=274
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=22676,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=378MiB/s (396MB/s), 378MiB/s-378MiB/s (396MB/s-396MB/s), io=22.1GiB (23.8GB), run=60001-60001msec
Disk stats (read/write):
nvme0n1: ios=90440/7, merge=0/9, ticks=167545/14, in_queue=167558, util=99.92%
root@rock-5c:/mnt/nvme# fio --name=seq_write --rw=write --direct=1 --bs=1M --size=1G --runtime=60 --time_based
seq_write: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1
Jobs: 1 (f=1): [W(1)][100.0%][w=341MiB/s][w=341 IOPS][eta 00m:00s]
seq_write: (groupid=0, jobs=1): err= 0: pid=2845: Thu Mar 27 09:20:49 2025
write: IOPS=349, BW=349MiB/s (366MB/s)(20.5GiB/60002msec); 0 zone resets
clat (usec): min=2617, max=12933, avg=2837.03, stdev=707.49
lat (usec): min=2626, max=12977, avg=2862.09, stdev=708.16
bw ( KiB/s): min=344064, max=370688, per=100.00%, avg=357722.92, stdev=7010.93, samples=119
iops : min= 336, max= 362, avg=349.34, stdev= 6.85, samples=119
lat (msec) : 4=96.82%, 10=3.14%, 20=0.03%
cpu : usr=1.34%, sys=5.53%, ctx=20954, majf=0, minf=18
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,20943,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=349MiB/s (366MB/s), 349MiB/s-349MiB/s (366MB/s-366MB/s), io=20.5GiB (22.0GB), run=60002-60002msec
Disk stats (read/write):
nvme0n1: ios=0/83643, merge=0/32, ticks=0/146935, in_queue=146953, util=99.90%
Be careful with the flat cable connection. There are positioning arrows on the cable, but in my case, the arrows were on the flat cable, but not on the board or on the HAT. That's why I initially connected it wrong and despite the bad connection the drive worked but switched to PCIe Gen.1:
[ 13.412577] rk-pcie fe190000.pcie: PCIe Linking... LTSSM is 0x3
[ 13.490963] rk-pcie fe190000.pcie: PCIe Linking... LTSSM is 0x3
[ 13.574948] rk-pcie fe190000.pcie: PCIe Link up, LTSSM is 0x30011
[ 13.574968] rk-pcie fe190000.pcie: PCIe Gen.1 x1 link up
[ 13.575156] rk-pcie fe190000.pcie: PCI host bridge to bus 0004:40
[ 13.590367] pci 0004:41:00.0: 2.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s PCIe x1 link at 0004:40:00.0 (capable of 63.012 Gb/s with 16.0 GT/s PCIe x4 link)
[ 13.591632] pci 0004:40:00.0: PCI bridge to [bus 41]
[ 13.068732] nvme 0004:41:00.0: of_irq_parse_pci: failed with rc=134
[ 13.069117] nvme nvme0: pci function 0004:41:00.0
[ 13.069154] nvme 0004:41:00.0: Unable to change power state from D3cold to D0, device inaccessible
[ 13.120395] nvme nvme0: Removing after probe failure status: -19
LnkSta: Speed 2.5GT/s (downgraded), Width x1 (downgraded)
Also, it seems that the Rock 5C’s kernel lacks proper ACPI power management hooks for PCIe, so the drive stays powered on and heats up on even when the board itself is powered off.
Use at least a decent 5V/3A (15W+) charger with type-c to type-c cable.
Or even better buy an official Radxa Power Supply (5V/5A) or the one for Raspberry Pi 5.
Beware of cheap chargers from AliExpress. Most of them have a very primitive design,
a plywood PCB board and an unreliable, overheating circuit.
Before leaving your computer running unattended, do at least do some performance tests beforehand,
e.g. by running openssl speed -multi 6
for at least an hour and check if the charger is not hot to the touch.
If you want to go custom you can also use mounting power supplies, like mean well's 5V/5A (25W) and connect them directly to both 5V gpio pins. But there are a few conditions:
- make sure that the power supply doesn't require more load that the 5C on idle
- make sure to adjust the voltage to around 5V or 5,1V, not more, unless you sign up for a fireworks show and a magic smoke
- optionally you can also put a fuse for over current protection between the power supply and the 5C
- optionally you can also think of over voltage protection
So far these are stable, quick and easy to install:
- RadxaOS (official, Debian-based) - https://docs.radxa.com/en/rock5/rock5c/download | https://github.com/radxa-build/rock-5c/releases/
- Armbian (Debian or Ubuntu) - https://www.armbian.com/radxa-rock-5c/ - it also has newer kernel (6.12), but some features might be missing (i.e. temp sensors readings) so for now it's better to stick to 6.1
These are community made so here be dragons:
- Arch Linux ARM (community made installer, here be dragons) - https://github.com/kwankiu/archlinux-installer - I had some issues with mirrors and ethernet connection, described here: kwankiu/archlinux-installer#84 but other than that it works
- BredOS (Arch Linux ARM based, community made, here be dragons) - https://bredos.org/ | https://github.com/BredOS/images/releases - it works, however by default it comes with X (lighdm -> cinnamon) and first time I log in it's just a black screen without any controls (but you can right-click on the desktop to open terminal, you can disable lightdm or install something else, i.e. xfce4 which works properly), also if you're like me and don't like the PS1 and literally two hundred aliases, simply clean or remove the .bashrc and/or remove oh-my-bash, which is installed by default in ~/.config/oh-my-bash, another quirk is that the fs is btrfs and I have no idea what the hell is going on in the fstab, but other than that BredOS i great :) bread ftw
No longer maintaned, but worth trying:
- ubuntu-rockchip - https://github.com/Joshua-Riek/ubuntu-rockchip - not tested, but it got rock5c support so it might be worth trying and watching
And there are also options for those with a lot of zen energy and patience:
- Gentoo:
- https://wiki.gentoo.org/wiki/User:Brendlefly62/Radxa_rk3588s_Rock_5c
- https://wiki.gentoo.org/wiki/User:Brendlefly62/Rockchip_RK3588S_Rock_5c/Build-Install-U-Boot
- https://wiki.gentoo.org/wiki/User:Brendlefly62/Rockchip_RK3588S_Rock_5c/Build-Install-Kernel
- https://wiki.gentoo.org/wiki/User:Brendlefly62/Rockchip_RK3588S_Rock_5c/Assemble_a_Gentoo_System
- Alpine - I was able to boot Alpine after replacing roootfs of official (Debian-based) image, but it was unstable, I found this script helpful in the process https://github.com/iggy/rock5-alpine/
- Void Linux - I was also able to boot Void Linux after replacing rootfs of Armbian image and it seems to work fine, but before booting you should do as much of configuration as it needs via chroot, especially NTP/date settings, otherwise it will not be possible to use xbps-install (you can also set date with
date -s "2025-03-20 12:00:00"
) ; grab helper script that converts RadxaOS to Void Linux: https://github.com/c0m4r/radxa_rock5c_lite/tree/main/void_linux or get the image: https://github.com/c0m4r/radxa_rock5c_lite/releases/tag/rock5c_void_linux_v0.1 (user/pass: root/radxa; radxa/radxa; rock/rock)
There is also (as far as I understand) Android image but I didn't test it.
Here's the list of distros that are yet to build for 5C:
- DietPi - https://github.com/MichaIng/DietPi
GPIO Pinout: https://docs.radxa.com/en/rock5/rock5c/hardware-design/hardware-interface?target=rk3582#gpio-pinout
https://docs.radxa.com/en/rock5/rock5c/radxa-os/serial?os=linux
According to the documentation, it is best to buy the following converter, based on the CH340 chip.
top view | bottom view | close-up |
---|---|---|
![]() |
![]() |
![]() |
Follow the documentation and remember: do not connect the converter to the GPIO header's 5V pin! You only want GND, TXD and RXD to be connected. Put the jumper between 5V and VCC of the converter's pins.
Use minicom to connect via UART:
alias minicom='minicom -w -t xterm -l -R UTF-8'
cat << EOF > ~/.minirc.1500000-usb0
pu port /dev/ttyUSB0
pu baudrate 1500000
pu bits 8
pu parity N
pu stopbits 1
pu rtscts No
EOF
minicom 1500000-usb0
To exit, press CTRL+A and then Q.
Docs:
https://docs.radxa.com/en/rock5/rock5c/app-development/pin-40-test#i2c
Scripts for 128x32 OLED display:
Based on:
- https://github.com/nascs/sample_code/blob/main/periphery/oled.py
- https://github.com/nascs/sample_code/blob/main/periphery/oled2.py
020520.webm
gpio view | bottom view |
---|---|
![]() |
![]() |
Worth checking out:
2.0 inch TFT Display OLED LCD Drive IC ST7789V 240RGBx320 Dot-Matrix SPI Interface for Arduio Full Color LCD Display Module
Display: https://a.aliexpress.com/_EuFL2wc
Scripts: https://github.com/c0m4r/radxa_rock5c_lite/tree/main/spi
Wiring:
Display Pin | Rock 5C Pin# | Function | Rock 5C GPIO number |
---|---|---|---|
CS | Pin 13 | SPI0 Chip Select 0 (Hardware CS) | 138 |
DC | Pin 15 | Data/Command | 140 |
RST | Pin 16 | Reset | 37 |
SDA (MOSI) | Pin 12 | SPI0 MOSI | 129 |
SCL (SCLK) | Pin 36 | SPI0 Clock | 130 |
VCC | Pin 1/7 (any 3.3V) | Power | any 3.3V |
GND | Pin 6/9/14 (any GND) | Ground | any GND |
Overlay:
- /boot/dtbo/rk3588-spi0-m1-cs0-spidev.dtbo
SMD components:
- D1-5: S4 diodes
- Q1: 6206 for 3.3V
SMD view | GPIO view 1 | GPIO view 2 | Back view |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Video:
cccccccccccccc.webm
Automatic fan control (turn on the fan when the temp reaches 60 degrees celsius) as for now works only on the official OS, as described here: https://docs.radxa.com/en/rock5/rock5c/getting-started/interface-usage/fan
On other distros the fan will spin on max all the time, unless you change its policy to user_space and set the PWM value manually.
However as for now I stumbled across two possible PWM ranges, one with usable values between ~95 to 255, which is probably the expected one, and the other where I had to set something like 55 to spin slowly, then the usable range was up until 80 or 90 and then all the values gave the same result as 255 (full power).
Here's the script you can use that will control the fan for you so your Rock 5C won't be a fire hazard (maybe).
wget https://raw.githubusercontent.com/c0m4r/radxa_rock5c_lite/refs/heads/main/usr/local/bin/rock5c_fan_pwm -O /usr/local/bin/rock5c_fan_pwm
chmod 700 /usr/local/bin/rock5c_fan_pwm
wget https://raw.githubusercontent.com/c0m4r/radxa_rock5c_lite/refs/heads/main/etc/systemd/system/rock5c_fan_pwm.service -O /etc/systemd/system/rock5c_fan_pwm.service
systemctl enable rock5c_fan_pwm.service --now
- user-led1 (the green one) by default is on all the time when the 5C is power on
- user-led2 (the blue one) by default is in "heartbeat" mode, which isn't really useful, so far I suggest disabling it if you don't like it or change it to mmc1, which is the only mode where it actually do something (that is, it will light up when there is activity on the SD card) | on kernel 6.12 you can set more useful trigger, i.e. kbd-capslock, activity
Use this systemd service to set up user-led2 on boot:
wget https://raw.githubusercontent.com/c0m4r/radxa_rock5c_lite/refs/heads/main/usr/local/bin/rock5c_leds -O /usr/local/bin/rock5c_leds
chmod 700 /usr/local/bin/rock5c_leds
wget https://raw.githubusercontent.com/c0m4r/radxa_rock5c_lite/refs/heads/main/etc/systemd/system/rock5c_leds.service -O /etc/systemd/system/rock5c_leds.service
systemctl enable rock5c_leds.service --now
- pipewire using 100% CPU => must be disabled for the time being, related to a bug when used with the kernel 6.1 ; alterantively try this: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4621#note_2828157
- armbian on kernel 6.12 is missing sensors readings, meaning the board will likely overheat (you need to set the fan speed manually to prevent it)
- SSH to the 5C while it's connected to WIFI is choppy/unstable, try
iwconfig wlan0 power off
or NetworkManager'swifi.powersave = 2