🛠 Console série UART2 à 1,5 Mbaud : debugger U-Boot et récupérer une carte briquée
Objectives
When the board fails to boot (failed overlay, interrupted update, corrupted eMMC), the serial console is your lifeline. On the ZERO 3W, it resides on UART2_M0, pins 8 (TX) / 10 (RX) of the 40-pin connector, at 1500000 baud 8N1 — and it is also the default U-Boot console. This tutorial covers USB-TTL wiring, observing the boot chain, interrupting U-Boot, the documented pitfall of enabling UART2 as an application UART (a stray input can prevent booting!) with its official workaround, and final recovery via MaskROM + Rockusb.
Hardware
- 1 Radxa ZERO 3W with the 40-pin connector SOLDERED (base SKUs do not have it — prepare your soldering iron)
- 1 USB-TTL adapter set to 3.3 V (FT232/CP210x with 1.8/3.3 V selector)
- 3 wires: adapter TX -> pin 10 (board RX), adapter RX -> pin 8 (board TX), GND -> GND
- NEVER connect the adapter's Vcc to the board (it is powered via USB-C 1)
- Linux PC with picocom/minicom and rkdeveloptool for recovery
1) Listen to the boot
sudo picocom -b 1500000 /dev/ttyUSB0 # ou : sudo minicom -D /dev/ttyUSB0 -b 1500000
Connect the power supply: you should see BootROM then U-Boot (default console on UART2_M0 at 1.5 Mbaud), the kernel, then the login. A screen full of weird characters = wrong baud rate (the #1 reflex is 115200 inherited from other boards — here it is 1,500,000).
2) Interrupt U-Boot
Press a key during the countdown: you land in the U-Boot console (=>). Safe diagnostic commands: version, mmc info, mmc list, printenv. Avoid any write operations (mmc write, mw) unless you know exactly what you are doing.
3) The documented pitfall: UART2 as an application UART
Radxa warns (hardware-interface page): enabling UART2_M0 as a normal serial port via rsetup overlays exposes the input pin to signals that can be interpreted by the U-Boot console — stray inputs can interrupt the boot and the device may fail to start. The official workaround involves U-Boot configuration:
sudo nano /etc/default/u-boot # retirer la console série de la ligne de boot U-Boot
sudo u-boot-update # regenre extlinux/uEnv avec la nouvelle config
sudo reboot
4) Last resort: MaskROM + Rockusb
# Carte eteinte : maintenir le bouton MaskROM, brancher USB-C 1 vers le PC, relacher
lsusb | grep -i 2207 # le RK3566 est en mode Rockusb (vendor 2207)
sudo rkdeveloptool ld # detection BootROM/eMMC
sudo rkdeveloptool wl 0 system.img # reecrit l'image complete sur l'eMMC
sudo rkdeveloptool rd # redemarre
Expected Verification
The complete chain BootROM -> U-Boot -> kernel -> login scrolls on the serial screen. After the UART2 workaround, the boot is never interrupted again by a stray wire on pin 10. After Rockusb recovery, the board reboots onto a fresh image.
Common Errors
- Reflex baud rate of 115200: here the console is at 1,500,000 8N1 — everything else is noise.
- TX/RX not crossed: nothing displays even though ground is good — swap the two data wires.
- Adapter at 5 V or Vcc connected to the board: logic is 3.3 V (absolute max 3.63 V) — real risk of damage.
- Enabling the UART2 overlay without applying the U-Boot workaround: this is exactly the "board bricked by a wire" scenario described in the docs.
- Relying solely on the LED: without a serial console, an early boot failure (invalid DTB) is invisible — keep the USB-TTL cable in your kit.
- Forgetting that the connector is not soldered on base SKUs: check before ordering wires.
- Writing to the wrong mmc device in U-Boot: a misdirected
mmc writecan overwrite the bootloader — diagnose first with mmc info.
Other tutorials for this board
- Premiers pas avec la Radxa ZERO 3W : flasher Radxa OS et démarrer
- Wi-Fi 6 et Bluetooth 5.4 : se connecter, choisir l'antenne, connaître sa révision
- GPIO avec libgpiod : faire clignoter une LED et lire un bouton
- Installer le système sur l'eMMC : rkdeveloptool, MaskROM et gain de fiabilité
- Caméra MIPI CSI : brancher une Raspberry Pi Camera (OV5647/IMX219) sur la ZERO 3W
- Noyau mainline avec Armbian : vérifier le device tree, ajouter un overlay, lire le SARADC
Code examples for this board
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash