📌

Windows用 RaspberryPi Pico デバッグ環境(C言語)の作り方(PicoProbe編)

2022/07/27に公開

これは?

Windows10でOpenOCDとPicoProbeを使用してRaspberryPi Picoのデバッグ環境を作るメモです。

C言語用コンパイル環境は作成済みとして、VisualStudioCodeからLチカソースコードをデバッグできることを目指すものです。

●インストール時のフォルダ構成

この説明では、RaspberryPi Pico(とか、マイコン用)に使用するツール類は、Cドライブ直下に DevTool フォルダを作成してインストールします。(C:\Program Files にはインストールしません)

■ソフトのインストール

基本的には公式のpdf「Getting started with Raspberry Pi Pico: C/C++ development」の手順に従います。
pdfは下記のURLを開いて、真ん中くらいまでスクロールしたあたりにある Documents の Getting started with Raspberry Pi Pico: C/C++ development をクリックします。
https://www.raspberrypi.com/products/raspberry-pi-pico/

pdfの Chapter 7. Using Visual Studio Code の手順を参照してください。
pdfの説明と同様のWindows版とPicoProbe用のドライバーをインストールします。

  • VisualStudioCode
    • CMake Tool
    • cpp tool
    • Cortex-Debug
  • OpenOCD
  • PicoProbe用のドライバー

●VisualStudioCodeをインストール

VisualStudioCodeをダウンロード、インストールします。
(VSCodeUserSetup-x64-1.69.2.exe を使いました。)

●Extensionをインストール

VisualStudioCodeの左のExtensionから検索してインストールします。

●C/C++ Extension Packをインストール

これをインストールすることで、他必要な物(CMake等)がインストールされます。

●Cortex-Debugをインストール

インストール後、ファイヤーウォールの警告画面が出る場合がありますので許可します。

●OpenOCDをインストール

@pokibonさんの記事を参考に正常動作するOpenOCDをダウンロードします。

■Raspberry Pi Picoをデバッグツールにする

PicoProbeはRaspberryPi Picoをデバッグ機材として使用するプログラムです。

●PicoProbeをダウンロード

公式のホームページを下の方までスクロールし、Software UtilitiesのDebugging using another Raspberry Pi Picoにある「Download the UF2 file」からUF2ファイルをダウンロードして、機材として使用する側のRaspberryPi Pico に書き込んでおきます。

一度もPCにドライバーをインストールしてなければ、不明なデバイスとして扱われます。

●ドライバーのインストール

PicoProbeを書き込んだRaspberryPi PicoをPCに接続して、Windowsに認識されるようにドライバーの設定をzadigというソフトから行います。
(zadig-2.7.exe を使いました。)

libusb-wiin32(v1.2.6.0)を選択後、Install Driver ボタンを押してください。
デバイスマネージャで認識されればインストール完了です。

■デバッグ対象の環境構築

VisualStudioCodeの設定とソースコードの準備をします。
ソースコードはC:\work-picoにpico-testDebugフォルダを作って入れます。

●ソースコードを準備

RaspberryPi Pico用のpico-examplesにあるLチカ(blink)のソースコードをコピーします。
pico_sdk_import.cmake は、pico-examplesフォルダにあるファイルです。

●CMakeLists.txtの作成

pico-examplesにあるblinkの内容そのままではフォルダ構成やコンパイル対象の違い等により動かないため、修正したものを保存します。

CMakeLists.txt
cmake_minimum_required(VERSION 3.13)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

include(pico_sdk_import.cmake)

#set (CMAKE_BUILD_TYPE "" CACHE INTERNAL "" FORCE)
set (CMAKE_BUILD_TYPE "Debug")

set(ProjectName "blink")
project(${ProjectName} C CXX ASM)

# initialize the Raspberry Pi Pico SDK
pico_sdk_init()

add_executable(${ProjectName}
    blink.c
)

target_link_libraries(${ProjectName} pico_stdlib)
include_directories(${ProjectName} PRIVATE ${CMAKE_CURRENT_LIST_DIR})

add_compile_options(-Wall -g3 -O0)

●ビルド用バッチファイルの作成

build.bat
call ..\setPath.bat
cd build
del Makefile
cmake -G "MSYS Makefiles" ..
make

●OpenOCD起動用のバッチファイルを準備

ocd.bat
C:/DevTool/arm/ocd/openocd -c "gdb_port 3333" -s C:/DevTool/arm/ocd/tcl -f interface/picoprobe.cfg -f target/rp2040.cfg

■VisualStudioCodeの設定

launch.json、c_cpp_properties.json、tasks.jsonは、pico-testDebugフォルダに.vscodeフォルダを作って保存します。

●launch.jsonの作成

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "cortex-debug",
            "request": "launch",
            "name": "Debug (OpenOCD)",
            "servertype": "external",
            "showDevDebugOutput": true,
            "preLaunchTask": "Build project",
            "cwd": "${workspaceRoot}",
            //"runToMain": true,
            "executable": "${workspaceRoot}/build/blink.elf",
            "armToolchainPath": "c:/DevTool/arm/gnu/bin/",
            "gdbTarget": "localhost:3333",
            "device":"RP2040",
            "postRestartCommands": [
                "break main",
                "continue"
            ],
        }
    ]
}

●intelliSenseの設定

c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Win32",
            "defines": [],
            "includePath": [
                "c:/DevTool/arm/gnu/lib/gcc/arm-none-eabi/**",
                "${workspaceRoot}/**",
                "${workspaceRoot}/../pico-sdk/src/**",
                "${workspaceRoot}/../pico-sdk/lib/**"
            ]
        }
    ],
    "version": 4
}

●Tasksの設定

ソースコードのコンパイルとOpenOCDの起動を作ります。

tasks.json
{
    "tasks": [
        {
            "label": "Build project",
            "type": "shell",
            "command": "build",
            "args": [
            ],
            "options": {
                "cwd": "${workspaceRoot}"
            }
        },
    ],
    "version": "2.0.0"
}

■配線

PicoProbeとRaspberryPi Picoを接続します。

■動作確認

VisualStudioCodeを起動して、コンパイル対象ファイルがあるC:\work-pico\pico-testDebugを選択します。

●VisualStudioCodeのshell変更

VisualStudioCodeはPowerShellを起動する設定ですが、作成したバッチファイルはコマンドプロンプトで動作する形式のため、設定を変更します。


●ブレークポイントの設定

デバッグ時に、一時的に動作を停止する場所を設定します。
図のように、停止する行に●を付けます。

●OpenOCDの起動

TerminalからNew Terminalを選択してocd.batを起動します。
ocd.batの設定や、PicoProbeとRaspberryPi Picoの接続に問題がなければ、gdbの接続待ちになります。


●デバッグ開始

VisualStudioCodeの左からRun and Debugを選択して、Debug(OpenOCD)になっていることを確認し、実行ボタンを押します。


しばらくすると、コンパイルが終わり、ブレークポイントを設定した場所で停止します。

キーボードのファンクション10(F10)キーを押すごとに、1行ずつ実行します。gpio_put関数を実行したときに、LEDが点灯 / 消灯することが確認できます。

Discussion