🛠 Débriquage FEL/xfel et boot SPI NOR sur le Lichee RV Dock
Objectifs
Quand la microSD est morte ou le bootloader corrompu, le D1 reste récupérable grâce au BROM Allwinner : en maintenant le bouton FEL du Dock puis en alimentant via l'USB-C du module, la puce attend un outil FEL. L'utilitaire open source xfel (xboot/xfel) parle ce protocole : lire l'identifiant de puce, envoyer un SPL+OpenSBI+U-Boot en DRAM et démarrer sans toucher au stockage — la porte de secours pour rebriquer la carte, mais aussi la voie de production : le Dock embarque une pastille SPI NOR (empreinte SOP8) et le module des pastilles SD-NAND, pour un boot autonome sans carte. Ce tutoriel couvre les deux.
Matériel
- Lichee RV Dock (bouton FEL sur la carte fille) + câble USB-A vers USB-C (jamais C-vers-C)
- PC Linux avec xfel compilé (
git clone 0 && cd xfel && make && sudo make install) - Pour le SPI : flash NOR SPI 3,3 V (ex. 16 Mo) soudé sur l'empreinte SOP8 du Dock, ou puce existante à reprogrammer
- Console série utile pour suivre la phase U-Boot
Code complet
# 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
Vérification attendue
En maintenant FEL à la mise sous tension, lsusb montre un périphérique 1f3a:efe8 (BROM FEL) et sudo xfel version affiche la version du BROM — preuve que la liaison USB est vivante même carte « briquée ». xfel write + xfel exec font démarrer U-Boot, visible sur la console série. Après programmation SPI et retrait de la microSD, la carte redémarre seule sur le SPL du NOR : le boot continue sans carte, validant un montage sans fente accessible.
Erreurs fréquentes
- Câble C-vers-C : le BROM ne répondra jamais en FEL non plus (piège CC matériel du module, documenté par Sipeed).
- Permissions USB : sans règle udev, lancer
sudo xfel; sinon ajouter la règle pour 1f3a:efe8. - Se tromper d'adresse d'exécution du SPL sur D1 : l'adresse SRAM/DRAM attendue par le BROM D1 est spécifique (0x200000 dans les exemples xboot) ; suivre le README de xfel pour sun20i.
- NOR SPI non soudée : le Dock ne livre souvent qu'avec l'EMPREINTE SOP8 vide — vérifier visuellement avant
spiflash id, qui échoue sinon. - Alimentation par le PC pendant le flash SPI : les pics de courant du flash + Wi-Fi font brownouter certains ports USB ; utiliser un hub alimenté si des erreurs d'écriture apparaissent.
- Attendre le mode FEL sans maintenir le bouton : le BROM ne reste en FEL que si la broche est plaquée au boot (d'où le bouton dédié du Dock).
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash