ESP32でデバッグ
ESP32でデバッグ
Lチカくらいならデバッガなしでもいけますが、ちょっとプログラムが大きくなると途端に苦しくなってくるのでデバッグできるものならやりたい。
という訳でVSCodeからESP32のデバッグをやってみました。
ESP32はJTAG対応になっています。JTAGはハードウェアをデバッグ/テストするための共通規格です。
なので安価にデバッグ環境が構築できます。
vscode-esp-idf-extensionのTutorialsの3つ目に「Debugging」のリンクがあるので読みながら進めます。
ハードウェアの用意
ESP32だけではデバッグできません。別途デバッグ用のハードウェアが必要です。
とはいえそんなに高価なハードウェアじゃありません。
必要なものは秋月電商さんで全部揃いました。
これだけです。これでデバッグできるようになるんですから買いです。
なぜかUSBケーブルが今一馴染みのないminiBなので注意です。
ちなみにFT2232Dで何故にデバッグできるのかですが、元々このチップがJTAG対応だからのようです。
ESP-IDFはデバッグにOpenOCD (Open On-Chip Debugger) というオープンソースを使っており、OpenOCDで推奨されているチップまたはボードが Debug Adapter Hardwareに列挙されています。
この中の USB FT2232 Based の所に入ってました。
FT2232Dのドライバ更新
秋月のFT2232DをUSBケーブルでPCに繋ぐと2つのシリアルポートが追加されます。
この内片方のドライバを更新する必要があります。詳細はここです。
- FT2232DをPCに接続しておきます。
- Zadigをダウンロード/インストール。
- Zadigを起動して、メニューの Options - List All Devices を選択します。
- Dual RS232 (Interface 0) を選択します。
Interface 1 もありますが、そちらは変更しないでください。
Driver が FTDIBUS (vX.XXX.X) のようになっている場合は更新先で WinUSB (vX.X.XXXX.XXXXX) を選択します。 - Replace Driver をクリックします。
ドライバの更新が始まります。 - ドライバの更新が終わると以下のメッセージが表示されます。
- もう一度 Driver の部分を確認すると WinUSB に更新されてるのがわかります。
ドライバ更新は以上です。
配線
ESP32とFT2232Dの接続を行います。
結論から言うと以下各ピンを接続すればOKです。
ESP32 | JTAG信号 | FT2232D |
---|---|---|
MTDO/GPIO15 | TDO | ADBUS2/TDO |
MTDI/GPIO12 | TDI | ADBUS1/TDI |
MTCK/GPIO13 | TCK | ADBUS0/TCK |
MTMS/GPIO14 | TMS | ADBUS3/TMS |
GND | GND |
上記はOpenOCDのConfigure ESP-WROVER-KIT JTAG Interfaceの ESP32 JTAG pins に説明があります。
FT2232D側のどのピンがJTAG信号になるのかはデータシートに記載されてました。以下の部分です。
各ピンを配線したら以下の状態になりました。
デバッグ
この状態でESP32にプログラムをビルド/フラッシュ書き込みして、適当な場所にブレークポイントを貼ってF5でデバッグ開始します。
ちゃんとブレークできます。ESP32の方もしっかり止まってます。
ステップ実行も問題なくできます。
あぁ、やっとprintfデバッグから解放されます。
どこでエラーってるのか見て追えるだけでもかなり違いますからね。
後、VSCodeのF1 (Ctrl+Shift+P) のコマンドパレットで OpenOCD関連の設定があります。
動かない人はここで設定変えてみるなどしてください。自分は何も弄らなくても動いちゃいました。
“ESP-IDF: Select OpenOCD Board Configuration” ESP32のボード選択
“ESP-IDF: OpenOCD Manager” OpenOCD Serverの開始/停止
OpenOCDはソケットポートの6666と4444と3333をデフォルトで使ってるので他に使われてないか注意です。
以上です。
VSCodeでビジュアルにデバッグできるのできっと開発が捗ると思います。(きっと捗るはずだと自分に言い聞かせながら)
コメント
コメントを投稿