Aller au contenu
Eliott65Sondewiki
Sommaire

Le firmware du Pico W

Sur le Pico W, trois pièces relient le processeur CMSIS-DAP au monde : un programme PIO pour les deux fils du SWD, la pile réseau lwIP pour le Wi-Fi, et une boucle qui sert les deux ports.

Le SWD par PIO

Le RP2040 du Pico W a des PIO : de petits processeurs d’entrées-sorties, programmables, qui produisent des signaux au cycle près sans occuper le processeur principal. La sonde y fait tourner un programme de 13 instructions, écrit pour le projet.

  • Le programme reçoit un mot de commande (nombre de bits, sens de SWDIO), puis, pour une écriture, les données.
  • Quatre cycles PIO par bit : l’horloge SWCLK vaut l’horloge de la PIO divisée par 4.
  • La sonde pose ses données horloge basse ; elle lit celles de la cible au front montant.
  • Au-dessus, le protocole SWD est écrit en C : requête, retournement de la ligne, acquittement, données, parité, cycles de repos, cas où la cible demande d’attendre ou signale une faute. Il ne connaît que deux primitives, écrire et lire n bits : sur la sonde, c’est la PIO qui les réalise ; sur le PC, un simulateur de PIO (voir Les bancs de test).

Le Wi-Fi et le réseau

  • lwIP sans système d’exploitation : la boucle principale interroge la puce Wi-Fi (CYW43) et la pile réseau à chaque tour. Pas de tâches, pas de système.
  • Connexion sans blocage, avec reprise si le réseau disparaît ; la LED clignote pendant la recherche et reste fixe une fois connectée.
  • Le nom eliott65sonde est annoncé par DHCP et par mDNS : eliott65sonde.local suffit pour la joindre.
  • Les identifiants Wi-Fi sont dans un fichier exclu du dépôt ; seul un modèle est versionné.

Les deux serveurs

PortServiceClients
4441CMSIS-DAP par TCPun seul à la fois ; OpenOCD
4442journal local et mises à jour, protocole propre (en-tête « E65S »)l’outil e65s.py

Les paquets sont reconstitués à partir du flux TCP ; les réponses partent par morceaux, au rythme du tampon d’émission. Les relevés du journal sont faits dans la boucle principale, entre deux interrogations du réseau.

La place prise

Le firmware occupe environ 340 Kio de flash (178 Kio de RAM statique sur 264 avec le journal). Depuis la v0.6.0, il démarre en 0x10008000, derrière l’amorce : voir Les mises à jour.

Sources dans le dépôt : docs/adr/ADR-0002-firmware-pico-w.md, docs/journal/02-firmware-pico-w.md, docs/journal/06-integrite-du-signal.md.