RP2040のArduino開発でデバッガーを使う【Mac編】【Arduino for VSCode使用】

Raspberry Pi/電子工作
スポンサーリンク

RP2040ボード(Raspberry Pi Picoなど)をRaspberry Pi Debug Probe(デバッグプローブ)を使ってVSCodeのArduino拡張機能でCMSIS-DAPでデバッグするためのセットアップ手順と簡単な使い方を紹介したいと思います。

本記事はMacのArduino for Visual Studio Codeを対象にしたデバッグ方法を記載しています。

Arduino for Visual Studio Codeの画面例

MacのArduino IDEでのデバッグ方法は次の記事を参考にしてください

Windowsの場合は次の記事を参考にしてください。

参考URL:

Just a moment...

Raspberry Pi Debug Probe(以降、デバッガー)とRaspberry Pi Pico(RP2040ボード)

スポンサーリンク

デバッグ環境の準備

openocdのインストール Mac編

本記事ではMacのRP2040用openocdはソースからビルドしてインストールすることとします。

openocdのビルド&インストールはターミナルから実行します。
XcodeとHomebrewがインストール済みである前提とします。

Xcodeが未インストールの場合はAppStoreからインストールしてください。

Homebrewのインストールは以下の記事をご参照ください。

ユーザディレクトリ配下にpicoディレクトリがある前提ですすめます。
存在しない場合は以下のコマンドで作成してください。

cd ~/
mkdir pico

依存関係のインストール

brew install libtool automake libusb wget pkg-config gcc texinfo

ビルドコマンド

x86_64とApple Silicon Macでtexinfoのパスが異なります。
両方のコマンドを掲載しますので、ご使用の環境のコマンドを実行してください。

x86_64の場合

cd ~/pico
git clone https://github.com/raspberrypi/openocd.git --branch rp2040-v0.12.0 --depth=1
cd openocd
export PATH="/usr/local/opt/texinfo/bin:$PATH"
./bootstrap
./configure --disable-werror
make -j4

Apple Silicon(M1, M2) Macの場合

cd ~/pico
git clone https://github.com/raspberrypi/openocd.git --branch rp2040-v0.12.0 --depth=1
cd openocd
export PATH="/opt/homebrew/opt/texinfo/bin:$PATH"
./bootstrap
./configure --disable-werror
make -j4

openocdのインストール

make install

openocd/usr/local/bin配下にインストールされます。

VSCode拡張機能インストール

VSCodeに拡張機能Arduino for Visual Studio CodeとCortex-Debugをインストールします。

Arduino for Visual Studio Codeのインストールについては次の記事を参照してください。

Cortex-Debug拡張機能をインストールします。

Raspberry Pi Pico/RP2040ボード(Arduino-Pico)のopenocdの準備

Raspberry Pi Pico/RP2040ボード(Arduino-Pico)がボードマネージャーからインストールしてある前提で進めます。

Raspberry Pi Pico/RP2040ボード(Arduino-Pico)のtoolsディレクトリにあるopenocdを動作確認したところ使えなかっため/usr/local/bin/openocdが使用されるように変更していきます。

ターミナルからコマンドで設定します。

Raspberry Pi Pico/RP2040ボード(Arduino-Pico)のopenocdのディレクトリに移動

cd ~/Library/Arduino15/packages/rp2040/tools/pqt-openocd/1.5.0-b-c7bab52/bin/

pqt-openocdのバージョン(1.5.0-b-c7bab52)が異なる場合はバージョンを読み替えてください。

元のopenocdのバックアップをとります。

mv openocd openocd_org

※ここではopenocd_orgというファイル名でバックアップしています。

/usr/local/bin/openocdのシンボリックリンクを貼ります。

ln -s /usr/local/bin/openocd openocd

配線について

デバッガー(Dコネクタ CMSIS-DAP)とRP2040ボードはSWD(Serial Wire Debug)で接続します。

Raspberry Pi Picoの例

Raspberry Pi Picoをデバッグ対象とする場合の配線

コネクタ – メスソケットで配線しています

Raspberry Pi Pico Hの例

Raspberry Pi Pico HはSWDがコネクタなので接続しやすくデバッグに向いていますね。

コネクタ – コネクタケーブルで接続

Raspberry Pi Pico WHの例

Raspberry Pi Pico H同様SWDがコネクタなのでコネクタ-コネクタケーブルで接続します。

Raspberry Pi Pico Wの例

SWDにピンをつけずにスルーホール用テストワイヤー(TP-200)で配線してみました。
SWDにピンをつけると邪魔くさくなることもあるかと思いますので、代替案として参考にしてみてください。

TP-200(秋月電子)

テストワイヤーにオレンジがなかったので代わりに白ワイヤーを使っています。

デバッグの設定について

Arduinoファイル出力先の設定

スケッチフォルダ配下/.vscode/arduino.jsonに次の設定を追加してください。

    "output": "./build"

launch.json (デバッグ用設定ファイル)

launch.jsonはデバッグ用の設定ファイルです。
スケッチフォルダ配下/.vscodeに「launch.json」というファイルを作成します。

以下はlanch.jsonのテンプレートになります。

{
  // IntelliSense を使用して利用可能な属性を学べます。
  // 既存の属性の説明をホバーして表示します。
  // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Arduino CMSIS-DAP",
      "cwd": "${workspaceRoot}",
      "executable": "./build/スケッチ名.elf",
      "request": "launch",
      "type": "cortex-debug",
      "serverpath": "/usr/local/bin/openocd",
      "servertype": "openocd",
      "showDevDebugOutput": "none",
      "configFiles": [
        "interface/cmsis-dap.cfg",
        "target/rp2040.cfg"
      ],
      "openOCDLaunchCommands": [
        "transport select swd",
        "adapter speed 5000"
      ],
    }
  ]
}

executableのスケッチ名は実際のスケッチ名(例: Blink.ino)に置き換えてください。

スケッチ書き込みについて

デバッグ対象のRP2040ボード(例: Raspberry Pi Pico)にはデバッガーを通じてスケッチを書き込みます。

Upload Methodは「Picoprobe (CMSIS-DAP)」を選択します。
ポートはデバッガーの接続ポート(/dev/tty.*)を選択します。

書き込み先のRP2040ボードも給電のためUSBに接続しておきます。
※USBでの通信はしません。

書き込みに成功すると「出力」タブに画像のような内容が表示されます。

デバッグについて

デバッグ用コードの埋め込み

こちらの環境にてデバッガーの処理が先走ってデバッグが正常に開始しない現象が見受けられました。
この現象が発生した場合はsetup関数の直後にdelayを挟むよう次のようなデバッグコードを入れるとよいかと思います。

#define __DEBUG__

void setup() {
#ifdef __DEBUG__
  delay(1000);
#endif

この例ではdelayの時間(setup開始までのインターバル)を1000msとしています。
デバッグが正常に開始しない場合は長めに設定してみてください。

デバッグコードを無効にするには#define __DEBUG__をコメントアウトします。

// #define __DEBUG__

void setup() {
#ifdef __DEBUG__
  delay(1000);
#endif

デバッグの開始

ウインドウ左端の「デバッグ」アイコンをクリックし「デバッグの開始」アイコンをクリックします。(画像参照)

デバッガーの操作

行番号の左をクリックするとブレークポイントを設定できます。

デバッガーは画像赤枠のツールバーで操作できます。
アイコンは左から次のような機能があります。

デバイスリセットデバイスをリセットする
継続次のブレークポイントまでスケッチを実行する
ブレークポイントが設定されていない場合は停止/再開
ステップオーバー選択された命令だけ実行しプログラムを停止する
ステップイン命令が関数を呼び出している場合、関数内部の命令をワンステップごとに実行する
ステップアウト呼び出し元の命令まで実行する
再起動リセットしてスケッチの最初から実行する
停止デバッグを停止する

デバッグの動きが悪い場合

デバッグが開始されないなどデバッグがうまく動かない場合、デバッガーとデバッグ対象のRP2040ボードの電源を再投入してデバッグを開始してみてください。

関連記事

当ブログのマイコン記事です。ぜひご覧ください。

コメント

タイトルとURLをコピーしました