Universal ESPduino をしばらく使っていて、ESP8266 のファームウェアが壊れた事があった。 ファームウェアのアップロードで修復できたが手順が複雑だったため、こちらにまとめておきます。
経緯
突如 Arduino IDE から Universal ESPduino に書き込もうとした際に 書き込みエラー (返答が不正) が発生するようになり、書き込めないため、プログラムの更新が出来なくなってしまいました。
ESP8266 は起動時やリセット時に シリアルポートに ボーレート 74,880bps でステータスを吐き出します。
確認すると、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 で ステータスコードが表示されるようになりました。