昨年の秋、RISC-VコアのGigaDevice社GD32VF103をよく使っていたときにお世話になっていたSipeed社RISC-Vデバッガ、しばらく使わなかったら動かなくなっていました。原因はドライバの更新。ドライバを復旧するついでにダメ元でやってみたら、RISC-VデバッガでESP32のデバッグ出来ました。メーカ想定外の使用法なので自己責任使用。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
昨年、「お求めやすい価格」でディスプレイまで搭載したRISC-VマイコンボードSipeed社Longan Nanoを動かしているときに使用しておりました、これまた「お求めやすい価格」のデバッグ・インタフェース、RISC-V-DEBUGGERが動かなくなりました。使用開始時に投稿した記事はこちら。ま、実際にはLongan Nanoではなく、SeeedStudio社のGD32VF103VBT6マイコンボードを「ピン数が多くてディスプレイが接続されていない」Longan Nanoだと謀って VSCode + PlatformIOで使っていたのでありますが。原因を調べた結果、単刀直入に言えば以下のようでした。
仮想COMポートからWinUSBに「置き換えた」はずのUSBドライバが元の仮想COMポートのドライバに戻っていた。
使用できていた時には、Interface 0(ボード上のA)がWinUSB、Interface 1(ボード上のB)が仮想COMポートになっていた筈が、両方とも仮想COMポートに戻っていました。初期状態。何時そうなったのか、何がきっかけだったのかは定かでありません。推測するに、「Windowsのドライバの更新」がかかると元に戻ってしまうようです。原因が分かれば対処は簡単、再び
にお出まし願ってドライバを置き換えるだけです。ただこのZadigというツール、知らずに使うとかなり「危ない」ツールです。Windowsのドライバを勝手に入れ替えてしまうので、今まで使えていた装置が使えなくなる状況になる可能性がままあります。以前にも書きましたがFT232HL搭載のインタフェースを仮想COMポートからJTAGインタフェース化するためにドライバを交換したら他のFT232チョメチョメ系のデバイスも全て影響受けてしまいました。そのせいで意外なもの(Digilent Analog Dicscovery2)が動かなくなって難渋しました。FTDI社のデバイスは人気であちこちで使われているのでノーマークでドライバを交換すると痛い目にあいます。
その点、このRISC-V-DEBUGGERは同じFTDI社でも FT2232D という2が余計に1個ついている「Dual系統」のデバイスなので、手元の環境ではまずは安心。ドライバを入れ替えても手元の他の装置には影響でないことは確認済です。Zadigで入れ替えているところの画面キャプチャが下に。
-
- Optionsメニューから全デバイスをリスト
- プルダウンメニューからDual RS232(Interface 0)を選ぶ
- FTDIBUSからWinUSBに「Replace Driver」
でOKです。
なお、RISC-V-DEBUGGERでは端子的にJTAG信号に接続されているのはInterface 0で、UARTのRX/TXに接続されているのはInterface 1 なので間違うと悲惨なことになります(私はやっていないので未経験。)
さてこうしてドライバを「こっそり」入れ替えてくれるZadigですが、どうもWindowsからドライバの更新かけるとそんな事情にお構いなく初期状態にしてくれるみたいです。JTAGが動かなくなったらドライバを確認っと。
さてZadigでFT2232DのUSB IDを眺めていて気付きました。
ESP32用のデバッグIFとしてもつかえるんじゃね。
ちょうど別件でCQ出版 Interface誌2021年4月号、読んでいました。その136頁
2021年お勧め開発環境 VS Code 第2回ESP32で試すデバッグ&分析(著者:田中正幸様)
という記事あり、その中で秋月製のFT232HL搭載ボードAE-FT232HLをつかってESP32をデバッグしていたのです。ただ、前述のとおりFT232HLをJTAG化するのは私の環境では問題があります。しかしFT2232Dのケースにも言及あり、やれそうな感じです。(メーカの想定外の使用方法だと思うので、やる場合には自己責任でお願いします。)
-
- ターゲットボードは、ESP32-DevKitC
- 開発環境は VSCode + PlatformIO
- テストビルドは、とりあえずArduino環境で
- ダウンロード方法はDevKitCのUSB経由のまま変えず
- デバッグIFの指定は敢えてしない(デフォルト)
PlatformIO自体は多くのデバッグIFをサポートしています。Sipeed社のRISC-V-DEBUGGERも含まれてはいますが、その名のとおりRISC-V系のボード向けのみです。ESP32向けに使用可能なデバッグIFにはその名はありません。
冒頭のアイキャッチ画像のように、RISC-V-DEBUGGERのJTAG端子4本とGND端子、RST(EN)端子をDevKitCに接続し、テスト用に用意したArduino式Lチカのサンプルコードに対してデバッグを起動してみました。
デバッグビルドとそのダウンロード後、かなり時間かかりますが、OpenOCDが起動し、Arduino環境のユーザコードの裏にあるapp_main()でブレークしました。Arduinoといいつつ、ESP32では裏側でFreeRTOSのTaskが生成されて動作していることが分かります。
ユーザから見える Arduino環境の loop()関数内にブレークポイントをしかけてGOかけると以下のような感じ。ちゃんとブレークポイントで止まります。
RISC-V-DEBUGGERでESP32のデバッグ、できるんじゃね。私は責任とらないけど。。。