1.ESP32のブートが出来ない。
今回はソフト担当会社様から打ちあがった課題でした。
ESP32-WROOM-32Eを使ったIoT機器の基板で通常の立ち上げはするがBOOTモードに入っても書き込みができないという相談でした。
ESP32はブートモードに入る際にIO0(25pin)をGNDに落とした状態でリセット解除を行うと遷移しますが、その対応をしても起動せず困っている状況でした。
2.Arudino IDEにて書き込み確認。
まず初めに現象確認のためArudino IDEで書き込みを実施します。その結果、以下のエラーメッセージが出る事を確認しました。
A fatal error occurred: Failed to connect to ESP32: No serial data received.
<直訳:致命的なエラーが発生しました: ESP32 への接続に失敗しました: シリアル データを受信できませんでした。>
確かに何らかの原因でESP32にアクセスできない現象が起きているようです。そのためシリアルデータのモニタ場にも
rst:0x1 (POWERON_RESET),boot:0x2 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_FEO_V2))
waiting for download
とBoot時にESP32から送信されるメッセージが届かない状況の用です。
3.周辺回路の確認。
次にESP32の周辺回路を確認します。
今回のモデルはI2C、UARTやGPIOを利用して外部機器と繋がっていました。回路図を見て各ブロック調査。
基本的にはBOOT出来ないという事は何らかの入力ラインが邪魔をしているケースが有りますので立ち上げ時に入力ポートが問題ないかの調査になります。
基板上にはESP32とセンサーモジュールが繋がっており、そのセンサーモジュールを確認したところ、I2C制御ピンの他にGPIOがプルアップされている状況でした。
具体的にはIO2(24ピン)及びIO4(26ピン)がプルアップされていました。
センサーモジュールとの配線を切ると無事ブートする事を確認しました。
4.まとめ
今回の基板では簡単にセンサーが使えるモジュールとして購入したものを繋げてしまったことが原因だったかもしれません。モジュール内の抵抗を外してとりあえずは動作する環境にしました。
IoTのハードウェアについてお困りごとがありましたらお問い合わせください。弊社モジュールも以下サイトにて販売中です。