CMSIS-DAP par le réseau
OpenOCD sait déjà envoyer ses commandes CMSIS-DAP par le réseau. La sonde n’avait plus qu’à les comprendre : c’est le travail de son processeur CMSIS-DAP, écrit pour le projet.
Le transport
Le module CMSIS-DAP par TCP d’OpenOCD fait précéder chaque commande d’un en-tête de 8 octets : une signature (« DAP »), la longueur, le type (requête ou réponse) et un octet réservé, en petit boutiste. Une commande porte au plus 1 024 octets, et le port par défaut est le 4441.
OpenOCD demande à la sonde combien de commandes elle accepte d’avance, puis les enchaîne sans attendre chaque réponse. C’est précieux par le Wi-Fi : la latence du réseau est en partie masquée. La sonde en accepte 8 d’avance, et ne produit une réponse que si sa place est libre dans le tampon d’émission.
Le processeur CMSIS-DAP
Le cœur de la sonde est un processeur CMSIS-DAP écrit pour le projet, en C portable. Il ne connaît le SWD qu’au niveau du transfert (« lis tel registre », « écris tel registre »), si bien qu’il tourne aussi bien sur le Pico W que sur le PC.
- Les commandes réalisées sont celles qu’OpenOCD emploie, relevées dans son code : informations, connexion et déconnexion, configuration des transferts, transferts simples et par blocs, abandon, délais, reset de la cible, broches, horloge, séquences SWD.
- La sélection de cœur du RP2040 : le RP2040 a deux cœurs derrière un même port de débogage « multipoint ». OpenOCD choisit le cœur par une séquence SWD particulière, que la sonde transmet telle quelle.
- Les détails qui comptent : lectures postées (la valeur d’une lecture arrive avec la suivante), vérification de la dernière écriture, reprise quand la cible répond « attends » (WAIT), comparaison de valeur, blocs découpés à la taille d’un paquet.
La cible simulée
Pour essayer sans matériel, le dépôt contient une cible simulée : le port de débogage du RP2040 avec ses deux cœurs (muet tant qu’aucun n’est sélectionné), sa mise sous tension, son accès mémoire et 64 Kio de RAM. Un serveur TCP sur le PC la présente comme une sonde.
Le vrai OpenOCD s’y connecte, lit l’identifiant du RP2040, examine la cible, écrit et relit des mots, des octets, des demi-mots et un bloc de 4 Kio.
Une précaution côté OpenOCD
Dans la version de développement d’OpenOCD utilisée, le port par défaut du module TCP n’est pas
remplacé par sa valeur : OpenOCD essaie le texte CMSIS_DAP_TCP_PORT. Il faut donc toujours
indiquer cmsis-dap tcp port 4441. Voir le mode d’emploi.