- 2022.7.26
- ボードマネージャーのアップデートに合わせて記事を更新した
- 2021.10.10
- 新規作成
RaspberryPI picoをArduinoで書いて、 デバッガーとしてpicoprobeを使用して、 ブレークポイントを張るようなハードウェアデバッグするまでの手順を解説します
RaspberryPI picoがArduinoで書けるだけじゃなくて、 Visual Studio CodeでGDBデバッグできるって?
これが叶ったら移行も考えちゃう、なんて人、いるんじゃないですか?
なんと、できちゃうんです!
用意する物:
- RaspberryPI pico (picoprobe用)
- picoprobe(ファームウェア)
- Zadig 2.6
- Arduino IDE 1.8.19
- earlephilhower/arduino-pico (RaspberryPI pico用Arduinoボード定義)
Open OCD 0.11.0-rc2+dev-gabbf03b09 (2021-01-30-21:57)GNU Arm Embedded Toolchain 10.3-2021.07- Visual Studio Code 1.61.0
- Cortex-Debug(Visual Studio Codeの機能拡張)
いずれのバージョンも、2021/10/10現在使用したバージョンです。
すべてWindows 10 バージョン21H1で実行しました。
以下、本文に出てくる{username}やバージョンは、適宜自分の環境に置き換えてください。
まず、picoprobeを用意します
必要なことは、下記3点です
- rasoberry pi picoにpicoprobeのファームウェアを書き込む
- windows 10用のドライバをインストール
- picoprobeの結線をする
紹介記事も多いので説明は省略しますが、 Zadigで選択するのはWinUSBです。libusb-win32ではうまくいかなかったので注意です
インストール後、デバイスマネージャーで、COMと、Picoprobeが出来ている必要があります。
誤ったドライバをインストールした場合、 ドライバなし状態になるまで、ドライバのアンストールをするといいかもしれません
次にArduinoのセットアップです
必要なことは、下記2点です
- Arduinoのbuild pathを固定する
- RaspberryPI Pico/RP2040 by Earle F.PhilhowerでPicoprobe用にビルドして、 Picoprobeで書き込む
注意点としては、 2.で書き込む前にRaspberri PI picoに正常に動作するソフトが何か書かれてる状態でないと picoprobe経由で書き込めなかったことと、 書き込みにopenocdが必要なのですが、自動でインストールされるバージョンでは書き込めなかったので、 別途openocdを用意する必要があることです。
詳細手順は下記のとおりです。
Arduino IDEで環境設定を選択します
ボードマネージャーに下記URLを記入します
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
また、preferences.txtの場所をメモしておきます(後で書き換えます)
ボードマネージャーで、RaspberryPI Pico/RP2040 by Earle F.Philhower, IIIをインストールします
参考:検索でpicoと入れると見つけやすい
ここで一度Arduino IDEを終了し、先ほどメモしたpreferences.txtを開きます
preferences.txtArduino IDEのbuild pathの指定を追加します
{username}ほか、パスは自分の環境にあわせての置き換えてください。
好きなところでいいですが、困ったら消すことがあるので、 アクセスしやすいところがいいでしょう
例:build.path=C:\Users\{username}\AppData\Local\Temp\arduino_build
Arduino IDEを起動した状態で書いても、Arduino IDEを閉じた時点で元の設定に上書きされるので注意です。
デバッグするスケッチを用意します。今回は、サンプルとしてBlinkを使います
スケッチを保存しておきます
ボード定義は、RaspberryPI Pico(Picoprobe)を選択します
ちなみに、無印のRaspberryPI Picoを選択すると、USBによる直接書き込み用になります
注)以下の打消し部分の説明は、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
注意点としては、4ファイル必要なことです。
下記記事のやり方がくわしいです。
https://qiita.com/yunkya2/items/4e3d89f08b2237ef551f
取り急ぎ試してみるなら ビルド済みバイナリopenocd-w64-prebuilt-20210130.tar.gzに含まれる4ファイルで動作しました。
ビルドしてマイコンボードに書き込みます。
この時、正常なソフトが何か書き込み済みでないと、うまく書けませんでした。
事前にblinkでも書き込んでおくといいかもしれません。
最後にGDBとVisual Studio Codeをセットアップします
必要なことは、下記3点です
- GNU Arm Embedded ToolChainのインストール(GDBを入れる)
- VSCode機能拡張としてCortex-Debugをインストールする
- launch.jsonとsettings.jsonを書き換える
注意点としては、 Arduinoのボードマネージャーから自動でインストールされるgdbでは正しく動作しなかったこと、 toolchainへのパスが通っていないと動作しなかったことです
書き込みにopenocdが必要なのですが、自動でインストールされるバージョンでは書き込めなかったので、
詳細手順は下記のとおりです。
GNU Arm Embedded ToolChainをインストールします
インストーラーの最後にAdd path to environment variableをチェックするか、手動でパスを通す必要があります。
最後にVisual Studio Codeをセットアップします
必要なことは、下記2点です
- VSCode機能拡張としてCortex-Debugをインストールする
- launch.jsonとsettings.jsonを書き換える
Cortex-Debug(Visual Studio Codeの機能拡張)をインストールします
スケッチを置いたフォルダに、.vscodeというフォルダを作成し、中に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の場所が変わってしまうことがあるので どこか固定のフォルダに移動したほうがいいかもしれませんね
また、検索して出てきた情報を入れまくったので、余計なものも入っているかもしれません。ごめんね
全部できたら、いよいよデバッグです。
好きなところにブレークポイントを作成し、(赤〇部分)
左の実行とデバッグを選択し、実行すると、mutex_initで止まりますから、さらに進めると、、、
設定したブレークポイントで停止します。お疲れさまでした!
[ DIYに戻る ]