For a few weeks I just accepted the poor r/w performance the SD card on this SBC, but then after seeing some Youtube videos with double the performance on some other distro, I had to start investigating. With the help of Claude Sonnet 4.6, I got document generated. I ran the script for both the generic micro SD card and on a Samsung EVO micro SD card and got better performance.
Radxa Zero 3W — Unlock SD Card UHS-I SDR104 on DietPi
Background
By default, the Radxa Zero 3W ships with the SD card slot locked to SD High-Speed mode
(50 MHz, ~21 MB/s). The hardware is fully capable of UHS-I SDR104 (150 MHz), but Radxa's
device tree omits the required flags. This guide unlocks it via a custom device tree overlay.
What this achieves
|
Before |
After |
| Clock |
50 MHz |
150 MHz |
| Mode |
SD High-Speed |
UHS-I SDR104 |
| Signal Voltage |
3.3V |
1.8V |
| Read speed (hdparm) |
~21 MB/s |
~66 MB/s |
| Sequential read |
~21 MB/s |
~56 MB/s |
| Sequential write |
~18 MB/s |
~25 MB/s |
Tested on DietPi with kernel 6.18.16-current-rockchip64.
How it works
The RK3566 SoC's SD slot (mmc@fe2b0000) has a vqmmc-supply pointing to LDO_REG5
(vccio_sd) on the RK805 PMIC — a switchable regulator supporting both 1.8V and 3.3V.
The kernel just needs to be told UHS-I is allowed via the sd-uhs-sdr104 device tree flag.
The overlay adds this flag at boot time without modifying any system files permanently.
One-shot script
Copy and paste the entire block below into your terminal as root or with sudo:
#!/bin/bash
set -e
echo "=== Radxa Zero 3W SD UHS-I unlock ==="
# Step 1: Install device-tree-compiler if missing
if ! command -v dtc &>/dev/null; then
echo "[+] Installing device-tree-compiler..."
sudo apt install -y device-tree-compiler
fi
# Step 2: Write the overlay source
echo "[+] Writing DTS overlay..."
cat << 'EOF' > /tmp/rk3566-sd-uhs.dts
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target-path = "/mmc@fe2b0000";
__overlay__ {
sd-uhs-sdr50;
sd-uhs-sdr104;
};
};
};
EOF
# Step 3: Compile the overlay
echo "[+] Compiling overlay..."
dtc -@ -I dts -O dtb -o /tmp/rk3566-sd-uhs.dtbo /tmp/rk3566-sd-uhs.dts
# Step 4: Install overlay to system overlay directory
echo "[+] Installing overlay to /boot/dtb/rockchip/overlay/..."
sudo cp /tmp/rk3566-sd-uhs.dtbo /boot/dtb/rockchip/overlay/radxa-zero3-sd-uhs.dtbo
# Step 5: Enable overlay in dietpiEnv.txt
echo "[+] Enabling overlay in /boot/dietpiEnv.txt..."
if grep -q "^overlays=" /boot/dietpiEnv.txt; then
if ! grep -q "sd-uhs" /boot/dietpiEnv.txt; then
sudo sed -i 's/^overlays=\(.*\)/overlays=\1 sd-uhs/' /boot/dietpiEnv.txt
sudo sed -i 's/^overlays= /overlays=/' /boot/dietpiEnv.txt
else
echo "[=] sd-uhs already listed in overlays, skipping."
fi
else
echo "overlays=sd-uhs" | sudo tee -a /boot/dietpiEnv.txt
fi
echo ""
echo "=== Done! dietpiEnv.txt now reads: ==="
grep "^overlays=" /boot/dietpiEnv.txt
echo ""
echo "[!] Reboot now to apply: sudo reboot"
echo " After reboot, verify with:"
echo " sudo cat /sys/kernel/debug/mmc1/ios"
echo " Look for: timing spec: sd uhs SDR104 and signal voltage: 1.80 V"
Verify after reboot
# Should show: timing spec: sd uhs SDR104 and signal voltage: 1.80 V
sudo cat /sys/kernel/debug/mmc1/ios
# Benchmark
sudo hdparm -t /dev/mmcblk1
sudo dietpi-benchmark
Reverting
If anything goes wrong, remove the SD card, mount it on another Linux machine, and either:
- Delete
/boot/dtb/rockchip/overlay/radxa-zero3-sd-uhs.dtbo, or
- Edit
/boot/dietpiEnv.txt and change overlays=sd-uhs back to overlays=
Then reboot normally.
Notes
- Tested on: Radxa Zero 3W, DietPi, kernel
6.18.16-current-rockchip64
- PMIC: RK805 on I2C (
i2c@fdd40000), LDO_REG5 = vccio_sd (1.8V–3.3V switchable)
- SD controller:
dwmmc_rockchip at fe2b0000
- The overlay is non-destructive — it is applied at boot and does not modify your DTB
- The overlay sits alongside official Armbian/DietPi overlays in the system overlay directory
- A kernel update may overwrite the overlay directory — re-run this script if speeds regress after
apt upgrade
- Write speed improvement is modest (~25 MB/s) due to flash controller overhead; reads benefit most
For a few weeks I just accepted the poor r/w performance the SD card on this SBC, but then after seeing some Youtube videos with double the performance on some other distro, I had to start investigating. With the help of Claude Sonnet 4.6, I got document generated. I ran the script for both the generic micro SD card and on a Samsung EVO micro SD card and got better performance.
Radxa Zero 3W — Unlock SD Card UHS-I SDR104 on DietPi
Background
By default, the Radxa Zero 3W ships with the SD card slot locked to SD High-Speed mode
(50 MHz, ~21 MB/s). The hardware is fully capable of UHS-I SDR104 (150 MHz), but Radxa's
device tree omits the required flags. This guide unlocks it via a custom device tree overlay.
What this achieves
Tested on DietPi with kernel
6.18.16-current-rockchip64.How it works
The RK3566 SoC's SD slot (
mmc@fe2b0000) has avqmmc-supplypointing to LDO_REG5(
vccio_sd) on the RK805 PMIC — a switchable regulator supporting both 1.8V and 3.3V.The kernel just needs to be told UHS-I is allowed via the
sd-uhs-sdr104device tree flag.The overlay adds this flag at boot time without modifying any system files permanently.
One-shot script
Copy and paste the entire block below into your terminal as root or with sudo:
Verify after reboot
Reverting
If anything goes wrong, remove the SD card, mount it on another Linux machine, and either:
/boot/dtb/rockchip/overlay/radxa-zero3-sd-uhs.dtbo, or/boot/dietpiEnv.txtand changeoverlays=sd-uhsback tooverlays=Then reboot normally.
Notes
6.18.16-current-rockchip64i2c@fdd40000), LDO_REG5 =vccio_sd(1.8V–3.3V switchable)dwmmc_rockchipatfe2b0000apt upgrade