概要
ESP32-WROVER-B/Eへのプログラム書き込みがうまくいかなかったため、原因を見つけて対処した。
背景と目的
以前、ESP32-WROVER-Eの開発ボードを使ってカメラを動かすことができた。そこで、次はESP32-WROVERの単体を使ってカメラを動かす回路を作ろうとしていたのだが、いつも通りプログラム書き込み用のシリアル通信ラインを接続して書き込もうとしたところ、うまくいかなかった。そこで、原因を探り書き込めるように対処する。
詳細
1. 環境/使用アイテム
- ESP32-WROVER-B
- ESP32-WROVER ピッチ変換基板 コンパクト
- ESP32-WROVER-Eピッチ変換キット
- Windows10 PC
- USBシリアル変換アダプター スイッチサイエンスオリジナル
- Arduino IDE
2. 状況整理
まず、書き込みに関与するEN端子、IO0端子については、ダウンロードモード(ESP-WROVERの仕様書でいうところのBooting Mode=Download Boot)に入れるように正しく配線されている。シリアルについては、今までESP-WROOM-32のモジュール単体でうまくいっていた方法と同様、USBシリアル変換アダプターの端子と直結している。
この状態で、書き込みを行おうとするとArduino IDE上では以下のような表示になって書き込みができない。つまり、シリアルがうまく通信できていないらしい。
esptool.py v3.0-dev Serial port COM5 Connecting........_____....._____....._____....._____....._____....._____....._____ A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0x00) A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0x00)
3. 対処方法(いきなり結論)
ESP32-WROVER-B/EのTXD0端子に3.3Vラインへのプルアップ抵抗1kΩをつける
ことで、書き込みがうまくいく。
4. 調査メモ
3.1 調査
- ESP32-WROVER-E開発ボード
- ESP-WROOM-32モジュール
- ESP32-WROVER-B/Eモジュール単体
の間で、シリアル通信ライン上の信号に違いがないかオシロスコープで、TXD0、RXD0端子を観測した。(ESP32-WROVER-Eについても調べたが、Bと同様だったのでBのみ載せる)
- 赤: TXD0端子
- 青: RXD0端子
- TXD0がLOWに落ちたところでキャプチャ(t=0)
3.2.1 ESP32-WROVER-E開発ボード
TXD0、RXD0とも通常3.3Vで、書き込み中に信号に応じてLOWに落ちる動き。
3.2.2 ESP-WROOM-32モジュール単体
手持ちのESP-WROOM-32モジュール単体でも、ESP32-WROVER-E開発ボードと同様。(書き込んだプログラムが異なるので波形は違う)
3.2.3 ESP32-WROVER-Bモジュール単体
TXD0の電圧が1.2V程度となっており、明らかに低い。(※トリガレベルより低くて引っかからないので波形が描けていない)ここで、
- TXD0はUSBシリアル変換アダプターのRX端子を繋がなければ、HIGH。内部でプルアップされている様子。
- TXD0の接続相手であるUSBシリアル変換アダプターのRX端子は、TXD0を繋がない状態ではLOW。
だから、TXD0がUSBシリアルのRX端子を引っ張り上げ切れていないようだ。
3.2 TXD0を無理やりプルアップしてみる
TXD0と3.3Vとの間に、1kΩのプルアップ抵抗を入れてみたところ、完全にHIGHになり切れていないが、電圧は少し上がった。この状態で、書き込みをやってみたところ、うまくいった。また、書き込んだプログラムのシリアル出力は、ArduinoIDEのシリアルモニターで見ることができるので通信はできてはいる。つまり、抵抗の付加は効果があったといえる。 とはいうものの、RXのラインがHIGH/LOWでしっかり振れているとは全く言えない状態なので、この方法だと不安ではある。他に方法がないか、後々探ってみたい。
なお、さらに低抵抗(200Ωくらい)を入れてはみたが、電圧としてはあまり変わらないので1kΩでよさそう。
まとめと今後の課題
ESP32-WROVER-B/E(モジュール単体)へのプログラム書き込み失敗に対処し、書き込みできるようになった。ただ、波形が開発ボードとは明らかに違うので、本当はもっと違うやり方があると思う。