ESP32-S3/C3で内蔵USB JTAGをWindowsで使う方法

概要

ESP32-S3とESP32-C3にはUSB経由でSerialとJTAGが使える機能が内蔵されています。Arduino IDE2系やPlatromIOを利用するとかんたんにJTAGデバッグができるので便利になりました。

ドライバ

Configure ESP32-S3 Built-in JTAG Interface - ESP32-S3 - — ESP-IDF Programming Guide latest documentation

上記に導入の方法が書いてありました。Espressif Systems社作成のWinUSBドライバが準備されており、これを利用する必要があります。

ESP-IDF Tools Installer

Standard Setup of Toolchain for Windows - ESP32-S3 - — ESP-IDF Programming Guide latest documentation

一番確実なのはESP-IDFをセットアップするインストーラーを利用することです。とはいえ、ESP-IDFを利用しないのであればこれをいれるのはちょっと無駄になります。

idf-env

一番上にあったドライバの入れ方ページにコマンドラインでいれる方法が書いてありました。

Invoke-WebRequest 'https://dl.espressif.com/dl/idf-env/idf-env.exe' -OutFile .\idf-env.exe; .\idf-env.exe driver install --espressif

パワーシェルを利用してidf-env.exeをダウンロードして、ドライバーのインストールをしています。

直接ダウンロード

現在上記のファイルをダウンロードしてセットアップしています。そのためこれを直接いれても大丈夫なはずです。とはいえ、今後新しいドライバーがでた場合には対応できないのでなるべくidf-envを使ったほうがよいと思います。

既存ドライバの更新

ESP32-S3-DevKitC-1 と ATOMS3 でJTAGデバッグ
2023.01.10 追記:Lang-ship にJATGデバッグに関するの詳しい解説がありました。詳しくはこちらの記事を御覧ください。 「 ESP32-S3/C3で内蔵USB JTAGをWindowsで使う方法 | Lang-ship 」...

上記サイトにて既存ドライバの更新でも動くことがあると情報がありました。

上記の「ドライバーの更新」ボタンから更新するようです。

デバッグ方法

正しい場所にUSBを接続する

たとえばESP32-S3-DevKitCの場合にはUSBポートが2つあります。左がUARTとかいておりUSBシリアル変換のCP2102に接続されており、右側のUSBと書いてある方がESP32-S3のUSB機能のピンに接続されています。この場合には右側に接続する必要があります。

M5Stack ATOMS3の場合にはUSBポートが1つしかなく、このポートがESP32-S3のUSB機能のピンに接続されています。

M5Stack Stamp C3Uも同様に1箇所しかなく、USB機能のピンに接続されているのでここに接続します。

すみません、写真探すのたいへんなので公式からの画像ですが、M5Stack C3の場合にはUSBの端子からUSBシリアル変換のCH9102に接続されていると書かれています。つまりこちらのUSB端子からではJTAGが利用できません。右側にあるPORT Uと書かれたD-の18とD+の19、5VとGNDの部分に自分でUSBコネクタを実装して接続する必要があります。

Youmile 8個 USB-DIP アダプターコンバーター、ミニUSBメス、マイクロUSBメス、USB 2.0 USB 3.0メス、USB Type-Cメス、USB Type-Bメス、USBオス、USB 4 in 1アダプター、2個40ピンヘッダー
Youmile
¥559(2024/10/14 10:28時点)
✅8種類のUSB-DIPアダプターコンバーター:ミニUSBメス、マイクロUSBメス、USB 2.0メス、USB 3.0メス、USB Type-Cメス、USB Type-Bメス、USBオス、USB 4 in1アダプター必要なものすべて

USB系の実験をする場合には上記のようなアダプタがあると便利です。今回の場合にはMicroUSB端子か、USBのオス端子に接続をすると使いやすいと思います。

ESP32-S3の場合にはUSBホストとして、メス端子を接続してUSBキーボードなどを接続することも可能です。

ボード選択

Arduino IDEの2系と、ESP32ボードマネージャー2.0.6以降の組み合わせで、S3かC3の対象ボードを選択します。

USB CDC On Boot

ツールの中からボードの設定をします。起動したときにJTAGで利用するCDCを有効化する設定にしておきます。

USB Mode

USB ModeはJTAGが使えるHardware CDC and JTAGに設定します。

シリアルを利用できるようにする

void setup() {
  Serial.begin(115200);
}

void loop() {
  static int cnt = 0;
  cnt++;
  Serial.printf("cnt = %d\n", cnt);
  delay(100);
}

上記のような単純なコードを実行して、IDEからシリアルコンソールが利用できることを確認します。

上記のようにシリアルモニタに表示されれば成功です。

デバッグしてみる

右向き三角の再生ボタンに虫みたいなのがいるアイコンがデバッグの開始ボタンとなります。

行番号のところをクリックして、ブレイクポイントを仕掛けるとデバッグできているかが確認できると思います。

まとめ

JTAGはドライバさえ入れてしまえばあとは自動設定されて利用可能になります。ただし、結構動作が遅いのでもっさりと進みます。個人的にはあまりJTAGデバッグはしないのですが、細かい動きがわからないときには非常に便利な機能だと思われます。

コメント