ESP32-WROOM-32Dに書き込むためのCH340GがWindowsで認識できなかった話
ESP32-WROOM-32Dを使った自作基板にプログラムを書き込むためのUSB-UART変換モジュール――これもまたCH340Gを使った自作基板なのですが――がWindowsに認識されない(デバイスマネージャに表示されず、COMポートから通信できない)というトラブルに遭遇したので、その解決までの道をメモメモ。
前提
問題が発生した基板の構成は下記。ざっくり言うと自作基板でCH340Gを使ってPCと接続し、ESP32にプログラムを書き込みたいわけです。
1. ESP32-WROOM-32Dモジュール基板
自作基板。ESP32のブレイクアウト基板みたいなもので、ESP32-WROOM32-D以外にはLED、キャパシタ、それからIDCコネクタくらいしか載ってない。
回路図は下記の通り。
2. CH340Gモジュール基板
こちらも自作基板で、CH340Gとその動作に必要なクリスタル、ESP32の定番自動書き込み回路を搭載。接続はESP32同様IDCコネクタ。
メイン基板
1, 2を繋ぐメインの基板。ESP32のEN, IO0の10kΩプルアップとLOWに短絡させるスイッチを搭載。またPCへのUSBコネクタも搭載(正確にはUSBコネクタを搭載した基板とワイヤーで繋がってる)。
症状
PCに繋いでもCH340Gが認識されない(デバイスマネージャで確認できない)。
- ESP32モジュールを繋がず、CH340Gモジュールだけをメイン基板に繋いだ状態であれば認識される。
- ESP32モジュール基板のENピンを未接続にすると認識される。つまり、ESP32のENピンが浮いた状態だと、なぜかCH340Gが認識される。なお、IO0ピンは普通に繋いでいるのでプルアップされた状態。
- ESP32-WROOM-32Dは個体を変えて3個くらい試したが同じなので、再現性はある。ESP32-WROOM-32Eでは発生しなかった。←???
USBの接続/解除が繰り返される
認識されないだけでなく、USBの接続/解除(「あァ〜USBの音ぉ〜♪」)を繰り返し、PCがリセットされる事もあってちょっとやばい感じだった。
解決方法
IO0のスイッチを押してLOWに短絡させた状態で電源投入すると、CH340Gが認識される。
その状態で何かしらプログラムを書き込むと、以降はIO0、ENを通常通りプルアップした状態でも正常に認識されるようになる。
ちなみに、IO0スイッチは書き込みまでずっと押したまま(LOWのまま)だったんですが、HIGH/LOWを見てるのは電源投入字だけだと思うので、CH340Gが認識されたら離しても良かったのかも。
感想
なにこれ?
工場出荷状態でプログラムが書き込まれていないESP32-WROOM-32Dはちょっと挙動が違うみたいなことだろうか?
さらに不思議なんだけど、色々試す中でESP32-WROOM-32Eでやってみたら、工場出荷状態の何も書き込まれていない状態でも上記解決方法は不要で普通にCH340Gが認識されたんだよねー。なので余計よくわからんかった。
後記
結局この解決に至るまで、一週間くらい作業停滞して鬱。
言っても軸の秤でずーっと使ってる組み合わせで、ESP32-WROOM-32Dを使った基板も、CH340Gのものも、微妙にレイアウトを変更しながらかれこれ4、5種類くらい作ってきてるわけです。回路に関しては毎回コピペで、今回のような事態に遭遇したことはなかったので参りました。
まあ、工場出荷状態のESP32-WROOM-32Dには気を付けたいと思います。そしていくら自動書き込み回路があっても、IO0とENのLOW短絡スイッチは大事! 今回のような場合だと自動書き込み回路だけではどうしようもないので。
ちなみに、自分のように技術力不足でもこうやってトラブルシューティングしやすいよう、できるだけモジュールに分けるという設計を今は試していて、今回はとても有用に働きました。自作したIDCのデバッグ基板を使って、各ピンを1本ずつ接続/未接続を簡単に試せたので。
しかし、このモジュール化によってトラブルを招いているような節《フシ》も無くはないが…… まあ背に腹は代えられないと言うか、圧倒的経験不足なので、簡単にデバッグできるという方が大きく、致し方なし。
いじょ!
この記事はここで終わりです。
読んでいただきありがとうございました。
良かったらシェアしてね!
That's all for this article. Thank you for your reading.
Please share this if you like it!