NodeMCU のファームウェアを 0.9.6-dev から 1.5.4.1 に更新する際にちょっと手間取ったのでメモ。ホストには Ubuntu(Lubuntu) 16.04LTS を使ってます。ファームウェアのビルドは SDK とソースを取得して make するだけなので省略。
- SDK - https://github.com/pfalcon/esp-open-sdk
- firmware - https://github.com/nodemcu/nodemcu-firmware
以前の 0.9.4 では make flash で OK だったのですが、新しいバージョンで make flash4m とかで書き込みしてもシリアルコンソールには意味不明な文字列が流れるばかりで、まともに動きませんでした。https://nodemcu.readthedocs.io/en/master/en/flash/#upgrading-firmware に書かれているように SDK が変更されたのに合わせて init データブロックの内容も書き換える必要があります。以下は大雑把な説明なので、できるだけオリジナルのドキュメントを参照してください。
- SDK patch 1.5.4.1 ( http://bbs.espressif.com/download/file.php?id=1572 )をダウンロード、アーカイブを展開して esp_init_data_default.bin を取り出しておく。
- フラッシュを消去する。上記の説明によればフラッシュの内容をすべて消去すれば SDK が次回起動時に init ブロックをインストールするとある。
esptool.py --port erase_flash - ファームウェアと esp_init_data_default.bin を書き込む。
esptool.py --port <serial-port-of-ESP8266> write_flash <flash options> 0x00000 <nodemcu-firmware>.bin <init-data-address> esp_init_data_default.bin
init-data-address は ESP8266 なら 0x3fc000. make flash4m とかで実行されるコマンドに esp_init_data.default.bin の書込み指定を追加する。
こんな感じです。逆に 0.9.x にダウングレードする際にも同じように不具合が起きるということなので注意しましょう。他にもなんだかんだとフラッシュ更新での不具合は多いようです。配線なども十分に確かめます。