ottijp blog

"esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header" が発生した時にチェックすること

2022-12-11

AE-ESP-WROOM-02にArduinoで書き込みを行おうとした際に,以下のエラーが発生し,解決に時間を要しました.

esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header

私の場合はGPIO15をLowにしていなかった(オープンだった)のが原因でした. ESP-WROOM-02のデータシートにはちゃんと書いてあるんですけどね・・・.

他にもちゃんとデータシートを読まない人(未来の自分)がいると思うので,上記のエラーが発生した時に確認すべきことをメモしておきます.

シリアル通信が正しくつながっているか

配線や電源が正しく,ArduinoがESP8266と正しく通信できているかチェックします.

方法は以下の通りです.

  • Arduinoのシリアルモニタを表示する
  • ボーレートを74880に設定する(ESP8266は起動直後のボーレートが74880であるため)
  • ESP8266をリセットする(RSTをLOW→HIGHにする)

すると,次のような出力が確認できます.

arduino serial monitor

これでArduinoと正しくシリアル通信(ESP8266からArduinoに対する送信)ができていることがチェックできます.

ESP8266が正しくUART Download Modeになっているか

Arduinoから書き込みを行う際は,ESP8266がUART Download Mode(いわゆる書き込みモード)になっている必要があります.

UART Download Modeにするには,データシートp.7に書いてあるとおり,以下のような状態でESP8266が起動する必要があります.

  • GPIO15: Low
  • GPIO0: High
  • GPIO2: High

実際に何モードで起動しているかは,起動時の出力で確認できます. 前述のシリアルモニタに出力されたboot mode:(7,7)がそれです. 数字の意味は,以下のページが参考になりました.

cf. esp-wroom-02(esp8266) boot mode(x,y)とは - shangtian’s blog

このページが消えてしまうと困るので,(x,y)のxの意味だけ転記します. code(2進数)の各ビットは,GPIO15,GPIO0,GPIO2のピン状態です.

code(2進数) code(10進数) 意味
000 0 Remapping
001 1 Boot from the UART0. Also includes flashing the flash memory for subsequent normal start
010 2 Jump start
011 3 Boot from flash memory
100 4 SDIO low speed V2
101 5 SDIO high speed V1
110 6 SDIO low speed V1
111 7 SDIO high speed V2

x=1になっていない場合は,各ピンが正しく設定されているか確認するとよいでしょう.

私の場合,UART Download Modeにしたつもりが(5,7)になっていたので,GPIO15がオープンであることが原因なのだと気づけました.


Satoshi SAKAO (@ottijp)

都内でアプリケーションエンジニアをしています

...
© 2022, ottijp