トホホな疑問(37) ラズパイPico、ラズパイ4からSWDデバッグ、信号線が長すぎた!

Joseph Halfmoon

ラズパイPicoの母艦にしているラズパイ4にPCからリモート接続したVS CodeでPicoのビルドができなかった問題は前回解決。しかし、こんどはVS Code上でデバッガが立ち上がりません。またソフトの設定か? 否。結局、ラズパイ4とPicoの間のSWDケーブルが長すぎただけみたいです。トホホ。

※「トホホな疑問」投稿順Indexはこちら

遅ればせながらラズパイPicoのC/C++言語用の開発環境をラズパイ4を母艦にして整備中です。コマンドラインベースではビルド出来、デバッガも「動いた」つもりでおりました。その後、Windows上のVS Codeからラズパイ4にリモート接続し、ビルドを試みたところ問題発覚、エラーが出ました。なんとか前回対処をしてリモートでビルドもできるところまで来ました。しかし続いてVS Codeからデバッガを起動したらエラー。OpenOCDもGDBも立ち上がっているみたいなのですが、途中で止まってしまいました。今回はその問題解決です。

コマンドラインベースに立ち戻る

作業再開にあたり、「正常に動作」していたはずのコマンドラインベースでの操作に立ち戻って動作確認をばいたしましたです。第1のシェルでOpenOCDを起動しておいて、第2のシェルでgdb-multiarchを立ち上げ、デバッグ用のオブジェクトをloadしてみます。ところが、以下のようにエラーがでます。1回目のloadは全然だめ、2回目は少し先まで動いている気がしますが、結局ダメ。

(gdb) load
Error erasing flash with vFlashErase packet
(gdb) load
Loading section .boot2, size 0x100 lma 0x10000000
Loading section .text, size 0x69b8 lma 0x10000100
Loading section .rodata, size 0x1430 lma 0x10006ab8
Loading section .binary_info, size 0x20 lma 0x10007ee8
Loading section .data, size 0x318 lma 0x10007f08
Error finishing flash operation

え~、先週は動いていたじゃない?あれは気の迷いだった? 毎度毎度関心するのは、ラズパイの中の人々は、私が落ち込むような落とし穴をいつもお見通しであることです。というか、想定されている落とし穴に必ず落ち込む私がおバカ。ラズパイPicoの基本文書といっていいでしょう

Getting started with Raspberry Pi Pico.pdf

の 5.4 節には IMPORTANT なる赤枠の囲いがあります。1か所引用させていただきましょう。

there is likely poor signal integrity between the Raspberry Pi and the Raspberry Pi Pico.

そういうときは、Raspberry Pi 4 model B+とRaspberry Pi Picoの間の信号の品質に問題あり、とのご指摘。疑いは3本しかない SWDケーブルにかかるのです。前回、60cmのケーブル作ってみたけれど、まー動いているみたいだから長くてもOK~みたいなことを書いてしまいました。でも実際には「たまたま動いたように見えた」だけの僥倖、目の錯覚、思い込み。本当は動いていたとは言えない状態だったのでしょう。

15cm ケーブル

確かめるために、60cmの長さを4分の1の15cmのジャンパ線に変更してデバッガを再起動してみました。

(gdb) load
Loading section .boot2, size 0x100 lma 0x10000000
Loading section .text, size 0x69b8 lma 0x10000100
Loading section .rodata, size 0x1430 lma 0x10006ab8
Loading section .binary_info, size 0x20 lma 0x10007ee8
Loading section .data, size 0x318 lma 0x10007f08
Start address 0x100001e8, load size 33312
Transfer rate: 39 KB/sec, 5552 bytes/write.

なんだ書き込めているじゃん。正常動作しています。やっぱりケーブルが長すぎたんだ。

速度を落として60cmケーブル使えないか?

ただ折角セロテープで信号線のラベルまで貼り付けたケーブルが惜しいです。60cmのケーブル使えるといろいろ手元で作業できて便利なのだけれども。。。先のIMPORTANTの中には代替案として、通信速度を落とす、ということもかかれています。adapter_khzという値が以下のファイル内で定義されているので変更すれば低速化できる、とあります。

pico/openocd/tcl/interface/raspberrypi-swd.cfg

でも、調べたところ、adapter_khz などという項目が無いです。しかし似た項目で、以下がありました。

adapter speed 1000

こいつを1000から100に変更して60cmケーブル試したのですけれど残念ながらダメでした。やっぱり短いケーブルにするしかないみたい。アイキャッチ画像ににトグロを巻いている旧ケーブルの間に短い新ケーブルをあしらった画像を掲げました。短い方に交換。

ようやくリモート接続のVS Code上でデバッガが動いた

新ケーブルでラズパイPicoとラズパイ4を接続してみたところがこちら。短いのでデバッグするときは「身を寄せ合う」感じでやらないとなりません。Picoの周りにいろいろデバイスを接続するときは密になりそうでヤバイ。

RPi4_RPiPico_SWDconnectedさて、肝心のリモート接続のVS Code上でデバッガが動くのでしょうか。動かしたところが下です。

ちゃんとブレークポイントでブレークしてます。デバッガうごいちゃった。何のことはない、動かなかった原因はケーブルの長さ。トホホ。。。

トホホな疑問(36) cmake.launchTargetPath not found に戻る

トホホな疑問(38) PicoDAC、カラーコード、よく確かめたつもりだったんだけど へ進む