Les essais sur la carte
Sur le PC, tout passait. Sur la carte, les premières lectures ont échoué une fois sur six, puis plus du tout, puis à nouveau. Récit d’une mise au point où l’on a appris à dire « on ne sait pas ».
Dans cette page
Premier essai, sans la carte
Firmware v0.4.0 flashé sur le Pico W, rien de branché sur GP2 et GP3. La sonde rejoint le Wi-Fi, ouvre ses deux ports, répond en mDNS. Le journal rend ses limites ; « connecter » répond que la cible ne répond pas, ce qui est attendu. OpenOCD se connecte à la sonde, puis échoue faute de cible, ce qui est attendu aussi.
La carte branchée : des erreurs
La sonde lit l’identifiant du RP2040 et sa ROM sans faute. Mais les lectures de SRAM, de périphériques et des registres système échouent souvent, par le journal comme par OpenOCD, à 100 kHz comme à 1 MHz : 824 erreurs sur 4 952 lectures en 10 s. Aucune demande d’attente de la cible : la ligne se désynchronise, ou le bus renvoie une erreur.
Une hypothèse est posée : le programme PIO changeait SWDIO dans le même cycle que la descente de SWCLK, et un parasite d’un fil sur l’autre ferait voir un faux front à la cible. Le programme est corrigé (la donnée est posée un cycle plus tard), et le banc vérifie désormais qu’aucun changement de SWDIO ne tombe sur un front.
La comparaison qui n’a rien prouvé
Grâce à la mise à jour par le réseau, trois variantes ont été comparées sans toucher au câblage :
| Variante | Identifiant, 1 000 lectures | Relevé de 10 s |
|---|---|---|
| PIO corrigée | 1 000 justes | 0 erreur |
| PIO d’origine | 1 000 justes | 0 erreur |
| PIO d’origine, sans réserver la machine PIO | 1 000 justes | 0 erreur |
Les erreurs avaient disparu dans les trois cas, après que la carte a été éteinte puis rallumée et le Pico W rebranché. Le firmware n’était donc pas en cause, et l’hypothèse n’est pas confirmée : faux contact ou état de la carte, on ne sait pas. La correction est gardée, car elle ne coûte rien.
Les erreurs reviennent
Pour flasher Eliott65 v0.58.0 par le Wi-Fi, OpenOCD n’arrivait plus à lire la mémoire. Cette fois, les lectures par blocs revenaient avec une parité fausse, puis la ligne se désynchronisait ; une lecture isolée passait. Après un nouveau câblage, c’était pire : même l’identifiant revenait faux, jusqu’à 30 % du temps, décalé d’un bit, signature d’un faux front d’horloge vu par la cible.
Une variante aux broches plus douces (2 mA au lieu de 4, pente lente) a été installée par le réseau :
| Mesure | 4 mA | 2 mA |
|---|---|---|
| Identifiant, 1 000 lectures à 100 kHz | 702 justes | 1 000 justes |
| Identifiant à 1 et 4 MHz | — | 1 000 justes à chaque vitesse |
| Blocs de 200 mots à 100 et 200 kHz | — | 0 erreur |
| Blocs de 200 mots à 400 kHz | — | 2 blocs en échec sur 50 |
| Blocs de 200 mots à 1 MHz | — | erreurs après 20 à 150 mots |
| Relevé de 10 s à 1 MHz, lectures d’un mot | — | 0 erreur |
Le réglage à 2 mA est gardé. Eliott65 v0.58.0 a alors été flashé par le Wi-Fi à 200 kHz, et vérifié, en 1 min 27 s.