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

RP2350 (genérico / placas basadas en 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

Objetivos

El RP2350 tiene un pasado: el silicio A2 (primeros lotes) arrastra erratas documentadas, la más famosa — RP2350-E9 — afecta al consumo y a las entradas flotantes: un pin del Bank 0 configurado como entrada fuente de ~120 µA cuando el potencial flota entre los niveles lógicos, y sube solo hasta 2,2 V. Inicialmente calificado como «latching pull-down», el problema fue reclasificado como «fuga aumentada del Bank 0 cuando la entrada del pad está activada», reportado especialmente por los desarrolladores de Bus Pirate, y corregido en los steppings A3/A4 anunciados en julio de 2025 (pico-feedback#401 ; anuncio A3/A4 + RP2354). Este tutorial: identificar tu stepping, medir la fuga y hacer cualquier diseño robusto independientemente del lote.

Material

Identificar el 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

Medir la fuga 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); }
}

Soluciones de diseño (válidas en todos los steppings)

  1. Nunca entradas flotantes: gpio_pull_up/gpio_pull_down en CADA pin no utilizado — la regla de oro de la EMC se convierte en una regla de consumo en A2.
  2. Entradas analógicas: el divisor/temporizador que deja al ADC a media tensión despierta la fuga — polariza tus fuentes.
  3. Sueño de bajo consumo: el consumo en modo sleep está dominado por las fugas de los pads — en A2 con 20 entradas flotantes, 20 × 120 µA = 2,4 mA, lo cual es del orden de magnitud de todo tu presupuesto de batería (el LDO tiene un modo de espera de bajo consumo, hasta 1 mA para la retención en sleep, datasheet §6.3).
  4. Comprar reciente: A3/A4 corrigen E9 y las erratas de bootrom E13 (IMAGE_DEF inválido bloquea el arranque), E14 (connect_internal_flash ignora el pin CS1), E15 (permisos de páginas OTP 62/63), E18 (patrón ECC inválido en el campo de partición OTP = arranque bloqueado), E22–E23, E25 (datasheet Apéndice C/D) — y las mitigaciones de inyección de fallos E20/E21/E24/E26.

Verificación esperada

En un A2: GP5 flotante muestra ~2,2 V en el multímetro y la corriente de fuga se lee en el shunt; gpio_pull_down(5) devuelve 0 V y el presupuesto vuelve a la normalidad. En A3/A4: la entrada flotante ya no entrega esa corriente. CHIP_ID.REVISION = 0x3 confirma un A4. Consejo: anota el stepping en la BOM de tus tarjetas — dos lotes pueden coexistir en tu distribuidor.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales