🛠 Sauver une PINE A64 briquée : console série EXP et mode FEL
Objectives
A PINE A64 that no longer boots is not dead: Allwinner's BROM exposes a FEL recovery mode on the micro-USB OTG port, a standard feature of the sunxi family. Combined with the serial console on the EXP 2×5 connector (UART0, pins PB8/PB9, 115200 8N1 — the stdout-path = "serial0:115200n8" from the mainline device tree), you can observe each step of the boot chain (BROM → U-Boot → kernel + DTB from the microSD), load a U-Boot into RAM via FEL without touching the SD card, and rebuild a rescue card. Note: the board has no SPI NOR nor default eMMC boot — everything is replayed from the microSD, which makes recovery simple but FEL indispensable when the SD bootloader is broken.
Hardware
- 1 × PINE A64/A64+ (micro-USB OTG: in FEL mode, this is the service port)
- 1 × USB-TTL 3.3 V adapter on the EXP (crossed RX/TX, common GND) — never use 5 V levels
- 1 × micro-USB data cable to the PC
- Linux PC with
sunxi-tools(sudo apt install sunxi-tools) andpicocom
Complete code
# 1) Observer le boot réel (la carte SD est-elle seulement lue ?)
sudo picocom -b 115200 /dev/ttyUSB0 # console EXP = UART0 PB8/PB9
# rien du tout -> alim/SD en cause ; U-Boot qui boucle -> bootloader HS
# 2) Entrer en FEL : retirer la microSD, carte hors tension,
# brancher le micro-USB OTG vers le PC (et alimenter).
# Le BROM attend sur l'USB ; vérifier :
sudo sunxi-fel version # doit répondre (ID sun50iw1p1)
# 3) Charger un U-Boot mainline en RAM et démarrer dessus (sans SD) :
sudo sunxi-fel -p write 0x4a000000 u-boot-sunxi-with-spl.bin
sudo sunxi-fel exec 0x4a000000
# 4) Une fois la console série vivante, graver une SD saine ou
# réécrire le bootloader sur la carte via un lecteur USB.
Expected verification
With the serial console connected, total silence means the board is not booting at all (power supply, microSD absent/unreadable) — already an answer. A U-Boot that displays its banner and then loops indicates a kernel/DTB not found on the SD. In FEL mode, sunxi-fel version responds with the SoC identifier, and after write + exec, the serial console sees the U-Boot loaded into RAM starting: the board is saved, all that remains is to reflash a healthy microSD. This is exactly the chain documented in mainline: Allwinner BROM → U-Boot (pine64_plus_defconfig) → kernel + DTB, all from the SD.
Common errors
- USB-TTL adapter at 5 V level: the connector pins are 3.3 V (Allwinner standard I/O) — a 5 V module can damage the RX pin.
- Forgetting the common GND between the adapter and the board: silent console, then blaming the UART.
- Looking for the serial port on the 40-pin connector: the service console is on the EXP 2×5 (UART0, PB8/PB9); the Pi-2's UART2 (PB0/PB1) is disabled by default in the device tree.
- Leaving a microSD inserted while attempting FEL: the BROM boots the SD and does not enter FEL mode — remove the card, then plug in.
- Believing it is a "normal" peripheral OTG port: the mainline device tree configures
usb_otgwithdr_mode = "host"— FEL comes from the BROM before the kernel; once the kernel is launched, OTG is in host mode (see the DT override tutorial for gadget mode). - Overwriting the rescue SD: during recovery, work on a file image (
ddfrom a file) and checklsblkbefore eachdd of=/dev/sdX.
Other tutorials for this board
- Premier boot d'Armbian sur la PINE A64 (microSD, console série, rootfs)
- PINE A64 ou PINE A64+ ? Le pièg du réseau gigabit dès le premier regard
- Faire clignoter une LED avec libgpiod (numérotation GPIO du A64 : PB0 = 32)
- Benchmark Ethernet iperf3 : mesurer le piège 10/100 vs gigabit
- Lire un capteur I²C (BME280) sur le bus i2c-1 du connecteur Pi-2
- Un serveur maison qui consomme 2,5 W : Docker léger sur la PINE A64
Code examples for this board
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash