ファーム書き込めるけど動作しない自作ESP32基板の話
自作ESP32基板を作っていたとき、かなり厄介なトラブルに遭遇した。

書き込みはできるのに、電源を入れても起動しない…
最初は電源を疑い、配線を疑い、はんだ不良を疑い、ESP32自体の故障まで疑った。
でも原因はもっと単純だった。
ブートストラップピン電圧の、たった “数msの立ち上がり差” だった。
※ここでいうESP32は、ESP32C5です
起きていた現象
今回見ていたのは、電源投入直後のあるGPIOピンの電圧波形。
比較するとこんな感じだった。


- 正常基板 → 約1msで立ち上がる
- 異常基板 → 約10msかけてゆっくり立ち上がる
差はたった9ms程度。
でも、この差がESP32にとって致命的だった。
原因は「ブートストラップピン」
ESP32には「ブートストラップピン(Strapping Pin)」というものがある。
電源投入直後にこれらのピン状態を読み取って、
- 通常起動する
- ダウンロードモード(書き込みモード)へ入る
などを決定している。
つまり、電源投入時のほんの一瞬だけ重要になる特殊なピン。
今回、自分はそこへ不用意にコンデンサを接続してしまっていた。
なぜコンデンサで問題が起きるのか
コンデンサが付くと、信号はゆっくり立ち上がる。
例えば:
3.3V
│
10kΩ
│
│ーブートストラップピン(GPIO)
│
0.1uF
│
GND
このような回路だと、GPIO電圧は即座にHIGHにならず、RC時定数に従ってゆっくり上昇する。
時定数は:
今回、
- 抵抗:10kΩ
- コンデンサ:0.1uF
なら:
τ=10000×0.1×10−6=1ms
になる。
数ms〜十数msくらい、電圧が中途半端な状態になるわけだ。
ESP32はその「中途半端な瞬間」を見ている
ESP32は電源投入直後、かなり早いタイミングでブートピンの状態をサンプリングする。
つまり、
- 本来HIGHであるべきピンが
- コンデンサのせいでまだLOW寄り
だと、ESP32が誤ったブートモードへ入ってしまう。
結果として、
- 書き込みはできる
- でも通常起動しない
という非常に分かりにくい状態になる。

これ、本当に混乱する。
特に怖いポイント
今回厄介だったのは、
- USB書き込みは普通に成功する
- ESP32自体も壊れていない
- 電源も正常に見える
という点。
つまり「全部動いているように見える」のに起動だけしない。
結果として、
- ソフトウェア
- 電源品質
- はんだ
- フラッシュ
- USB-UART
などを延々疑うことになった。
原因に辿り着くまで丸1日かかった。
ESP32自作基板で注意したいこと
ESP32のブートストラップピンには、基本的に以下を慎重に接続したほうがいい。
- 大きなコンデンサ
- 強いプルアップ/プルダウン
- 外部回路
- LED
- MOSFETゲート
- 容量性負荷
特に、
「ただノイズ対策のつもりでコンデンサを入れた」
みたいなのが危険。
最後に
ESP32はかなり便利で強力なマイコンだけど、ブート周りは意外と繊細。
今回の件で、
「電源投入直後の数msがこんなに重要なのか…」
と痛感した。
もしESP32基板を自作する人がいたら、ブートストラップピンの扱いには本当に注意したほうがいい。
