Sousu's ARENA

[ DIYに戻る ]
RaspberryPI picoをArduinoで書いてpicoprobeでデバッグするまで
2022.7.26
ボードマネージャーのアップデートに合わせて記事を更新した
2021.10.10
新規作成
Abstract(概要)

RaspberryPI picoをArduinoで書いて、 デバッガーとしてpicoprobeを使用して、 ブレークポイントを張るようなハードウェアデバッグするまでの手順を解説します

Introduction(まえがき・序論)

RaspberryPI picoがArduinoで書けるだけじゃなくて、 Visual Studio CodeでGDBデバッグできるって?

これが叶ったら移行も考えちゃう、なんて人、いるんじゃないですか?

なんと、できちゃうんです!

pico probe

用意する物:

いずれのバージョンも、2021/10/10現在使用したバージョンです。

すべてWindows 10 バージョン21H1で実行しました。

以下、本文に出てくる{username}やバージョンは、適宜自分の環境に置き換えてください。

picoprobeの準備

まず、picoprobeを用意します

必要なことは、下記3点です

  1. rasoberry pi picoにpicoprobeのファームウェアを書き込む
  2. windows 10用のドライバをインストール
  3. picoprobeの結線をする

紹介記事も多いので説明は省略しますが、 Zadigで選択するのはWinUSBです。libusb-win32ではうまくいかなかったので注意です

Zadigで選択するのはWinUSBです

インストール後、デバイスマネージャーで、COMと、Picoprobeが出来ている必要があります。

Arduino IDEで環境設定を選択する

誤ったドライバをインストールした場合、 ドライバなし状態になるまで、ドライバのアンストールをするといいかもしれません

arduinoの準備

次にArduinoのセットアップです

必要なことは、下記2点です

  1. Arduinoのbuild pathを固定する
  2. RaspberryPI Pico/RP2040 by Earle F.PhilhowerでPicoprobe用にビルドして、 Picoprobeで書き込む

注意点としては、 2.で書き込む前にRaspberri PI picoに正常に動作するソフトが何か書かれてる状態でないと picoprobe経由で書き込めなかったことと、 書き込みにopenocdが必要なのですが、自動でインストールされるバージョンでは書き込めなかったので、 別途openocdを用意する必要があることです。


詳細手順は下記のとおりです。

Arduino IDEで環境設定を選択します

Arduino IDEで環境設定を選択する

ボードマネージャーに下記URLを記入します

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

また、preferences.txtの場所をメモしておきます(後で書き換えます)

ボードマネージャーの設定および、preferrencesの設定

ボードマネージャーで、RaspberryPI Pico/RP2040 by Earle F.Philhower, IIIをインストールします

参考:検索でpicoと入れると見つけやすい

ボードマネージャーで、RaspberryPI Pico/RP2040 byEarle F.Philhower, IIIをインストールする

ここで一度Arduino IDEを終了し、先ほどメモしたpreferences.txtを開きます

preferences.txtArduino IDEのbuild pathの指定を追加します

{username}ほか、パスは自分の環境にあわせての置き換えてください。

好きなところでいいですが、困ったら消すことがあるので、 アクセスしやすいところがいいでしょう

例:build.path=C:\Users\{username}\AppData\Local\Temp\arduino_build

Arduino IDEを起動した状態で書いても、Arduino IDEを閉じた時点で元の設定に上書きされるので注意です。

Arduino IDEのbuild pathを指定する

デバッグするスケッチを用意します。今回は、サンプルとしてBlinkを使います

サンプルとしてBlinkを開く

スケッチを保存しておきます

Blinkを保存する

ボード定義は、RaspberryPI Pico(Picoprobe)を選択します

ちなみに、無印のRaspberryPI Picoを選択すると、USBによる直接書き込み用になります

ボード定義は、RaspberryPI Pico(Picoprobe)を指定します 注)以下の打消し部分の説明は、OPENOCDの入れ替えに関するものです。ただし、旧VerではOPENOCDの入れ替えが必要でしたが、ボード定義(上記RP2040のVER)2.3.3現在、そのままでビルドできるようです。不要ですが、覚書のために残しておきます

このままビルドしても、書き込みでエラーになるので、OPENOCDを入れ替えます

4ファイルすべて上書きする必要があります

場所:%UserProfile%\AppData\Local\Arduino15\packages\rp2040\tools\pqt-openocd\1.3.1-a-7855b0c\bin

OpenOCDの上書き

注意点としては、4ファイル必要なことです。

下記記事のやり方がくわしいです。

https://qiita.com/yunkya2/items/4e3d89f08b2237ef551f

取り急ぎ試してみるなら ビルド済みバイナリopenocd-w64-prebuilt-20210130.tar.gzに含まれる4ファイルで動作しました。

ビルドしてマイコンボードに書き込みます。

ビルドとpicoprobeによる書き込み

この時、正常なソフトが何か書き込み済みでないと、うまく書けませんでした。

事前にblinkでも書き込んでおくといいかもしれません。

GDBとVisual Studio Codeの準備
注)以下、GNU Arm Embedded ToolChainのインストールを含んだ説明でしたが、RP2040のボードマネージャーがアップデートされたことで不要になっています。覚書のために残しておきます。

最後にGDBとVisual Studio Codeをセットアップします

必要なことは、下記3点です

  1. GNU Arm Embedded ToolChainのインストール(GDBを入れる)
  2. VSCode機能拡張としてCortex-Debugをインストールする
  3. launch.jsonとsettings.jsonを書き換える

注意点としては、 Arduinoのボードマネージャーから自動でインストールされるgdbでは正しく動作しなかったこと、 toolchainへのパスが通っていないと動作しなかったことです

書き込みにopenocdが必要なのですが、自動でインストールされるバージョンでは書き込めなかったので、


詳細手順は下記のとおりです。

GNU Arm Embedded ToolChainをインストールします

インストーラーの最後にAdd path to environment variableをチェックするか、手動でパスを通す必要があります。

GNU Arm Embedded ToolChainをインストール

最後にVisual Studio Codeをセットアップします

必要なことは、下記2点です

  1. VSCode機能拡張としてCortex-Debugをインストールする
  2. launch.jsonとsettings.jsonを書き換える

Cortex-Debug(Visual Studio Codeの機能拡張)をインストールします

Cortex-Debug(Visual Studio Codeの機能拡張)をインストール

スケッチを置いたフォルダに、.vscodeというフォルダを作成し、中にlaunch.jsonおよびsettings.jsonを作成します

launch.jsonおよびsettings.jsonを作成します

以下、書き換え例です。プロジェクト名と{username}とopenocdのパスgdbPathのパスやsvdFileのパスは、 自分の環境にあわせての置き換えてください。

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Pico Debug",
            "cwd": "${workspaceRoot}",
            "executable": "C:/Users/{username}/AppData/Local/Temp/arduino_build/Blink.ino.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            // This may need to be arm-none-eabi-gdb depending on your system
            "gdbPath": "C:/Users/{username}/AppData/Local/Arduino15/packages/rp2040/tools/pqt-gcc/1.4.0-c-0196c06/bin/arm-none-eabi-gdb",
            "device": "RP2040",
            "configFiles": [
                "interface/picoprobe.cfg",
                "target/rp2040.cfg"
            ],
            "searchDir": [
                "C:/Users/{username}/AppData/Local/Arduino15/packages/rp2040/tools/pqt-openocd/1.4.0-c-0196c06/share/openocd/scripts"
            ],
            "svdFile": "C:/Users/{username}/AppData/Local/Arduino15/packages/rp2040/hardware/rp2040/2.3.3/pico-sdk/src/rp2040/hardware_regs/rp2040.svd",
            "runToEntryPoint": "main",
            // Work around for stopping at main on restart
            "postRestartCommands": [
                "break main",
                "continue"
            ]
        }
    ]
}

settings.json

{
    "cortex-debug.openocdPath": "C:/Users/{username}/AppData/Local/Arduino15/packages/rp2040/tools/pqt-openocd/1.4.0-c-0196c06/bin/openocd.exe"
}

とりあえずインストールされているフォルダを指定していますが Arduinoのボード定義を更新するとopenocdの場所が変わってしまうことがあるので どこか固定のフォルダに移動したほうがいいかもしれませんね

また、検索して出てきた情報を入れまくったので、余計なものも入っているかもしれません。ごめんね

DEBUGの準備

全部できたら、いよいよデバッグです。

好きなところにブレークポイントを作成し、(赤〇部分)

breakポイント作成

左の実行とデバッグを選択し、実行すると、mutex_initで止まりますから、さらに進めると、、、

launch.jsonおよびsettings.jsonを作成します

設定したブレークポイントで停止します。お疲れさまでした!

breakします
[ DIYに戻る ]
inserted by FC2 system