Edited at

ESP-WROOM-02 Wifi シールドのfirmwareを書き換える

More than 1 year has passed since last update.

mbedでwifiが使ってみたいと思います。

mbedデバイスとしてはFRDM-K64Fを、wifiとしてはESP-WROOM-02 Wi-Fi シールドを使います。

ESP-WROOM-02 Shieldのfirmwareを上書きして、mbedデバイスで利用できるようにします。


ESP-WROOM-02 Wi-Fi シールドのfirmwareを書き換え

下記記事を参考に書き換えしました。

ESP-WROOM-02 WiFi シールドのファームウェア書き換え方法


ハマりポイント

上記記事にESP-WROOM-02 Shield の JP1 コネクタに FTDI USBシリアル変換アダプターを接続します。とありますが、FTDI USBシリアル変換アダプターとして、Arduino ミニ3.3V 5.5V FTDI232用の FT232RL FTDI USB-TTLシリアル アダプタ モジュール を使った場合、esptool.pyでfirmwareをflashに書き込む際に、timeoutする事象が発生しました。

Reset with flash mode (IO0 = Low). Press [Enter] key to continue.

esptool.py v1.2.1
Connecting...
Auto-detected Flash size: 32m
Running Cesanta flasher stub...
Writing 225280 @ 0x1000... 35840 (15 %)
A fatal error occurred: Timed out waiting for packet header

調べた結果、使用したFTDI USBシリアル変換アダプターのHWに依存する問題のようです。(この変換アダプタは、他のデバイスでは普通に使えていたのですが、今回のWifi Shieldのfirmware書き換えには適さないようです)

esptool-ck, esp8266, and FTDI Bug Hunting


対応

実績のあるFTDI USBシリアル変換アダプターを使うことにしましたが、記事で紹介されているFTDI USBシリアル変換アダプター Rev.2は、現在在庫がなかったので、代わりにFTDI USBシリアル変換アダプターを使うことにしました。

ESP-WROOM-02 Wi-Fi シールドに、当該変換アダプターについて記載があったので、利用実績ありと判断しました。


接続

ということで、FTDI USBシリアル変換アダプターを、ESP-WROOM-02 Wi-Fi シールドに接続しました。


fireware書き換え

上述の記事のサンプルコードを参考にスクリプトを用意しました。device fileは実際に自分の環境で認識されたものを使います。


fw_update.sh

#!/bin/sh

port="/dev/tty.usbserial-A105GSPH"

echo "Updating ESP-WROOM-02 Shield ESP8266 firmware (port:" $port ")"

read -p "Reset with flash mode (IO0 = Low). Press [Enter] key to continue."
esptool.py -p $port -b 115200 write_flash 0x00000 ./boot_v1.6.bin

read -p "Reset with flash mode (IO0 = Low). Press [Enter] key to continue."
esptool.py -p $port -b 115200 write_flash 0x01000 ./user1.bin

read -p "Reset with flash mode (IO0 = Low). Press [Enter] key to continue."
esptool.py -p $port -b 115200 write_flash 0x3fc000 ./esp_init_data_default.bin

read -p "Reset with flash mode (IO0 = Low). Press [Enter] key to continue."
esptool.py -p $port -b 115200 write_flash 0xfe000 ./blank.bin

read -p "Reset with flash mode (IO0 = Low). Press [Enter] key to continue."
esptool.py -p $port -b 115200 write_flash 0x3fe000 ./blank.bin

echo "Update completed."


上記スクリプトを実行し、下記のように実行完了しました。

Reset with flash mode (IO0 = Low). Press [Enter] key to continue.が表示された後、ESP-WROOM-02 Wi-Fi シールドのFLASHボタンを押したままRESETボタンを押して、ボタンを離します。そして、PCのENTERキーをクリックします。

$ ./fw_update.sh

Updating ESP-WROOM-02 Shield ESP8266 firmware (port: /dev/tty.usbserial-A105GSPH )
Reset with flash mode (IO0 = Low). Press [Enter] key to continue.
esptool.py v1.2.1
Connecting...
Auto-detected Flash size: 32m
Running Cesanta flasher stub...
Flash params set to 0x0040
Writing 4096 @ 0x0... 4096 (100 %)
Wrote 4096 bytes at 0x0 in 0.4 seconds (85.7 kbit/s)...
Leaving...
Reset with flash mode (IO0 = Low). Press [Enter] key to continue.
esptool.py v1.2.1
Connecting...
Auto-detected Flash size: 32m
Running Cesanta flasher stub...
Writing 225280 @ 0x1000... 225280 (100 %)
Wrote 225280 bytes at 0x1000 in 19.6 seconds (92.2 kbit/s)...
Leaving...
Reset with flash mode (IO0 = Low). Press [Enter] key to continue.
esptool.py v1.2.1
Connecting...
Auto-detected Flash size: 32m
Running Cesanta flasher stub...
Writing 4096 @ 0x3fc000... 4096 (100 %)
Wrote 4096 bytes at 0x3fc000 in 0.4 seconds (85.6 kbit/s)...
Leaving...
Reset with flash mode (IO0 = Low). Press [Enter] key to continue.
esptool.py v1.2.1
Connecting...
Auto-detected Flash size: 32m
Running Cesanta flasher stub...
Writing 4096 @ 0xfe000... 4096 (100 %)
Wrote 4096 bytes at 0xfe000 in 0.4 seconds (85.6 kbit/s)...
Leaving...
Reset with flash mode (IO0 = Low). Press [Enter] key to continue.
esptool.py v1.2.1
Connecting...
Auto-detected Flash size: 32m
Running Cesanta flasher stub...
Writing 4096 @ 0x3fe000... 4096 (100 %)
Wrote 4096 bytes at 0x3fe000 in 0.4 seconds (85.4 kbit/s)...
Leaving...
Update completed.


参考

別の記事では、mbedをUSB-シリアル変換として利用する手順もありましたが、こちらは、未確認です。

https://developer.mbed.org/teams/ESP8266/wiki/Firmware-Update