ESP32 DevKit などでは、Arduino 環境から書き込みを行うと自動でリセット&書き込みモードとなり、書き込みが終わると再度リセットとなり通常モードに戻る。
調べると、シリアル信号の DTR 信号を使ってリセット信号、RTS 信号を使って書き込みモードにしているらしい。
https://ja.wikipedia.org/wiki/RS-232 より:
オレオレ ESP32 基板でも同じようにできないかな?
USB シリアルモジュール
いつも使っている CP2102モジュール。このモジュールは DTR 端子が出ている。RTS 信号も出ているのだけどピンが立ってない。
書き込みモードにするのは以下のように手動スイッチをつけるとして、
リセットを、この CP2102 モジュールの DTR 信号を使って自動でできないかな?
試しにこのように回路を作ってみました。
元々、ESP32 用の遅延起動信号発生回路をこのように組んでました。
ここに DTR を直結しただけです。ちゃんとした回路にするには 1kΩ ぐらいの抵抗を噛ませたほうがいいでしょうね。
この状態で書き込んでみました。
黄色がDTR信号、水色がESP32_EN信号です。この回路だと2箇所で測っている意味はないですが。
あらかじめ SW4 を押しておき、書き込みが開始されたら SW4 を離すようにします。
波形の通り、書き込みが開始されたら2回のLoパルスが出ています。 書き込み終了時にはパルスが出ていませんが、リセットがかかります。恐らくソフトウェアリセットが効いているのでしょう。
うまく遅延回路とか作ってやれば、DTR信号のみで書き込みモードにもできそうですね。