🛠 Booter sur un SSD NVMe et récupérer une carte bloquée (MaskROM)
Objectifs
Installer le système sur un SSD NVMe dans le slot M.2 M-Key (le RK3566 boote via un petit chargeur écrit dans la SPI NOR de 16/32 MB, le rootfs restant sur le SSD) et savoir remettre la carte d'aplomb en mode MaskROM si le bootloader est corrompu.
Matériel
- Orange Pi 3B (2/4/8 GB), SSD M.2 2280/2242 — le slot est électrique PCIe 2.0/2.1 x1, bridé à ~500 MB/s théoriques : un SSD d'entrée de gamme suffit
- Alimentation 5 V / 3 A, microSD pour l'amorçage initial, câble USB-C data
- PC sous Windows avec RKDevTool (ou
rkdeveloptoolsous Linux) pour le mode MaskROM (touche MaskROM présente sur la carte)
Code complet
# 1. Depuis Armbian sur microSD : vérifier que le kernel voit le SSD (slot &pcie2x1 activé)
sudo fdisk -l | grep nvme # attendu : /dev/nvme0n1
sudo dmesg | grep -i "pci.*link.*Gen" # attendu : "2.5 GT/s PCIe" (Gen2 x1)
# 2. Benchmark de cohérence (attendu ~300-450 MB/s, pas 3000+)
sudo apt install fio
fio --name=nvme --rw=write --bs=1M --size=256M --numjobs=1 --direct=1 \
--filename=/mnt/ssd/testfile --runtime=30 --group_reporting
# 3. Copier le système en cours sur le SSD (écrit le chargeur en SPI NOR puis le rootfs en NVMe)
sudo apt install armbian-config
sudo armbian-install # cible "NVMe", puis redémarrer sans la microSD
# 4. Recouvrement : carte qui ne boote plus
# Éteindre -> maintenir la touche MaskROM -> brancher l'USB-C vers le PC -> RKDevTool
# détecte « Found OneDevice » (USB 2.0 device) : réécrire mini-loader / uboot puis
# effacer la SPI NOR, ou reflasher eMMC, puis rebooter sur microSD propre.
Vérification attendue
Après armbian-install et redémarrage sans microSD : lsblk montre / sur /dev/nvme0n1, uname -a démarre, et le boot suit l'ordre ROM RK3566 SPI flash → eMMC → microSD → USB. En MaskROM, lsusb (Linux) liste un périphérique « Rockchip USB Peripheral ».
Erreurs fréquentes
- Attendre 3 GB/s : le slot est limité à PCIe 2.1 x1 (~500 MB/s théoriques, wiki officiel §2.6).
- Vieilles images Armbian : il fallait des U-Boot séparés NVMe/SATA et un bug de préfixe d'overlay cassait l'un ou l'autre (armbian/build#10896) — mettre à jour.
- Confondre les révisions v1.1/v2.1 pour le device tree : Ethernet/Wi-Fi peuvent mourir après le clonage.
- SSD SATA dans un slot câblé NVMe (le slot est commutable SATA/PCIe, vérifier le réglage) ou absence de vis de fixation : contact intermittent en Gen2.
- Oublier la touche MaskROM : sans elle, un bootloader corrompu dans la SPI NOR ne se laisse pas réécrire via USB.
Autres tutoriels pour cette carte
- Faire clignoter une LED via le GPIO avec libgpiod
- Lire un bouton poussoir et afficher l'état dans la console
- Premier script Python : bouton + LED avec python3-libgpiod
- Variation d'intensité d'une LED avec un signal PWM
- Interroger un capteur I2C sur les broches 3/5 du connecteur
- Configurer Ethernet gigabit et Wi-Fi puis se connecter en SSH
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash