ESP8266 ファームウェアアップデート

Universal ESPduino をしばらく使っていて、ESP8266 のファームウェアが壊れた事があった。 ファームウェアのアップロードで修復できたが手順が複雑だったため、こちらにまとめておきます。

経緯


突如 Arduino IDE から Universal ESPduino に書き込もうとした際に 書き込みエラー (返答が不正) が発生するようになり、書き込めないため、プログラムの更新が出来なくなってしまいました。

ESP8266 は起動時やリセット時に シリアルポートに ボーレート 74,880bps でステータスを吐き出します。

FLASH Mode で起動した際のステータスコード
UART Mode で起動した際のステータスコード

確認すると、FLASH boot モード時に
ets_main.c
と表示されるようになっていました。
どうやら何らかの原因によりSPIフラッシュに書かれたブートローダーが壊れたようです。

ESP8266 ファームウェア書き込み


ESP8266 のファームウェアは Python で書かれた ESPTool を使うと、UART経由で書き込むことが出来ます。 ここではWindowsの場合の ESP8266 のファームウェアの書き込みを説明します。

準備

  • Python のインストール
  • pySerial のインストール
  • ESPTool のダウンロード
  • ESP8266 のファームウェアダウンロード
  • USB Serial のCOMポート番号確認

Python のインストールは こちらのページに詳しく書きましたので御覧ください。

pySerial は Windows のコマンドプロンプトから

python -m pip install pyserial

で実行することでインストールが完了します。

ESPTool は こちらからダウンロード出来ます。
ダウンロードしたら、C:\esptool\ 等に解凍しておきます。

ESP8266 のファームウェアはこちらからダウンロードできます。
SDKs&Demos の中の、 ESP8266 NONOS SDK Vx.x.x をダウンロードします。
私は V2.0.0 20160810 をダウンロードしました。

詳細は、解凍した bin\at\README.md に記載してあります。
内容は NON-BOOT MODE の内容を参照すると良いです。

V2.0.0 の場合、使用するbinは場合、以下の表の4つです。

ファイル名 場所 アドレス 説明
eagle.flash.bin bin\at\noboot\ 0x00 application
eagle.irom0text.bin bin\at\noboot\ 0x10000 SDK libraries
blank.bin bin\ 0x7e000 , 0x3fe000 FFh 埋め
esp_init_data_default.bin bin\ 0x3fc000 Default 設定

これらのファイルは解凍したら、C:\esptool\esp8266bin\ 等に解凍しておきます。

USB Serial 変換アダプタを Windows に接続したら、COMポート番号を確認しておきましょう。
※ここでは COM9 として進めます。

FWの書き込み

いよいよ FWの書き込みです。 この作業には 15分程度かかります。

Windows のコマンドプロンプトから cd コマンドを使って、 カレントディレクトリを C:\esptool\ に移動します。

cd /esptool/

次に、 esptool.py を使ってバイナリを書き込みます。 私は念のためボーレートは 9600で行いました。なお、 esptool.py は -h でヘルプを確認できます。

esptool.py -p COM9 -b 9600 write_flash 0x00 ESP8266\eagle.flash.bin
esptool.py -p COM9 -b 9600 write_flash 0x10000 ESP8266\eagle.irom0text.bin
esptool.py -p COM9 -b 9600 write_flash 0x7e000 ESP8266\blank.bin
esptool.py -p COM9 -b 9600 write_flash 0x3fe000 ESP8266\blank.bin
esptool.py -p COM9 -b 9600 write_flash 0x3fc000 ESP8266\esp_init_data_default.bin 

それそれは分割して書き込んでも、1回で纏めて書き込んでも大丈夫です。

おわり


私は ESP8266 V2.0.0 20160810 にアップデートしましたが、起動時のステータスをシリアルで出力するボーレートが どれに合わせても解読不能になってしまいましたた、FLASH Mode で起動した時に 115,200bps に合わせていると文字化けステータスコードの後に Ready と表示されました。

その後、Arduino IDE で 「esp8266 by ESP8266 Community Version 2.3.0」 を使用してスケッチの書き込みに無事成功し、その後は起動時のステータスも元通り 74,880bps で ステータスコードが表示されるようになりました。

コメントを残す