🛠 Démarrer sur un SSD NVMe et récupérer un bootloader cassé
Objectifs
Installer le système sur un SSD NVMe branché sur le connecteur PCIe 2.0 ×1 (FPC) du Raspberry Pi 5, configurer l'ordre de démarrage du bootloader EEPROM, puis savoir remettre un bootloader en état via le mode recouvrement USB (rpiboot) en cas de brique.
Matériel
- Raspberry Pi 5 (4-16 GB) + alimentation officielle 27 W
- HAT M.2 ou boîtier compatible HAT+ avec SSD NVMe (le connecteur FPC est désactivé sans HAT+ détecté ou
dtparam=pciex1) - Lecteur de carte microSD + câble USB-C data pour le mode recouvrement
- PC avec
rpiboot(paquet rpiboot / util Linux) installé
Code complet
# 1) Activer le contrôleur PCIe côté OS
sudo raspi-config -> Advanced -> PCIe -> Boot Original Firmware
# ou manuellement dans /boot/firmware/config.txt :
grep -q '^dtparam=pciex1$' /boot/firmware/config.txt || \
echo 'dtparam=pciex1' | sudo tee -a /boot/firmware/config.txt
# 2) Copier le système en cours sur le NVMe (après redémarrage)
sudo apt install -y nvme-cli rsync
lsblk | grep nvme
sudo rsync -aHAXx --info=progress2 / /mnt/nvme/ # NVMe monté, /boot inclus
# 3) Ordre de boot EEPROM : SD -> USB -> NVMe, et sonde PCIe sans HAT+
sudo rpi-eeprom-config --edit
# BOOT_ORDER=0xf416
# PCIE_PROBE=1
sudo rpi-eeprom-config | grep -E 'BOOT_ORDER|PCIE_PROBE'
# 4) Recouvrement : bootloader EEPROM effacé/cassé
# Éteindre, maintenir le bouton PWR_ON, brancher USB-C vers le PC, puis :
sudo rpiboot -d /usr/share/rpiboot/msd
# La carte apparaît comme lecteur USB : réécrire l'EEPROM avec
# Raspberry Pi Imager -> Bootloader administration (ou rpi-eeprom-update).
Vérification attendue
Après redémarrage, lsblk montre la racine sur /dev/nvme0n1 et dmesg | grep -i nvme trace l'énumération PCIe. Le démarrage se fait sans carte microSD. En mode recouvrement, lsusb côté PC voit un périphérique « BCM2835 Boot ROM » et le volume MSD apparaît.
Erreurs fréquentes
- Oublier
dtparam=pciex1ou le mode HAT+ : le NVMe n'est jamais énuméré, le Pi redémarre sur SD. - Tenter le mode Gen 3 non certifié : instabilités et déconnexions aléatoires documentées ; rester en Gen 2.
- Alimentation insuffisante : un SSD NVMe consomme au pic ; avec une alimentation non 5 V/5 A le budget USB/PCIe est bridé à 600 mA.
- rsync sans monter /boot/firmware séparément : le noyau reste sur la SD ; vérifier
findmnt /boot/firmware. - Confondre recouvrement rpiboot et réécriture d'image : rpiboot ne répare que le bootloader EEPROM, pas le système.
- Câble USB-C de charge seule : pas d'énumération USB côté PC ; utiliser un câble data.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython