🛠 Boot UF2, mode BOOTSEL et recovery d'une carte briquée
Objectifs
Comprendre la chaîne de boot du RP2350 : le code de boot USB vit dans la ROM et ne peut pas être écrasé — une Pico 2 est donc quasi impossible à briquer définitivement. Vous apprendrez le mode BOOTSEL, le format UF2, les outils picotool/MSD, et comment récupérer une carte qui ne démarre plus (mauvais firmware, binaire RP2040, secure boot mal configuré).
Matériel
- 1 × Raspberry Pi Pico 2 (éventuellement « briquée » volontairement)
- Câble micro-USB data ; picotool (build host du SDK ou release GitHub)
- Optionnel : câbleur SWD (CMSIS-DAP / pico-probe) pour le debug sans bouton
Code complet
/* saut_vers_bootsel.c — depuis le programme, retourne au mode UF2
Utile pour un produit : mise à jour sans ouvrir le boitier. */
#include "pico/stdlib.h"
#include "pico/bootrom.h"
#define BTN_PIN 22
int main(void) {
gpio_init(BTN_PIN); gpio_set_dir(BTN_PIN, GPIO_IN); gpio_pull_up(BTN_PIN);
stdio_init_all;
sleep_ms(2000); /* fenetre pour ouvrir le terminal */
printf("Appui long sur GP22 -> mode BOOTSEL (lecteur RPI-RP2)\n");
while (gpio_get(BTN_PIN)) sleep_ms(10);
rom_reset_to_bootsel; /* ne revient jamais */
}
Procédure recovery sans code : 1) maintenir BOOTSEL et brancher l'USB ; 2) le lecteur RPI-RP2 apparaît (la ROM répond toujours) ; 3) copier un UF2 valide (pico2 !) pour écraser la flash ; 4) la carte redémarre. Inventaire : picotool info -a et picotool reboot -u (reboot USB) depuis n'importe quel firmware UF2.
Vérification attendue
Quelle que soit la saleté flashée (binaire RP2040, programme bouclant, RAM saturée), BOOTSEL au branchement fait réapparaître le lecteur RPI-RP2 et un UF2 pico2 valide restaure la carte. picotool info affiche la Pico 2 (RP2350) en boot USB.
Erreurs fréquentes
- Croire la carte morte : si BOOTSEL produit le lecteur, la ROM est saine — c'est structurellement impossible à briquer par logiciel (hors OTP).
- Copier un UF2 compilé pour pico (RP2040) : la carte redémarre dans le vide ; refaire BOOTSEL puis flasher un vrai build pico2.
- Câble de charge seule ou hub capricieux : le lecteur n'apparaît jamais, tester un autre port/câble avant tout.
- Sous Linux, oublier les droits udev ou utiliser
picotool loadsans--boot2adapté quand on flashe par SWD en binaire brut. - Secure boot activé par erreur dans l'OTP : seul un firmware correctement signé redémarrera — documenter ses clés, l'OTP est irréversible.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython