Raspberry Pi Pico - Le debug

24 septembre 2025

 Raspberry Pi Pico - Le débogage

Le débogage d’un RP2040, le microcontrôleur du Raspberry Pi Pico, n’est pas trivial. Le guide de démarrage rapide donne quelques pistes et l’architecture nécessaire :

  • Un Raspberry Pi Pico avec son programme (compiler en mode débug, de préférence)
  • Une sonde de débogage
  • OpenOCD qui s’interface avec la sonde de débogage
  • gdb (https://www.sourceware.org/gdb/)
  • Un IDE qui s’interface avec gdb

Architecture pour le débogage du Raspberry Pi Pico

 La sonde de débogage

La fondation Raspberry Pi vend une sonde de débogage, nommée Raspbery Pi Debug Probe. Mais si vous avec des Raspberry Pico sous la main et un fer à souder, vous serez plutôt intéressés par la possibilité de réaliser vous-même la sonde.

Le dépôt contenant le code se trouve ici : https://github.com/raspberrypi/debugprobe.git

Le Reademe détaille bien la compilation du code. D’abord récupérer le code :

mkdir debugprobe
cd debugprobe
git clone https://github.com/raspberrypi/debugprobe .
git submodule update --init --recursive

Puis le compiler, presque comme un projet standard. Il faut cependant préciser sur on compile pour Raspberry Pi Pico ou pour la Raspberry Pi Debug Probe. Pour le Pico :

 mkdir build
 cd build
 cmake -DDEBUG_ON_PICO=ON ..
 make

Et injection du code avec Pico Tool, dans le répertoire build

sudo picotool load build/debugprobe_on_pico.uf2

 OpenOCD

Open On-Chip Debugger, le déboguer de puce libre. C’est le logiciel qui s’interface avec la sonde de débogage. La sonde de débogage que nous utilisons est supportée à partir de la version 12. Si vous être dans Debian 13 (Trixie), une installation classique devrait faire l’affaire :

sudo apt install openocd

Sinon, prenez la version de la fondation Raspberry Pi. Dans le répertoire de votre choix

mkdir openocd
cd openocd
git clone https://github.com/raspberrypi/openocd.git .
git submodule sync
git submodule init --recursive

Pour compiler openocd, il vous faudra jimtcl, qui est dans un répertoire de openocd

cd jimtcl
./configure
make
sudo make install
cd ..

Vous pouvez compiler openocd :

./configure
make
sudo make install

Testez pour vous assurer que l’installation s’est bien passée, si vous avez le résultat suivant, vous êtes bon !

$ sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000"

Open On-Chip Debugger 0.12.0+dev-00002-gcd4873400 (2025-09-21-13:58)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
Info : [rp2040.core0] Hardware thread awareness created
Info : [rp2040.core1] Hardware thread awareness created
adapter speed: 5000 kHz
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Error: unable to find a matching CMSIS-DAP device

Nous nous servirons d’openocd avec les droits d’administrateur, ajoutez-le à la liste des programmes ’root’ utilisables sans mots de passe. Trouvez où est installé openocd :

$ whereis openocd
openocd: /usr/local/bin/openocd

Lancez visudo :

sudo visudo

Et ajoutez la ligne ci-dessous

%dialout        ALL=(ALL) NOPASSWD: /usr/local/bin/openocd

Assurez-vous d’être dans le groupe dialout avec la commande groups :

$ groups
dialout cdrom floppy sudo audio dip video plugdev netdev bluetooth lpadmin scanner

Dans le cas contraire, ajouter votre utilisateur au groupe dialout, un redémarrage peut-être nécessaire pour que la commande prenne effet :

$ sudo adduser $USER dialout

 Install gdb-multiarch

La version dans les dépôts fait très bien l’affaire !

sudo apt install gdb-multiarch

 Test de programmation

Le Pico cible doit être alimenté, la sonde est alimentée par l’USB. Vous pouvez alimenter la cible par l’USB aussi.

Attention mon_programme.elf doit correspondre avec votre fichier. Notez que Picotool nécessite un fichier .uf2 tandis que openocd prend un fichier .elf.

sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "program mon_programme.elf verify reset exit"

 Compilation avec symboles de débogage

Videz votre répertoire ’build’ de vote projet, relancez cmake avec l’option de Debug.

cmake -DCMAKE_BUILD_TYPE=Debug ..
make 

Flasher votre programme sur la cible.

 Premier debogage

Lancer openOCD

sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000"

Vous devrez relancer cette commande à chaque fois que vous débranchez votre sonde (debugprobe).

Exécutez gdb en lui donnant en argument le nom de votre programme. Entrez les commandes suivantes pour vous connecter à la cible à travers OpenOCD.

gdb mon_programme.elf
> target remote localhost:3333
> monitor reset init
> continue

 Configuration de VS Code

Tout d’abord, créons une tâche pour compiler en mode debug. Ajouter dans le fichier task.json la tâche suivante :

        ,
        {
            "type": "shell",
            "command": "cd debug; cmake -DCMAKE_BUILD_TYPE=Debug ../; make Flash",
            "label": "Flash Debug",
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": false
            }
        }

Créez le répertoire debug dans votre projet avant de lancer la tâche.

Dans le dossier .vscode de votre projet, créez le fichier launch.json suivant :

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Pico Debug (Cortex-Debug with external OpenOCD)",
            "cwd": "${workspaceRoot}",
            "executable": "debug/mon_programme.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "external",
            "gdbTarget": "localhost:3333",
            "gdbPath": "gdb-multiarch",
            "device": "RP2040",
            "svdFile": "${env:PICO_SDK_PATH}/src/rp2040/hardware_regs/RP2040.svd",
            "runToEntryPoint": "main",
            // Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
            // Also works fine for flash binaries
            "overrideLaunchCommands": [
                "monitor reset init",
                "load debug/mon_programme.elf"
            ]
        },
    ]
}

Adaptez le chemin de "debug/mon_programme.elf" pour le faire correspondre au vôtre.

Si tout c’est bien passé, vous pouvez vous connecter à votre cible en USB, et la flasher avec le programme compilé en debug. Puis brancher votre sonde, lancer le serveur openOCD :

sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000"

Enfin, dans VS Code, appuyez sur F5 (ou allez dans Run -> Start Debugging) et vous débogguer votre cible !

Commentaires

Il n'y a pas de commentaires

Ajouter un commentaire

Pseudo :
Mail :

Texte :

Copyright "POIVRON" 2011-2023, tous droits réservés
Administration du site