🛠 Auditer le stepping de son RP2350 : fuite Bank 0 (E9), errata bootrom et parades

RP2350 (générique / cartes basées sur le RP2350) · avance · Schéma : IMG-rp2350-generic-avance-3-rp2350-errata-stepping-audit.svg — puce RP2350 vue de dessus avec le registre CHIP_ID.REVISION en loupe, broches du Bank 0 surlignées avec un courant de fuite de 120 µA vers une entrée flottante à 2,2 V, calendrier A2 → A3 → A4, multimètre en mesure de courant

Objectifs

Le RP2350 a un passé : le silicium A2 (premiers lots) traîne des errata documentés, le plus célèbre — RP2350-E9 — empoisonne les consommations et les entrées flottantes : une broche du Bank 0 configurée en entrée source ~120 µA quand le potentiel flotte entre les niveaux logiques, et remonte seule vers 2,2 V. D'abord qualifié de « latching pull-down », le problème a été reclassé en « fuite accrue du Bank 0 quand l'entrée du pad est activée », signalé notamment par les développeurs de Bus Pirate, et corrigé dans les steppings A3/A4 annoncés en juillet 2025 (pico-feedback#401 ; annonce A3/A4 + RP2354). Ce tuto : identifier ton stepping, mesurer la fuite, et rendre tout design robuste quel que soit le lot.

Matériel

Identifier le stepping

// stepping.c — CHIP_ID.REVISION : 0x3 = A4 (datasheet Appendix C)
#include "pico/stdlib.h"
#include "hardware/regs/io_bank0.h"   // accès registre via SDK/regs
// Lire CHIP_ID.REVISION (bloc sysinfo/CHIP_ID) :
//   0x3 -> A4 ; les A2/A3 ont d'autres valeurs — table Appendix C.
// 
// cherche CHIP_ID dans hardware/regs de ton pico-sdk.
picotool info            // affiche aussi des infos puce via PICOBOOT

Mesurer la fuite E9 (A2)

// fuite.c — une entrée flottante du Bank 0 vue au multimètre
#include "pico/stdlib.h"
int main(void) {
    stdio_init_all;
    gpio_init(5);                    // GP5 = broche basse du Bank 0
    gpio_set_dir(5, GPIO_IN);        // entrée, SANS pull : cas du bug
    sleep_ms(1000);
    // Multimètre entre GP5 et GND (haute impédance) :
    //   A2 fautif : ~2,2 V et ~120 µA SOURCE par la broche (!)
    //   A3/A4     : potentiel instable mais courant négligeable
    gpio_pull_down(5);               // la parade : forcer un niveau
    //   -> la tension s'effondre à 0 V, le courant de fuite n'existe plus
    for (;;) { sleep_ms(1000); }
}

Parades conception (valables sur tous les steppings)

  1. Jamais d'entrée flottante : gpio_pull_up/gpio_pull_down sur TOUTE broche inutilisée — la règle d'or de l'EMC devient une règle de conso sur A2.
  2. Entrées analogiques : le diviseur/bouche-à-temps qui laisse l'ADC planer à mi-tension réveille la fuite — polarise tes sources.
  3. Sommeil bas courant : la conso en sleep est dominée par les fuites des pads — sur A2 avec 20 entrées flottantes, 20 × 120 µA = 2,4 mA, soit l'ordre de grandeur de tout ton budget batterie (le LDO a un mode veille à faible consommation, jusqu'à 1 mA pour la rétention en sleep, datasheet §6.3).
  4. Acheter récent : A3/A4 corrigent E9 et les errata bootrom E13 (IMAGE_DEF invalide bloque le boot), E14 (connect_internal_flash ignore la broche CS1), E15 (permissions OTP pages 62/63), E18 (motif ECC invalide dans le champ partition OTP = boot brické), E22–E23, E25 (datasheet Appendix C/D) — et les mitigations injection de fautes E20/E21/E24/E26.

Vérification attendue

Sur un A2 : GP5 flottant affiche ~2,2 V au multimètre et le courant de fuite se lit au shunt ; gpio_pull_down(5) ramène 0 V et le budget revient à la normale. Sur A3/A4 : le flottant ne source plus ce courant. CHIP_ID.REVISION = 0x3 confirme un A4. Consigne au propre : note le stepping dans la BOM de tes cartes — deux lots peuvent coexister chez ton distributeur.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels