://pipico.pl
WSL i debugowanie z użyciem sondy picoprobe
WSL i debugowanie z użyciem sondy picoprobe
2023-04-11

Debugowanie programu dla Raspberry Pi Pico jest dość skomplikowane. Należy użyć programu OpenOCD, który używa sondy sprzętowej w postaci drugiego Pi Pico podpiętego do debugownego Pi Pico. Aby Pi Pico stało się sondą sprzętową należy uruchomić na nim picoprobe. Program OpenOCD pełni funkcję servera gdb i komunikuje się z sondą (picoprobe) przez interface USB. Do niedawna, użycie OpenOCD w systemie Windows z sondą podłączoną przez usb, wymagało zainstalowania specjalnych sterowników libusb (np. zadig). Z tymi sterownikami bywały różne problemy - szczególnie, gdy konfiguruje się je wielokrotnie pracując z różnymi układami. Na szczęście ostatnie zmiany w picoproble związane z implementacją CMSIS-DAP eliminują potrzebę używania dodatkowego sterownika dzięki zastosowaniu USB-HID.

Schemat połączeń pochodzi z podręcznika Getting started with Raspberry Pi Pico pico-probe-connection

W przypadku zastosowania podsystemu WSL w procesie programowania Pi Pico konfiguracja środowiska składa się z kilku kroków.

Przygotowanie picoprobe przebiega w sposób standardowy. Należy skompilować ze źródeł w repozytorium lub pobrać wydaną wersję. (Uzupełnienie: jak skompilować wersję ze źródeł).

Przygotowanie OpenOCD jest trudniejsze. Skompilowanie właściwej wersji wymaga odpowiedniego środowiska np. MSYS2. Cały proces opisany jest w dodatku A podręcznika Getting started with Raspberry Pi Pico. Można także skorzystać z wersji już skompilowanej - są takowe dostępne w internecie (np. VisualGDB).

OpenOCD uruchamia się bezpośrednio w systemie Windows (nie w WSL). Należy skonfigurować nasłuchiwanie na dowolnym adresie IP (nie tylko localhost) przez użycie komendy bindto. Przykładowe wywołanie (dla MINGW64):

src/openocd -f interface/cmsis-dap.cfg -c "adapter speed 5000" -f target/rp2040.cfg -s tcl -c "bindto 0.0.0.0"

Po połączeniu Pi Pico do układu debugowanego i portu usb oraz uruchomieniu OpenOCD można przystąpić do uruchomienia środowiska wewnątrz WSL. Jeśli jeszcze nie został zainstalowany to należy zainstalować w Visual Studio Code dodatek Cortex-Debug.

Moja konfiguracja w .vscode/launch.json jest następująca:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "cwd": "${workspaceRoot}/build",
            "executable": "${command:cmake.launchTargetPath}",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "external",
            "gdbPath": "/usr/bin/gdb-multiarch",
            "gdbTarget": "192.168.1.100:3333",
            "showDevDebugOutput": "raw"
        }
    ]
}

Parametr gdbTarget powinien zawierać adres IP maszyny, na której uruchomiono OpenOCD.

Należy zwrócić także uwagę, czy w debugowanym projekcie w CMakeLists.txt jest włączone pico_enable_stdio_uart (przez ustawienie na 1).