[Actualité] [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico
				par , 19/05/2023 à 09h00  (8173 Affichages)
			
		Et nous nous retrouvons m'sieurs-dames pour le cinquième épisode de cette série, non pas avec une Raspberry Pi Pico... mais deux Raspberry Pi Pico !
Mais pourquoi un tel étalage de Pi Pico, @f-leb ? Tu prépares une expo de Pico ? Une pico party ?
Mais non... À droite, vous avez la Pi Pico cible que l'on veut programmer et déboguer.
La Pi Pico de gauche fait l'interface entre le PC de développement et la Pi Pico cible à droite, et constituera un dispositif communément appelé sonde de débogage.
Notre sonde aura donc trois fonctions :
- Programmer plus facilement la cible depuis le PC de développement. Parce que passer la cible en mode USB pour qu'elle se comporte comme un périphérique de stockage USB (on appuie sur le bouton Bootsel tout en branchant le câble USB, ou en faisant un Reset...), faire glisser le binaire uf2 depuis l'explorateur de fichiers, c'est bien au début, mais la répétition de ces manipulations devient vite pénible pendant la mise au point de vos programmes...
- Déboguer bien sûr, la possibilité de dérouler le programme pas-à-pas ou jusqu'à des points d'arrêt, voir l'état des variables, des registres, de la pile d'appel, etc.
- En bonus, elle pourra servir de pont USB-UART pour échanger facilement des informations série UART entre la cible et le PC de développement.
Je ne développerai que la première fonction dans ce billet, et notre Pico bis sera donc un simple programmateur pour l'instant, ce qui la rend déjà bien utile, mais j'espère bien aborder la partie débogage dans un futur billet...
Câblage de la sondeÀ noter que la Fondation Raspberry Pi a évidemment senti le filon en proposant sa propre sonde Raspberry Pi Debug Probe officielle qui est beaucoup plus jolie avec son boîtier transparent et ses câbles à connecteurs JST. En quelque sorte, notre deuxième Pi Pico constituera la sonde de débogage du pauvre, mais elle marchera très bien (surtout que la sonde officielle est une Pico déguisée...).
Sur le plan matériel, il faut relier la sonde au port SWD (Serial Wire Debug) de la Pi Pico cible. Pour cela, il faudra souder quelques broches...
Port de débogage SWD avec ses trois broches soudées :
SWCLK, GND, SWDIO
Sur le schéma de câblage ci-dessous, on voit comment la sonde (à gauche) est reliée au port SWD de la Pi Pico cible (à droite). La cible est alimentée en reliant les broches VSYS (3,3V) des deux cartes.
Installation du firmware picobrobe
Il faut ensuite installer le firmware picobrobe dans la sonde. Vous pouvez récupérer les sources en clonant le dépôt Github officiel de la Fondation Raspberry Pi, générer le projet (build) et le téléverser dans la sonde comme n'importe quel autre projet en faisant un glisser-déposer du fichier picoprobe.uf2 :
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
Encore plus rapidement, vous récupérez directement la dernière release du fichier picoprobe.uf2.
Installation du logiciel OpenOCD
OpenOCD (Open On-Chip Debugger) est le logiciel qui parle à l'oreille des microcontrôleurs. Il supporte le protocole SWD pour communiquer directement avec les cœurs de processeurs à base d'ARM comme le RP2040 de la Pi Pico.
Pour installer la version d'openOCD (un fork) qui supporte la Raspberry Pi Pico (avec une distribution Linux Debian/Ubuntu) :
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
Pour tester l'installation :
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
Test du programmateur SWD
Il ne reste plus qu'à tester le fonctionnement de notre nouveau programmateur. Si vous avez suivi le premier billet de la série, vous avez sans doute conservé le projet de démonstration blink qui fait clignoter la LED de la carte. Rendez-vous dans ce cas dans le sous-dossier build du projet qui doit déjà contenir le fichier binaire blink.elf prêt à téléverser.
Il reste à lancer la commande :
L'argument "program blink.elf verify reset exit" indique à OpenOCD de flasher le binaire blink.elf après y avoir écrasé le contenu précédent, de vérifier après coup que l'opération s'est bien déroulée, de faire un reset du RP2040 pour que le programme s'exécute, et enfin de se déconnecter de la puce RP2040.
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "program blink.elf verify reset exit"
Compte-rendu de la commande dans le terminal :
Après le message ** Resetting Target **, la LED de la Pi Pico cible doit se mettre à clignoter comme prévue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Si l'opération échoue avec le message Info: DAP init failed, c'est qu'OpenOCD ne voit pas la cible par l'interface SWD. Il faudra vérifier les câbles, le câblage, l'alimentation des cartes... et ouvrir une discussion sur le forum Raspberry Pi le cas échéant
À suivre...
Sitographie
- Document Getting started whith Raspberry Pi Pico, Appendix A: Using Picoprobe
- Sur Developpez : La Fondation Raspberry Pi lance une sonde de débogage pour le Pi Pico et d'autres cartes basées sur Arm.






![Envoyer le billet « [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico » dans le blog Viadeo](https://forum.developpez.be/images/misc/bookmarksite_viadeo.gif)
![Envoyer le billet « [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico » dans le blog Twitter](https://forum.developpez.be/images/misc/bookmarksite_twitter.png)
![Envoyer le billet « [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico » dans le blog Google](https://forum.developpez.be/images/misc/bookmarksite_google.gif)
![Envoyer le billet « [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico » dans le blog Facebook](https://forum.developpez.be/images/misc/bookmarksite_facebook.gif)
![Envoyer le billet « [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico » dans le blog Digg](https://forum.developpez.be/images/misc/bookmarksite_digg.gif)
![Envoyer le billet « [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico » dans le blog Delicious](https://forum.developpez.be/images/misc/bookmarksite_delicious.gif)
![Envoyer le billet « [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico » dans le blog MySpace](https://forum.developpez.be/images/misc/bookmarksite_myspace.gif)
![Envoyer le billet « [Raspberry Pi Pico][SDK C/C++] Fabriquer un programmateur SWD pour la Pi Pico avec... une autre Pi Pico » dans le blog Yahoo](https://forum.developpez.be/images/misc/bookmarksite_yahoo.gif)

 Consulter le profil
 Consulter le profil Marquer ce blog comme lu
 Marquer ce blog comme lu
