Skip to content

Instantly share code, notes, and snippets.

@c0m4r
Last active April 2, 2025 17:11
Show Gist options
  • Save c0m4r/b3fea6342bcf5a1b25b608fc36100d68 to your computer and use it in GitHub Desktop.
Save c0m4r/b3fea6342bcf5a1b25b608fc36100d68 to your computer and use it in GitHub Desktop.
Radxa ROCK 5C Lite - all you need to know in one place

Radxa ROCK 5C Lite

image

All you need to know in one place.

Table of contents:

Resources

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.

What is "Lite" about Rock 5C Lite

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:

Use-case

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+).

Power consumption

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

Custom case

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.

image

Thermals

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.

SD Card

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

eMMC

The OrangePI eMMC works with 5C.

image

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:

PCIe

Waveshare PCIe TO M.2 HAT+ Flat cable connection
image image

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.

Power Supply

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

OS

So far these are stable, quick and easy to install:

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:

And there are also options for those with a lot of zen energy and patience:

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:

GPIO

GPIO Pinout: https://docs.radxa.com/en/rock5/rock5c/hardware-design/hardware-interface?target=rk3582#gpio-pinout

image

UART

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.

image

top view bottom view close-up
image image image

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.

I2C OLED

Docs:

https://docs.radxa.com/en/rock5/rock5c/app-development/pin-40-test#i2c

Scripts for 128x32 OLED display:

Based on:

image

020520.webm
gpio view bottom view
image image

Worth checking out:

SPI TFT IPS

image

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
image image image image

Video:

cccccccccccccc.webm

PWM Fan Control

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

LEDs

  • 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

Known issues

  • 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's wifi.powersave = 2

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment