ESP32 のダウンロードモード自動切替回路のしくみ
ESP32 を通常起動(リセットのみ)/ダウンロードモード(ブートローダー起動)へ自動で切り替える回路について解説します。短押し/長押しで以下の2段階動作を実現しています。
回路図(抜粋)
動作概要
-
短押し(≲50 ms)
- EN ピン が瞬間的に LOW → ESP32 がリセット
- GPIO0 は HIGH のまま → 「通常起動」
-
長押し(≳50 ms)
- EN ピン が LOW → リセット開始
- RC タイマーがタイムアウト → 比較器が出力を LOW に
- GPIO0 が LOW に引き下げられる → 「ダウンロードモード起動」
回路構成要素と役割
部分 | 回路構成 | 役割 |
---|---|---|
EN ワンショット回路 | R7(10 kΩ)+C23(1 µF) | 短押しで EN を瞬時に LOW にし、リセットをかける |
信号分離ダイオード | D6(1N4148) | EN 側と BOOT 側の RC ネットワークを相互干渉なく OR 結合 |
BOOT 遅延回路 | R8(680 kΩ)+C18(10 µF)+D7(1N4148) | 長押し検知用の RC タイミングと放電パス |
比較器 | U5(GS321) | +/– 端子で約 VDD/2(1.65 V)を比較し、出力をデジタル切替 |
基準電圧分圧 | R13=R14(各10 kΩ) | 比較器の – 端子に与える基準電圧(VDD/2)を生成 |
GPIO0 プルダウン | U5 出力 → GPIO0 | 比較器出力が LOW のとき GPIO0 を GND へ引き下げ |
動作フロー
-
ボタン押下直後(短押し)
- D6 経由で C23 が放電 → EN ピン LOW → ESP32 リセット
- C18 はまだ十分に放電されず +端子 > Vref → 比較器出力は HIGH → GPIO0 = HIGH
-
長押し検知後
- R8+C18 の RC 時定数(約 50 ms)で +端子電圧が Vref 以下に
- 比較器出力が LOW → GPIO0 が GND へ
- EN と GPIO0 が同時に LOW → ブートローダーモードで起動
短押し vs. 長押しの違い
- 短押し: リセットのみ
- 長押し: リセット + GPIO0=LOW → ダウンロードモード
この回路により、ユーザはボタンの押し分けを意識せずとも確実にブートローダーモードへ入れます。
参考
コメント
- GPTに解説してもらっています