ESP32で遊ぶ


開発環境を作る (4)

プログラムを開発する際について回るものの一つにデバッグがあります。
Arduinoでは、printf デバッグ程度しか提供されていないのに対して、ESP-32ではソースレベルデバッグが可能ということです。
今回は、デバッグ環境を整えてみたいと思います。

デバッグに必要なもの

JTAG Debuggingに説明がありますが、次のソフトウェアやハードウェアが必要になります。

  1. ターゲットに対応したGDB
    ESP-IDFをインストールした際に同梱されています。
  2. OpenOCD
    今回インストールします。
  3. JTAGアダプタ
  4. ターゲットのESP-32

この他に、JTAGアダプタとターゲットをつなぐためにブレッドボードを用意しました。
ここでESP32-DevKitCをブレッドボードに刺す際には注意が必要です。次の写真を見てください。

通常の方法でESP32-DevKitCをブレッドボードに刺そうとすると配線ができません。そこで、

このように2つのブレッドボードを使って、配線のための穴を確保します。

それでは、デバッグ環境の構築を始めましょう。

OpenOCDをインストール

Set up OpenOCD for Windowsにあるようにインストール作業を進めます。

  1. OpenOCDをダウンロードします。
    1. GitHubから最新のOpenOCDをダウンロードします。

      執筆時点では、v0.10.0-esp32-20180604 でした。
    2. ダウンロードしたファイルを解凍します。
  2. 解凍したOpenOCDをインストールします。
    1. 解凍して作成されたopenocd-esp32フォルダをC:¥msys32¥optフォルダにコピーします。
    2. MSYS2環境のパスを通します。
      1. C:¥msys32¥etc¥profile.dフォルダにexport_ocd_path.shファイルを作成します。
      2. export_ocd_path.shファイルに次の内容を記録します。
        export PATH="$PATH:/opt/openocd-esp32/bin"
        
    3. アダプターのクロックを設定します。
      1. C:¥msys32¥opt¥openocd-esp32¥share¥openocd¥scripts¥interface¥ftdi¥um232h.cfgファイルに次の内容を追加します。
        adapter_khz 2000
        
        

FT232HL のドライバをインストール

筆者の環境では、FT232HLをUSBケーブルでPCと接続すると、Windowsの標準のドライバがインストールされて仮想COMポートとして認識されました。
しかしこのままではJTAGの機能が使えないので、ドライバを置き換えます。

  1. Zadigをダウンロードします。
    Zadigサイトから最新のZadigをダウンロードします。

    執筆時点では、Zadig 2.3 でした。
  2. ダウンロードしたZadigを起動します。
    Zadig-<バージョン>.exeを選択して起動します。

  3. 最新版を確認するかと聞かれているようですが、Noを選択します。

  4. [Options]-[List All Devices]を選択します。

  5. Single RS232-HSを選択します。

  6. [Replace Driver]ボタンを押します。

  7. [Close]ボタンを押します。

  8. デバイスマネージャーを確認すると、シリアルポートが消えて、新たにユニバーサルシリアルバスデバイスが追加されています。

ESP32-DevKitCとFT232HLを接続

次のように接続します。

ESP32-DevKitCピン名FT232HLピン名
IO12AD1
IO13AD0
IO14AD3
IO15AD2
GNDGND


Eclipseにプラグインをインストール

Eclipseからデバッグを行う際には、GDB OpenOCD Debuggingプラグインを使います。
インストールされていない場合は、インストールします。

  1. Eclipseを起動します。
  2. [ヘルプ]-[Eclipseマーケットプレース]を選択します。

  3. 検索にGNU MCUと入力し、エンターキーを押します。
  4. [インストール]ボタンを押します。

  5. [GNU MCU C/C++ OpenOCD Debugging]を選択します。
  6. [確認]ボタンを選択します。

  7. [使用条件の条項に同意します]を選択します。
  8. [完了]ボタンを選択します。

  9. [インストール]ボタンを選択します。

  10. [今すぐ再起動]ボタンを選択します。

Eclipseのデバッグ設定

プロジェクト毎にデバッグ設定を行います。

  1. Eclipseを起動します。
  2. プロジェクトを開きます。
  3. [実行]-[デバッグの構成]を選択します。

  4. [GDB OpenOCD Debugging]を選択します。
  5. [新規]ボタンを押します。

  6. 必要に応じて[名前]を変更します。
  7. [メイン]タブを選択します。
  8. [C/C++ アプリケーション]に.elfファイルを入力(または参照して選択)します。
  9. [自動でビルドを使用不可にします]を選択します。

  10. [デバッガー]タブを選択します。
  11. [実行可能ファイル・パス]にC:¥msys32¥opt¥openocd-esp32¥bin¥openocd.exeを入力(または参照して選択)します。
  12. [Config options]に-s C:¥msys32¥opt¥openocd-esp32¥share¥openocd¥scripts¥ -f interface¥ftdi¥um232h.cfg -f board¥esp-wroom-32.cfgを入力します。
  13. [実行可能ファイル名]にC:¥msys32¥opt¥xtensa-esp32-elf¥bin¥xtensa-esp32-elf-gdb.exeを入力(または参照して選択)します。

  14. [始動]タブを選択します。
  15. [Enable ARM semihosting]のチェックを外します。
  16. [Load executable]のチェックを外します。
  17. [Set breakpoint at]をapp_mainに変更します。

  18. [適用]ボタンを押します。
  19. [閉じる]ボタンを押します。

Eclipseでデバッグしてみる

それでは、Eclipseでデバッグをしてみたいと思います。

  1. Eclipseのデバッガーを起動します。

  2. app_main()で、停止しました。

  3. インスペクトもできます。

以上で、Eclipseからソースレベルデバッグができることがわかりました。

参考サイト

ESP32 を FT232H でつないで OpenOCD+GDBでデバッグ
ESP32をEclipse上でデバッグする