🛠 Sauver une PINE A64 briquée : console série EXP et mode FEL
Objetivos
Una PINE A64 que no arranca no está muerta: el BROM de Allwinner expone un modo de recuperación FEL en el puerto micro-USB OTG, estándar de la familia sunxi. Combinado con la consola serie en el conector EXP 2×5 (UART0, pines PB8/PB9, 115200 8N1 — el stdout-path = "serial0:115200n8" del device tree mainline), puedes observar cada etapa de la cadena de arranque (BROM → U-Boot → kernel + DTB desde la microSD), cargar un U-Boot en RAM mediante FEL sin tocar la tarjeta SD, y reconstruir una tarjeta de respaldo. Ten en cuenta: la tarjeta no tiene SPI NOR ni arranque eMMC por defecto — todo se reproduce desde la microSD, lo que hace la recuperación sencilla pero el FEL indispensable cuando el bootloader de la SD está dañado.
Material
- 1 × PINE A64/A64+ (micro-USB OTG: en modo FEL, es el puerto de servicio)
- 1 × adaptador USB-TTL 3,3 V en el EXP (RX/TX cruzados, GND común) — nunca nivel 5 V
- 1 × cable micro-USB de datos hacia el PC
- PC Linux con
sunxi-tools(sudo apt install sunxi-tools) ypicocom
Código completo
# 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.
Verificación esperada
Con la consola serie conectada, el silencio total significa que la tarjeta no arranca en absoluto (alimentación, microSD ausente/ilegible) — ya es una respuesta. Un U-Boot que muestra su banner y luego entra en bucle indica un kernel/DTB no encontrado en la SD. En modo FEL, sunxi-fel version responde con el identificador del SoC, y después de write + exec, la consola serie ve arrancar el U-Boot cargado en RAM: la tarjeta está salvada, solo queda regrabar una microSD sana. Es exactamente la cadena documentada en mainline: BROM Allwinner → U-Boot (pine64_plus_defconfig) → kernel + DTB, todo desde la SD.
Errores frecuentes
- Adaptador USB-TTL en nivel 5 V: los pines del conector son de 3,3 V (estándar I/O Allwinner) — un módulo de 5 V puede dañar el pin RX.
- Olvidar el GND común entre el adaptador y la tarjeta: consola muda, y luego se culpa al UART.
- Buscar el puerto serie en el conector de 40 pines: la consola de servicio está en el EXP 2×5 (UART0, PB8/PB9); el UART2 del Pi-2 (PB0/PB1) está desactivado por defecto en el device tree.
- Dejar una microSD insertada al intentar el FEL: el BROM arranca desde la SD y no entra en modo FEL — retirar la tarjeta, y luego conectar.
- Creer que es un puerto OTG en modo dispositivo «normal»: el device tree mainline configura
usb_otgcondr_mode = "host"— el FEL proviene del BROM antes del kernel; una vez lanzado el kernel, el OTG está en modo host (ver el tutorial de override DT para el modo gadget). - Sobrescribir la SD de respaldo: en la recuperación, trabajar sobre una imagen de archivo (
dddesde un archivo) y verificarlsblkantes de cadadd of=/dev/sdX.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash