Aller au contenu
Eliott65Sondewiki
Sommaire

Les mises à jour par le réseau

Changer de firmware demandait de débrancher le Pico W et de tenir le bouton BOOTSEL. Le câblage bougeait à chaque fois. Désormais la sonde se met à jour par le réseau, et se rattrape seule si ça tourne mal.

Dans cette page

Pourquoi

Pour comparer deux versions du SWD, il fallait reflasher le Pico W en BOOTSEL, donc le débrancher : le câblage bougeait, et la carte était même éteinte entre deux mesures. On ne comparait plus seulement le firmware. D’où la mise à jour par le réseau (OTA), en v0.5, puis l’amorce, en v0.6.

L’envoi et la vérification

L’outil e65s.py lit le fichier UF2 du firmware et l’envoie sur le port 4442, par morceaux, dans l’ordre. La sonde l’écrit dans une réserve de la flash, secteur par secteur, et relit chaque secteur. À la fin, elle relit toute l’image dans la flash et vérifie son CRC-32 et sa table des vecteurs. Une image tronquée, corrompue ou faite pour un autre microcontrôleur est refusée avant de toucher au firmware en place.

L’amorce

Le plan de la flash de la sondeLes 2 Mio de flash du Pico W, depuis la version 0.6.0. En tête, l'amorce de 32 Kio, jamais mise à jour par le réseau. Puis l'application, 504 Kio au plus, en 0x008000. La réserve, en 0x100000, reçoit un nouveau firmware ; la sauvegarde, en 0x180000, garde l'ancien. Les deux derniers secteurs, en 0x1FE000 et 0x1FF000, portent l'état de la mise à jour, écrits en alternance.Flash du Pico W : 2 Mio0x000000amorce, 32 Kiodécide au démarrage ; jamais mise à jour par le réseau0x008000applicationle firmware de la sonde, 504 Kio au plus0x100000réservereçoit le nouveau firmware, vérifié avant usage0x180000sauvegardecopie de l'ancien firmware, pour revenir en arrière0x1FE000étatdeux secteurs écrits en alternance, avec un numéro de séquenceUne coupure de courant à n'importe quel moment est rattrapée au démarrage suivant.(non proportionnel)
Le plan de la flash depuis la v0.6.0 : l’amorce en tête, l’application, la réserve, la sauvegarde et deux secteurs d’état.

Une image ne peut pas décider elle-même de son remplacement : ce choix doit venir d’un code qui s’exécute avant elle et que la mise à jour ne touche jamais. C’est l’amorce, 32 Kio en tête de flash (9 Kio utilisés).

Une mise à jour, vue par l'amorceLe firmware reçu passe à l'état « à installer » ; au démarrage, l'amorce le vérifie et le recopie sur l'application, qui démarre « à l'essai ». Si elle est validée par le PC dans les 2 minutes, elle reste en place. Après 3 démarrages sans validation, l'amorce remet la sauvegarde : état « restauré ». Le chien de garde arrête une application qui se bloque.OTA reçueimage vérifiéeà installerréserve vérifiéeà l'essai3 démarrages au plusvalidéle nouveau resteappliquerrecopievalidationrestaurél'ancien est remis3 essais sans validationValidation : le PC doit joindre la sonde dans les 2 minutes ; chien de garde de 8 s.
Une mise à jour, de la réception à la validation, ou au retour à l’ancien firmware.
  1. Appliquer : l’application copie le firmware en place dans la sauvegarde, écrit l’état « à installer », puis redémarre. Elle n’efface jamais son propre code.
  2. Installer : au démarrage, l’amorce vérifie la réserve, la recopie sur l’application, vérifie le résultat et passe « à l’essai ».
  3. À l’essai : l’amorce compte un essai, arme le chien de garde (8 s) et lance l’application. Celle-ci doit être validée par le PC dans les 2 minutes ; e65s.py le fait dès que la sonde revient sur le réseau.
  4. Retour en arrière : après 3 démarrages sans validation, l’amorce remet la sauvegarde. La sonde revient sur l’ancien firmware, état « restauré ».

Sur la sonde

  • Une mise à jour prend 18 s de bout en bout ; plusieurs de suite ont réussi.
  • Une image en panne (qui boucle dès son démarrage) a été lancée 3 fois, arrêtée à chaque fois par le chien de garde, puis remplacée par l’ancienne : la sonde est revenue seule, en 52 s.
  • Pas encore essayé sur le Pico W : une image qui démarre mais n’est jamais validée (3 fois 2 minutes). Le cas est couvert par les bancs sur le PC.

Les limites

  • L’amorce elle-même ne se met à jour que par BOOTSEL.
  • La validation ne prouve que la connexion : une image qui répond sur le réseau mais dont le SWD serait cassé reste en place.
  • Il n’y a pas d’authentification : quiconque est sur le réseau local peut flasher la sonde.

Sources dans le dépôt : docs/adr/ADR-0004-mise-a-jour-par-le-reseau.md, docs/adr/ADR-0005-amorce-et-retour-arriere.md, docs/journal/05-mise-a-jour-par-le-reseau.md, docs/journal/07-amorce.md.