前回Windows11上にRaspberry Pi Picoの開発環境をインストール、サンプルプログラムを動作させることができました。次はデバッグです。今までラズパイ4をホストにしていたときはラズパイ4がデバッグI/Fも提供してくれたです。パソコンの場合は2台目のPicoをデバッグI/Fに使うと。ここでまたもやらかし。
※Pico関係投稿一覧は こちら 『Pico三昧』は一覧の末尾付近にひっそりと。
2台目のPicoで1台目(ターゲット)をデバッグ
Picoは「お求めやすい」価格帯かつ小型のボードなので、オンボードのデバッグインタフェースなどは搭載してません。それに親機にラズパイを使えばラズパイがデバッグI/Fを提供してくれます。しかし、今回Windowsパソコン上にC/C++SDKの開発環境を載せたので、Windowsパソコン上でデバッグをするためにはデバッグI/Fが必要です。そこで「お求めやすい」ということでPicoをもう1台追加して、「PicoProbe」に仕立て上げました。ラズパイ財団の正式製品にRaspberry Pi Debug ProbeというデバッグI/Fがあるみたいですが、それとほぼほぼ同等機能のハズ。
Getting Startedにはいろいろ書いてあるけれど。。。
以下の「公式」からダウンロードできるGetting Startedの古いバージョンにも、もう1台のPicoをデバッグI/Fに仕立て上げる方法が書かれてます。
初期のころは書いてある通りの手順、OpenOCDをソースからビルドするとか、必要だったみたいです。しかし、前回のようにWindows用のインストーラを使ってバイナリインストールした場合、そのまま使えるOpenOCDも含まれております。ぐちゅぐちゅ書いてあるソースからのインストール手順など不要。
そして2代目のPicoに書き込むべき、デバッグI/F化のためのファームウエアもバイナリ版が上位ページの下の方の目立たないところにおいてあります。ファームウエアのビルドも不要。
Debugging using another Raspberry Pi Picoというタイトルの下のDownload the UF2 fileです。
つまりWindows用の最新インストーラを使ってインストールしてあれば、PicoProbe化ファームウエアのUF2ファイルをダウンロードしてPicoに書き込むだけで、ほぼほぼデバッグI/Fの準備完了。
しかし、やってみたらば接続できませなんだ。ホントの理由は2台のPico間の配線間違いです。よく見て配線したつもりなのにSWDの2本が入れ替わってました。電源いれても全部で6本しかない配線を間違うとは、トホホ。
そういうことすると、openocd で接続時にこんな感じのエラーがでるのです。
“Failed to connect multidrop rp2040.dap0″ だと。なんじゃらほい。
最初にデバイスドライバを疑った
能天気なことにたった6本の配線を疑うようなことは思いつきません。俺のやることは完璧だと。まさか。最初はPC上のデバイスドライバを疑いました。デバイスマネージャを開けばこんな感じ。
COM7はPicoProbeのシリアルポートです。ターゲットのシリアルと接続して通信に使えるもの。そしてPicoprobe CMSIS-DAP v2こそがデバッグI/F本体です。
上記正常動作していたのでこれを疑うのは有らぬ疑いなのですが、やってしまいました。昔の資料にZadig使ってドライバを置き換えるようなことが書いてあったので以下やってしまいました。
多分、余計なお世話だったんじゃないかと。でもま、この設定のまま現在動いているので元に戻してはないですが。当然、こんな処置しても動きませぬ。配線の取り違えなんだから。
配線を直したら当然コネクトできた
当然ですが、配線間違いに気づいて修正したらOpenOCDがすんなり動きました。こんな感じ。
OpenOCDがポート 3333 でリッスンしてますぞ。
gdb-multiarch はMSYS2のものを使用
OpenOCDが正常に使えることを確認しようとして、gdb-multiarchを使おうとして気づいたのです。Getting Startedは、ホストがラズパイが主でLinuxなので、gdb-multiarchをインストールしろとか、ことさらに書いてないっぽいです。VSCodeから操作するときにgdb要らないのかな~。ま、当方はMSYS2を使っておりましてgdb-multiarchはインストール済デス。そこでMSYS2のやつを使ってみました。
hello-world(serial)をデバッグオプションつけてビルド
hello-world(serial)をデバッグオプションつけて再ビルドしようとしたのです。まずはオプション指定。
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
しかしExamples全体をデバッグビルドしてしまうことにあいなりました。
$ cmake --build build
別シリーズ記事で、いつも –build build としているので手が滑った?
デバッグ開始
まあともかくデバッグ情報つきのオブジェクトファイル(.elfフォーマット)ができました。それを
gdb-multiarch -> OpenOCD -> PicoProbe -> ターゲットのPico
なんだか “Windows”なって知らね~的なwarning出てますが、見ないふりをして先に進めます。まずはOpenOCDに接続
target remote localhost:3333
接続後、ELFファイルをターゲットにloadし、RESETかけます。
この後、continueすればプログラムがターゲット上で走ります。さすればCOM7ポートに接続した仮想シリアル端末には、以下のように出力が。
たったこんだけに、随分トラブったな。配線間違えに気づかんとはオオボケ。