Post

ENG | Radxa ROCK 3C Single Board Computer

Overview of Radxa ROCK 3C setup, configuration, with tips on troubleshooting common issues

ENG | Radxa ROCK 3C Single Board Computer

Radxa ROCK 3C is a single board personal computer similar to Raspberry PI, based on Rockchip RK3566 CPU with performance somewhat above Raspberry Pi 3B.

I bought this in June, because my Raspberry Pi was acquiring chilli pepper growth timelapse and I wanted something to play with in the mean time and something that is at least somewhat faster (also bought Milk-V Duo S for curiosity) and found this for a very good price (close to 20EUR). Sadly, it lacks wide community and a bit of support.

This article goes trough initial setup, settings and troubleshooting.

Specifications

  • CPU: Rockchip RK3566 @ 1.4GHz
  • RAM: 2GB (4GB, 8GB options)
  • Connectivity: WiFi 6 & BT5.4 & 1Gbps LAN (depends on board revision)
  • Storage: eMMC and SD card slots

Compared to Raspberry Pi 3B it has faster I/O interfaces, microphone input, power button, eMMC slot, M2 M-key slot, one USB3, and power connector is USB-C rather than MicroUSB.

Initial installation

For Radxa ROCK 3C there are only official images, no Armbian, no Debian 12.

One image is CLI (command line interface only), other is XFCE desktop. Second one contains more stuff preinstalled, such gstreamer for video capture.

Side note: eMMC issue

My first issue was that I bought eMMC adapter that does not work, I assumed that eMMC card is broken. After some googling I discovered that eMMC-microSD adapters do not work with the majority of microSD-SD and/or SD-USB adapters. So I had to use SD card for install.

Stuff needed

  • Radxa board
  • USB charger with USB-C connector or USB-A to USB-C cable (seems that it can be powered from PC)
  • Durable SD card, at least 8GB (eMMC optional)
  • Ethernet cable
  • Raspberry Pi Imager on Windows (really anything that can write image to SD card, dd on Linux)

Setup

Basically use Raspberry Pi imager to get image such as rock-3c_debian_bullseye_xfce_b43.img.xz from GitHub, put it into SD card and without keyboard and displayed connected it should run with the following defaults, you only need to connect it into your router.

Unlike Raspberry Pi OS, this has default password.

Defaults

It’s possible to connect to it by

  • Hostname: rock-3c.local
  • User: rock
  • Password: rock

User and password radxa works too. Consider creating your own user with the same permissions and delete default ones, if device is going to be connected to internet.

First things to do

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo -i             # Become root
# !!! DON'T USE THESE !!!
#apt update          # Update repository database
#apt upgrade         # This breaks wifi and likely other kernel modules
# UPDATE SYSTEM USING THIS
rsetup
systemctl set-default multi-user.target     # Switch boot from graphic.target to multi-user.target
systemctl isolate multi-user.target         # Switch from graphic.target to multi-user.target now (may log you off)
timedatectl set-timezone Europe/Prague      # Set timezone

sudo -i
apt install neofetch inxi                   # system information
apt install mc nmap netdiscover ncdu mtr    # midnight commander, network scanners, better disk usage, better traceroute
apt install build-essential                 # gcc and basic libs (parts are already installed, i think c++ and standard library are not)
apt install podman                          # podman-compose is not present :-(
apt install sysbench iperf3 speedtest-cli   # some benchmarks
apt install v4l-utils gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-rockchip1 # video related stuff on CLI version (incomplete list)
apt install imagemagick

Configuring Wifi (with WPA2-PSK/WPA3-PSK on router)

1
sudo nmcli d wifi connect ***SSID** password "***PASSWORD***"

Nothing happens. Times out after 30s or so.

1
rock@rock-3c:~$ nmcli con show
1
2
3
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  35c25ad5-9964-3d4a-9d73-705b74068b44  ethernet  eth0
***SSID***          61c16be6-1cdf-4317-8030-a99db42ab5ea  wifi      --
1
root@rock-3c:~# nmcli conn edit 61c16be6-1cdf-4317-8030-a99db42ab5ea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
===| nmcli interactive connection editor |===

Editing existing '802-11-wireless' connection: '61c16be6-1cdf-4317-8030-a99db42ab5ea'

Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.

You may edit the following settings: connection, 802-11-wireless (wifi), 802-11-wireless-security (wifi-sec), 802-1x, ethtool, match, ipv4, ipv6, hostname, tc, proxy
nmcli> print wifi-sec.key-mgmt
802-11-wireless-security.key-mgmt: sae
nmcli> describe wifi-sec.key-mgmt

=== [key-mgmt] ===
[NM property description]
Key management used for the connection.  One of "none" (WEP), "ieee8021x" (Dynamic WEP), "wpa-psk" (infrastructure WPA-PSK), "sae" (SAE), "owe" (Opportunistic Wireless Encryption), "wpa-eap" (WPA-Enterprise) or "wpa-eap-suite-b-192" (WPA3-Enterprise Suite B). This property must be set for any Wi-Fi connection that uses security.

nmcli> set wifi-sec.key-mgmt wpa-psk
nmcli> verify
Verify connection: OK
nmcli> save persistent
Connection '***SSID***' (61c16be6-1cdf-4317-8030-a99db42ab5ea) successfully updated.
^D
1
root@rock-3c:~# nmcli d wifi connect ***SSID***
1
Device 'wlan0' successfully activated with '61c16be6-1cdf-4317-8030-a99db42ab5ea'.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[connection]
id=***SSID***
uuid=61c16be6-1cdf-4317-8030-a99db42ab5ea
type=wifi
interface-name=wlan0
permissions=
timestamp=1719577473

[wifi]
mac-address-blacklist=
mode=infrastructure
seen-bssids=D4:01:C3:2F:51:0C;
ssid=***SSID***

[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk=***PASSWORD***

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

[proxy]

Setting wifi country

I don’t know why, this works automagically. However can be done via rsetup and location config.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@rock-3c:/etc/wpa_supplicant# iw reg get
global
country CZ: DFS-ETSI
        (2400 - 2483 @ 40), (N/A, 20), (N/A)
        (5150 - 5250 @ 80), (N/A, 23), (N/A), NO-OUTDOOR, AUTO-BW
        (5250 - 5350 @ 80), (N/A, 20), (0 ms), NO-OUTDOOR, DFS, AUTO-BW
        (5470 - 5725 @ 160), (N/A, 26), (0 ms), DFS
        (5725 - 5875 @ 80), (N/A, 13), (N/A)
        (57000 - 66000 @ 2160), (N/A, 40), (N/A)

phy#0 (self-managed)
country 00: DFS-UNSET
        (2380 - 2520 @ 40), (N/A, 20), (N/A)
        (5140 - 5980 @ 80), (N/A, 20), (N/A)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@rock-3c:/etc/wpa_supplicant# wpa_cli -i wlan0
wpa_cli v2.10
Copyright (c) 2004-2022, Jouni Malinen <[email protected]> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.



Interactive mode

> get country
CZ
>

Install system on eMMC (while running from SD card)

I have adapter from microSD to eMMC, however it did not work. I installed Linux to SD card first.

Radxa eMMC adapter

Two weeks later, I tried snapping eMMC card directly onto Radxa board, test if Linux can see it - yes it does - and then I downloaded image and copied it to eMMC card.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
root@rock-3c:/sys/class/mmc_host/mmc0/device# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
mtdblock0     31:0    0    16M  0 disk
mmcblk1      179:0    0  29.8G  0 disk
├─mmcblk1p1  179:1    0    16M  0 part /config
├─mmcblk1p2  179:2    0   300M  0 part
└─mmcblk1p3  179:3    0  29.5G  0 part /
mmcblk0      179:32   0  14.6G  0 disk
mmcblk0boot0 179:64   0     4M  1 disk
mmcblk0boot1 179:96   0     4M  1 disk
zram0        254:0    0 991.8M  0 disk [SWAP]
rock@rock-3c:~$ curl -O -L https://github.com/radxa-build/rock-3c/releases/download/b42/rock-3c_debian_bullseye_xfce_b42.img.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 1157M  100 1157M    0     0  10.1M      0  0:01:53  0:01:53 --:--:-- 1917k

rock@rock-3c:~$ sudo -i
[sudo] password for rock:
root@rock-3c:~# xz -dc /home/rock/rock-3c_debian_bullseye_xfce_b42.img.xz | dd of=/dev/mmcblk0 bs=4M status=progress
4844584960 bytes (4.8 GB, 4.5 GiB) copied, 191 s, 25.4 MB/s
0+582081 records in
0+582081 records out
4858610688 bytes (4.9 GB, 4.5 GiB) copied, 193.148 s, 25.2 MB/s

root@rock-3c:~# poweroff
Connection to rock-3c.local closed by remote host.
Connection to rock-3c.local closed.

Hardware info

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
root@rock-3c:/mnt# neofetch
       _,met$$$$$gg.          root@rock-3c
    ,g$$$$$$$$$$$$$$$P.       ------------
  ,g$$P"     """Y$$.".        OS: Debian GNU/Linux 11 (bullseye) aarch64
 ,$$P'              `$$$.     Host: Radxa ROCK3 Model C
',$$P       ,ggs.     `$$b:   Kernel: 5.10.160-26-rk356x
`d$$'     ,$P"'   .    $$$    Uptime: 1 hour, 13 mins
 $$P      d$'     ,    $$P    Packages: 1208 (dpkg)
 $$:      $$.   -    ,d$$'    Shell: bash 5.1.4
 $$;      Y$b._   _,d$P'      CPU: (4) @ 1.416GHz
 Y$$.    `.`"Y$$$$P"'         Memory: 140MiB / 1983MiB
 `$$b      "-.__
  `Y$$
   `Y$$.
     `$$b.
       `Y$$b.
          `"Y$b._
              `"""

root@rock-3c:/mnt# inxi -v8
System:    Host: rock-3c Kernel: 5.10.160-26-rk356x aarch64 bits: 64 compiler: gcc v: 10.2.1
           parameters: root=UUID=2d672a9c-e1fe-445b-8686-cdb8458acade console=ttyFIQ0,1500000n8 quiet splash loglevel=4 rw
           earlycon consoleblank=0 console=tty1 coherent_pool=2M irqchip.gicv3_pseudo_nmi=0 cgroup_enable=cpuset
           cgroup_memory=1 cgroup_enable=memory swapaccount=1
           Console: tty 0 DM: LightDM 1.26.0 Distro: Debian GNU/Linux 11 (bullseye)
Machine:   Type: ARM Device System: Radxa ROCK3 Model C details: N/A serial: 7618c0677887ed8a
Memory:    RAM: total: 1.94 GiB used: 233 MiB (11.7%)
           RAM Report: unknown-error: Unknown dmidecode error. Unable to generate data.
PCI Slots: ARM: No ARM data found for this feature.
CPU:       Info: Quad Core model: N/A variant: cortex-a55 bits: 64 type: MCP arch: ARMv8 family: 8 model-id: 2 stepping: N/A
           bogomips: 0
           Speed: 1416 MHz min/max: 408/1416 MHz Core speeds (MHz): 1: 1416 2: 1416 3: 1416 4: 1416
           Features: aes asimd asimddp asimdhp asimdrdm atomics cpuid crc32 dcpop evtstrm fp fphp lrcpc pmull sha1 sha2
           Vulnerabilities: Type: itlb_multihit status: Not affected
           Type: l1tf status: Not affected
           Type: mds status: Not affected
           Type: meltdown status: Not affected
           Type: mmio_stale_data status: Not affected
           Type: retbleed status: Not affected
           Type: spec_store_bypass status: Not affected
           Type: spectre_v1 mitigation: __user pointer sanitization
           Type: spectre_v2 status: Not affected
           Type: srbds status: Not affected
           Type: tsx_async_abort status: Not affected
Graphics:  Device-1: display-subsystem driver: rockchip_drm v: N/A bus ID: N/A chip ID: rockchip:display-subsystem
           class ID: display-subsystem
           Device-2: mali-bifrost driver: mali v: N/A bus ID: N/A chip ID: arm:fde60000 class ID: gpu
           Device-3: rk3568-dw-hdmi driver: dwhdmi_rockchip v: N/A bus ID: N/A chip ID: rockchip:fe0a0000 class ID: hdmi
           Display: server: X.org 1.20.11 driver: loaded: modesetting tty: 168x74
           Message: Advanced graphics data unavailable in console for root.
Audio:     Device-1: rk3568-dw-hdmi driver: dwhdmi_rockchip bus ID: N/A chip ID: rockchip:fe0a0000 class ID: hdmi
           Device-2: simple-audio-card driver: asoc_simple_card bus ID: N/A chip ID: simple-audio-card:hdmi-sound
           class ID: hdmi-sound
           Device-3: simple-audio-card driver: asoc_simple_card bus ID: N/A chip ID: simple-audio-card:rk809-sound
           class ID: rk809-sound
           Sound Server: ALSA v: k5.10.160-26-rk356x
Network:   Device-1: rk3568-gmac driver: rk_gmac_dwmac v: N/A port: N/A bus ID: N/A chip ID: rockchip:fe010000
           class ID: ethernet
           IF: eth0 state: up speed: 100 Mbps duplex: full mac: 52:bb:3d:37:87:75
           IP v4: 192.168.68.16/24 type: dynamic noprefixroute scope: global broadcast: 192.168.68.255
           IP v6: fe80::f863:9af0:38a:7839/64 type: noprefixroute scope: link
           Device-2: wlan-platdata driver: wlan_platdata v: N/A bus ID: N/A chip ID: wlan-platdata:wireless-wlan
           class ID: wireless-wlan
           IF-ID-1: wlan0 state: up mac: 98:03:cf:d2:33:22
           IP v4: 192.168.68.13/24 type: dynamic noprefixroute scope: global broadcast: 192.168.68.255
           IP v6: fe80::c48e:c737:d0a3:4c49/64 type: noprefixroute scope: link
           WAN IP: 89.102.37.225
Bluetooth: Message: No Bluetooth data was found.
Logical:   Message: No LVM data was found.
RAID:      Message: No RAID data was found.
Drives:    Local Storage: total: 44.4 GiB used: 9.84 GiB (22.2%)
           SMART Message: Required tool smartctl not installed. Check --recommends
           ID-1: /dev/mmcblk0 maj-min: 179:0 model: AJTD4R size: 14.56 GiB block size: physical: 512 B logical: 512 B
           rotation: SSD serial: 0x416095bf rev: 0x8 scheme: GPT
           ID-2: /dev/sdb maj-min: 8:16 type: USB vendor: Generic model: USB3.0 CRW -SD size: 29.84 GiB block size:
           physical: 512 B logical: 512 B serial: 201404081410 rev: 1.00 scheme: GPT
           Message: No Optical or Floppy data was found.
Partition: ID-1: / raw size: 14.24 GiB size: 13.93 GiB (97.84%) used: 4.09 GiB (29.3%) fs: ext4 block size: 4096 B
           dev: /dev/mmcblk0p3 maj-min: 179:3 label: rootfs uuid: 2d672a9c-e1fe-445b-8686-cdb8458acade
           ID-2: /boot/efi raw size: 300 MiB size: 299.4 MiB (99.80%) used: 4 KiB (0.0%) fs: vfat block size: 512 B
           dev: /dev/mmcblk0p2 maj-min: 179:2 label: boot uuid: 0B9B-0C84
           ID-3: /config raw size: 16 MiB size: 15.7 MiB (98.34%) used: 1 KiB (0.0%) fs: vfat block size: 512 B
           dev: /dev/mmcblk0p1 maj-min: 179:1 label: config uuid: 0B98-E528
           ID-4: /mnt/usb raw size: 29.52 GiB size: 28.97 GiB (98.15%) used: 5.75 GiB (19.9%) fs: ext4 block size: 4096 B
           dev: /dev/sdb3 maj-min: 8:19 label: rootfs uuid: 2d672a9c-e1fe-445b-8686-cdb8458acade
Swap:      Kernel: swappiness: 100 (default 60) cache pressure: 500 (default 100)
           ID-1: swap-1 type: zram size: 991.8 MiB used: 1.2 MiB (0.1%) priority: 100 dev: /dev/zram0
Unmounted: ID-1: /dev/sdb1 maj-min: 8:17 size: 16 MiB fs: vfat label: config uuid: 0B98-E528
           ID-2: /dev/sdb2 maj-min: 8:18 size: 300 MiB fs: vfat label: boot uuid: 0B9B-0C84
USB:       Hub-1: 1-0:1 info: Full speed (or root) Hub ports: 1 rev: 2.0 speed: 480 Mb/s chip ID: 1d6b:0002 class ID: 0900
           Hub-2: 2-0:1 info: Full speed (or root) Hub ports: 1 rev: 2.0 speed: 480 Mb/s chip ID: 1d6b:0002 class ID: 0900
           Device-1: 2-1:2 info: Realtek Card reader type: Mass Storage driver: usb-storage interfaces: 1 rev: 2.1
           speed: 480 Mb/s chip ID: 0bda:0326 class ID: 0806 serial: 201404081410
           Hub-3: 3-0:1 info: Full speed (or root) Hub ports: 1 rev: 1.1 speed: 12 Mb/s chip ID: 1d6b:0001 class ID: 0900
           Hub-4: 4-0:1 info: Full speed (or root) Hub ports: 1 rev: 1.1 speed: 12 Mb/s chip ID: 1d6b:0001 class ID: 0900
           Hub-5: 5-0:1 info: Full speed (or root) Hub ports: 1 rev: 2.0 speed: 480 Mb/s chip ID: 1d6b:0002 class ID: 0900
           Hub-6: 6-0:1 info: Full speed (or root) Hub ports: 1 rev: 3.0 speed: 5 Gb/s chip ID: 1d6b:0003 class ID: 0900
           Hub-7: 7-0:1 info: Full speed (or root) Hub ports: 1 rev: 2.0 speed: 480 Mb/s chip ID: 1d6b:0002 class ID: 0900
           Hub-8: 8-0:1 info: Full speed (or root) Hub ports: 1 rev: 3.0 speed: 5 Gb/s chip ID: 1d6b:0003 class ID: 0900
Sensors:   System Temperatures: cpu: 38.9 C mobo: N/A
           Fan Speeds (RPM): N/A
Repos:     Packages: apt: 1208 lib: 716
           Active apt repos in: /etc/apt/sources.list
           1: deb https://deb.debian.org/debian bullseye main contrib non-free
           Active apt repos in: /etc/apt/sources.list.d/bullseye-backports.list
           1: deb https://deb.debian.org/debian bullseye-backports main contrib non-free
           Active apt repos in: /etc/apt/sources.list.d/bullseye-security.list
           1: deb https://deb.debian.org/debian-security bullseye-security main contrib non-free
           Active apt repos in: /etc/apt/sources.list.d/bullseye-updates.list
           1: deb https://deb.debian.org/debian bullseye-updates main contrib non-free
           Active apt repos in: /etc/apt/sources.list.d/radxa-rockchip.list
           1: deb [signed-by=/usr/share/keyrings/radxa-archive-keyring.gpg] https://radxa-repo.github.io/bullseye rockchip-bullseye main
           Active apt repos in: /etc/apt/sources.list.d/radxa.list
           1: deb [signed-by=/usr/share/keyrings/radxa-archive-keyring.gpg] https://radxa-repo.github.io/bullseye bullseye main
           Active apt repos in: /etc/apt/sources.list.d/vscodium.list
           1: deb [signed-by=/usr/share/keyrings/vscodium-archive-keyring.gpg] https://download.vscodium.com/debs vscodium main
Processes: CPU top: 5 of 147
           1: cpu: 4.9% command: rknn_server pid: 6512 mem: 1.06 MiB (0.0%)
           2: cpu: 0.7% command: systemd pid: 1 mem: 9.12 MiB (0.4%)
           3: cpu: 0.2% command: dbus-daemon pid: 379 mem: 4.14 MiB (0.2%)
           4: cpu: 0.1% command: networkmanager pid: 381 mem: 12.0 MiB (0.6%)
           5: cpu: 0.1% command: [kworker/0:3-events] pid: 43282 mem: 0.00 MiB (0.0%)
           Memory top: 5 of 147
           1: mem: 12.0 MiB (0.6%) command: networkmanager pid: 381 cpu: 0.1%
           2: mem: 9.48 MiB (0.4%) command: systemd-journald pid: 4596 cpu: 0.0%
           3: mem: 9.12 MiB (0.4%) command: systemd pid: 1 cpu: 0.7%
           4: mem: 8.13 MiB (0.4%) command: wpa_supplicant pid: 404 cpu: 0.0%
           5: mem: 8.05 MiB (0.4%) command: systemd pid: 2178 cpu: 0.0%
Info:      Processes: 147 Uptime: 1h 11m Init: systemd v: 247 runlevel: 53 target: multi-user.target Compilers: gcc: 10.2.1
           alt: 10 Shell: Bash (sudo) v: 5.1.4 running in: tty 0 (SSH) inxi: 3.3.01

Speed tests

Wi-Fi speed test

1
iperf3 -c 192.168.68.10 # With LAN disconnected
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Connecting to host 192.168.68.10, port 5201
[  5] local 192.168.68.13 port 55398 connected to 192.168.68.10 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  29.0 MBytes   244 Mbits/sec    0    676 KBytes
[  5]   1.00-2.00   sec  30.0 MBytes   252 Mbits/sec    0    691 KBytes
[  5]   2.00-3.00   sec  32.5 MBytes   273 Mbits/sec    0    727 KBytes
[  5]   3.00-4.00   sec  27.5 MBytes   231 Mbits/sec    9    605 KBytes
[  5]   4.00-5.00   sec  32.5 MBytes   273 Mbits/sec    0    667 KBytes
[  5]   5.00-6.00   sec  28.8 MBytes   241 Mbits/sec    0    703 KBytes
[  5]   6.00-7.00   sec  32.5 MBytes   273 Mbits/sec    0    703 KBytes
[  5]   7.00-8.00   sec  30.0 MBytes   252 Mbits/sec    0    703 KBytes
[  5]   8.00-9.00   sec  31.2 MBytes   262 Mbits/sec    0    772 KBytes
[  5]   9.00-10.00  sec  30.0 MBytes   252 Mbits/sec    0    772 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   304 MBytes   255 Mbits/sec    9             sender
[  5]   0.00-10.02  sec   302 MBytes   253 Mbits/sec                  receiver

iperf Done.

LAN speed test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Connecting to host 192.168.68.10, port 5201
[  5] local 192.168.68.13 port 41131 connected to 192.168.68.10 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   114 MBytes   958 Mbits/sec    0    414 KBytes
[  5]   1.00-2.00   sec   112 MBytes   941 Mbits/sec    0    414 KBytes
[  5]   2.00-3.00   sec   112 MBytes   941 Mbits/sec    0    484 KBytes
[  5]   3.00-4.00   sec   113 MBytes   945 Mbits/sec    0    484 KBytes
[  5]   4.00-5.00   sec   112 MBytes   938 Mbits/sec    0    484 KBytes
[  5]   5.00-6.00   sec   112 MBytes   942 Mbits/sec    0    506 KBytes
[  5]   6.00-7.00   sec   112 MBytes   942 Mbits/sec  152    467 KBytes
[  5]   7.00-8.00   sec   112 MBytes   942 Mbits/sec    0    478 KBytes
[  5]   8.00-9.00   sec   112 MBytes   940 Mbits/sec    0    495 KBytes
[  5]   9.00-10.00  sec   111 MBytes   934 Mbits/sec    0    525 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.10 GBytes   943 Mbits/sec  152             sender
[  5]   0.00-10.01  sec  1.10 GBytes   940 Mbits/sec                  receiver

iperf Done.

Sysbench

1
sysbench cpu run --time=60 --threads=4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 4
Initializing random number generator from current time


Prime numbers limit: 10000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:  3303.25

General statistics:
    total time:                          60.0008s
    total number of events:              198208

Latency (ms):
         min:                                    1.19
         avg:                                    1.21
         max:                                   18.86
         95th percentile:                        1.25
         sum:                               239827.32

Threads fairness:
    events (avg/stddev):           49552.0000/612.06
    execution time (avg/stddev):   59.9568/0.01

eMMC speed

1
2
3
4
5
root@rock-3c:/mnt# hdparm -tT /dev/mmcblk0

/dev/mmcblk0:
 Timing cached reads:   1622 MB in  2.00 seconds = 811.29 MB/sec
 Timing buffered disk reads: 504 MB in  3.01 seconds = 167.48 MB/sec

Power consumption

TaskAmpsWatts
idle0.251.3
sysbench0.452.3
during boot0.653.3

Configuring FTP

Because using SFTP is somewhat slow and my devices run behind NAT, not being accessible from internet, I don’t care much about security. But SFTP uses encryption, that may slow down file transfers.

TODO: verify and make this section better.

Also mention Linux ftp clients (ncftp?)

1
2
apt install vsftpd
systemctl enable --now vsftpd.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ncftp -u pavel marten.local
NcFTP 3.2.7 (Jan 01, 2024) by Mike Gleason (http://www.NcFTP.com/contact/).

Copyright (c) 1992-2018 by Mike Gleason.
All rights reserved.

Connecting to 192.168.68.10...
(vsFTPd 3.0.5)
Logging in...
Password requested by 192.168.68.10 for user "pavel".

    Please specify the password.

Password: ********

Login successful.
Logged in to marten.local.
ncftp /home/pavel >

Configuring camera

Official wiki dedicated to camera is not the most helpful.

Rsetup

My camera is Waveshare RPi Camera (F), Supports Night Vision, Adjustable-Focus which should be compatible with RPI camera v1.3.

RPi camera Camera connected to Raspberry Pi 3B

In rsetup config utilities, select Overlays, confirm warning, Manage Overlays, wait a second, select [*] Enable Raspberry Pi Camera v1.3 among the options at the bottom of the list. Wait few minutes for system upgrade, kernel upgrade, optional kernel modules to compile and then reboot the system. Now you should see that file /dev/video0 exists.

Trying a few commands

This lists pixel formats

1
v4l2-ctl -d0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture Multiplanar

        [0]: 'UYVY' (UYVY 4:2:2)
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [1]: '422P' (Planar YUV 4:2:2)
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [2]: 'NV16' (Y/CbCr 4:2:2)
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [3]: 'NV61' (Y/CrCb 4:2:2)
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [4]: 'YM16' (Planar YUV 4:2:2 (N-C))
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [5]: 'NV21' (Y/CrCb 4:2:0)
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [6]: 'NV12' (Y/CbCr 4:2:0)
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [7]: 'NM21' (Y/CrCb 4:2:0 (N-C))
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [8]: 'NM12' (Y/CbCr 4:2:0 (N-C))
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [9]: 'YU12' (Planar YUV 4:2:0)
                Size: Stepwise 32x32 - 2592x1944 with step 8/8
        [10]: 'YM24' (Planar YUV 4:4:4 (N-C))
                Size: Stepwise 32x32 - 2592x1944 with step 8/8

This one lists some controls, unlike Raspberry 3B, there is no bitrate and there is no H264 compressed video.

1
rock@rock-3c:/boot$ v4l2-ctl -d0 -l
User Controls

        white_balance_automatic 0x0098090c (bool)   : default=0 value=0
                       exposure 0x00980911 (int)    : min=4 max=1964 step=1 default=1000 value=89
                 gain_automatic 0x00980912 (bool)   : default=0 value=0
                horizontal_flip 0x00980914 (bool)   : default=0 value=0 flags=modify-layout
                  vertical_flip 0x00980915 (bool)   : default=0 value=0 flags=modify-layout

Camera Controls

                  auto_exposure 0x009a0901 (menu)   : min=0 max=1 default=1 value=1

Image Source Controls

              vertical_blanking 0x009e0901 (int)    : min=24 max=30823 step=1 default=24 value=24
            horizontal_blanking 0x009e0902 (int)    : min=252 max=252 step=1 default=252 value=252 flags=read-only
                  analogue_gain 0x009e0903 (int)    : min=16 max=1023 step=1 default=32 value=16

Image Processing Controls

                 link_frequency 0x009f0901 (intmenu): min=0 max=3 default=0 value=0
                     pixel_rate 0x009f0902 (int64)  : min=87500000 max=87500000 step=1 default=87500000 value=87500000 flags=read-only

I can’t get camera to work with ffmpeg, both command fail with the same error:

1
2
ffmpeg -f video4linux2 -s 800x600 -r 20 -i /dev/video0 -codec:v h264 -b:v 2048k out.mkv
ffmpeg -f v4l2 -list_formats all -i /dev/video0
[video4linux2,v4l2 @ 0xaaab02ad9220] Not a video capture device.
/dev/video0: No such device

Gstreamer

This command should work and as of 2024-09-30 it works exactly once and works after updating system and kernel modules in early November

1
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,format=UYVY,width=1280,height=720,framerate=30/1' ! mpph264enc ! filesink location=capture.h264

This command can fix or cause some errors:

1
media-ctl --reset

Capturing JPEGs seems impossible with automatic gain control (it’s likely needed to write program that enables v4l2 input, waits few seconds for an automatic exposure, reads buffer and saves JPEG image)

Capturing video works once after, next attempt waits infinitely and it’s likely error of video4linux libraries or kernel.

My discord message, let’s see if I can get answer.

There were some kernel modules updates and video libraries updates during Octobeer (rsetup -> System -> System Update) so as of 2024-11-05 gstreamer can record videos or capture images multiple time.

Troubleshooting

Wi-Fi (solved)

Autoconnect does not work on startup. Technically wifi is not present at all. No idea what happened.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
rock@rock-3c:~$ sudo -i
[sudo] password for rock:

root@rock-3c:~# nmcli -f name,autoconnect connection
NAME                AUTOCONNECT
Wired connection 1  yes
SealClub5           yes

root@rock-3c:~# nmcli device
DEVICE  TYPE      STATE      CONNECTION
eth0    ethernet  connected  Wired connection 1
lo      loopback  unmanaged  --

root@rock-3c:~# rfkill
ID TYPE      DEVICE          SOFT      HARD
 0 bluetooth bt_default   blocked unblocked
 1 bluetooth hci0       unblocked unblocked

root@rock-3c:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 52:bb:3d:37:87:75 brd ff:ff:ff:ff:ff:ff
    inet 192.168.68.16/24 brd 192.168.68.255 scope global dynamic noprefixroute eth0
       valid_lft 489sec preferred_lft 489sec
    inet6 fe80::f863:9af0:38a:7839/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

rock@rock-3c:~$ sudo -i
[sudo] password for rock:
root@rock-3c:~# nmcli d wifi connect ******
Error: No Wi-Fi device found.       

Solution: This is caused by running apt upgrade rather than using rsetup and missing kernel modules.

mDNS client (unresolved)

1
2
root@rock-3c:~# ping marten.local
ping: marten.local: Name or service not known

Solution: None?

Camera

Solved by updating distro in early November.

Conclusion

After the evaluation, the Radxa ROCK 3C presents a mixed bag compared to the much older Raspberry Pi 3B and it’s highlights are significantly faster network and storage.

Strengths:

  • Connectivity: WiFi 6 support and 1Gbit ethernet.
  • Storage Speed: Faster eMMC storage compared to the SD card.
  • Price-Performance Ratio: Great value when purchased from Arace Tech, overpriced from local resellers (up to triple the price). Considering price close to Raspberry Pi 5 2GB, it makes no sense.

Weaknesses:

  • Support and Community: Limited official support and small community make troubleshooting hard.
  • Software Stability: Issues like video capture working only once per reboot, non-functional mDNS.
  • Documentation: Some documentation exists, but it’s quite horrible (missing pages, wrong links…).

Changelog

  • 2024-11-05: Mentioned that video capture works after updating packages
  • 2024-11-14: Shortened conclusion
  • 2024-12-01: Images, minor changes
This post is licensed under CC BY 4.0 by the author.