🛠 Débriquage FEL/xfel et boot SPI NOR sur le Lichee RV Dock
Objetivos
Cuando la microSD está muerta o el bootloader está corrupto, el D1 sigue siendo recuperable gracias al BROM de Allwinner: manteniendo pulsado el botón FEL del Dock y alimentando a través del USB-C del módulo, el chip espera una herramienta FEL. La utilidad de código abierto xfel (xboot/xfel) habla este protocolo: leer el identificador del chip, enviar un SPL+OpenSBI+U-Boot a la DRAM y arrancar sin tocar el almacenamiento — la puerta de emergencia para reprogramar la tarjeta, pero también la vía de producción: el Dock incorpora una pastilla SPI NOR (huella SOP8) y el módulo tiene pastillas SD-NAND, para un arranque autónomo sin tarjeta. Este tutorial cubre ambos casos.
Material
- Lichee RV Dock (botón FEL en la placa hija) + cable USB-A a USB-C (nunca C a C)
- PC con Linux y xfel compilado (
git clone 0 && cd xfel && make && sudo make install) - Para SPI: flash NOR SPI de 3,3 V (p. ej. 16 MB) soldado en la huella SOP8 del Dock, o chip existente a reprogramar
- Consola serie útil para seguir la fase de U-Boot
Código completo
# 1) Entrer en FEL : maintenir FEL, brancher l'USB-C, relâcher
lsusb | grep -i '1f3a:efe' # Allwinner FEL (1f3a = sunxi)
sudo xfel version # version du BROM détectée
sudo xfel sid # ID unique de la puce
# 2) Démarrer un SPL en RAM sans toucher au stockage (ex. image Buildroot) :
sudo xfel write 0x200000 u-boot-sunxi-with-spl.bin # adresse SPL D1
sudo xfel exec 0x200000 # saute dedans
# -> U-Boot démarre sur la série, peut booter un kernel depuis l'USB/TFTP
# 3) Reprogrammer le SPI NOR (puce soudée sur l'empreinte SOP8 du Dock) :
sudo xfel spiflash id # la NOR répond ?
sudo xfel spiflash erase 0 -l $((16*1024*1024))
sudo xfel spiflash write 0 u-boot-sunxi-with-spl.bin
# puis retirer le mode FEL : le BROM boote le SPL SPI quand la microSD est absente
# 4) Dépannage bas niveau :
sudo xfel read 0x4100000 64 -o dram.bin # lire la DRAM (test)
sudo xfel help spiflash
Verificación esperada
Manteniendo FEL al encender, lsusb muestra un dispositivo 1f3a:efe8 (BROM FEL) y sudo xfel version muestra la versión del BROM — prueba de que el enlace USB está vivo incluso con la tarjeta «brickada». xfel write + xfel exec hacen arrancar U-Boot, visible en la consola serie. Tras la programación SPI y la retirada de la microSD, la tarjeta reinicia sola en el SPL del NOR: el arranque continúa sin tarjeta, validando un montaje sin ranura accesible.
Errores frecuentes
- Cable C a C: el BROM nunca responderá en FEL tampoco (trampa CC de hardware del módulo, documentada por Sipeed).
- Permisos USB: sin regla udev, ejecutar
sudo xfel; si no, añadir la regla para 1f3a:efe8. - Equivocarse en la dirección de ejecución del SPL en D1: la dirección SRAM/DRAM esperada por el BROM D1 es específica (0x200000 en los ejemplos de xboot); seguir el README de xfel para sun20i.
- NOR SPI no soldada: el Dock a menudo se entrega solo con la HUELLA SOP8 vacía — verificar visualmente antes de
spiflash id, que fallará si no está. - Alimentación desde el PC durante el flash SPI: los picos de corriente del flash + Wi-Fi hacen que algunos puertos USB sufran caídas de tensión (brownout); usar un hub alimentado si aparecen errores de escritura.
- Esperar el modo FEL sin mantener pulsado el botón: el BROM solo permanece en FEL si el pin está fijado durante el arranque (de ahí el botón dedicado del Dock).
Otros tutoriales para esta placa
- Premier boot du Lichee RV Dock avec Ubuntu 24.04 RISC-V
- LEDs du Lichee RV Dock : LED verte et RGB WS2812 pilotée par le LEDC du D1
- Audio sur le Dock : enregistrer au micro numérique et jouer sur le haut-parleur 3 W
- Wi-Fi et Bluetooth du module RTL8723DS sur le Lichee RV Dock
- GPIO, touche utilisateur ADC et PWM sur le connecteur 2×20 du Lichee RV
- Tina Linux : l'OpenWrt vendor d'Allwinner pour le Lichee RV, installation et sysconfig
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash