ESP-WROOM-02を使ってみる2 -外付けSPIフラッシュの書き換え-

ESP-WROOM-02はモジュール内にプログラム/データ格納用のSPIフラッシュを持ち、
UARTブートモードで書き換え可能です。前回技適なしのハズレモジュール殻わりを
して16MBitのSPI-ROMの存在を確認しました
が実際の技適版ESP-WROOM-02は
32MBitのものが搭載されているそうなので書き換えのついでに確かめてみましょう。

20161108追:
SDKのバージョンは時々刻々と変化していき、詳しい手順をせっせと作っても
あっというまに使えないものとなってしまいます。しかしなるべく最新の手順を
紹介していくよう努めさせていただきます。
20161108追:




前回初めて通電した時の「AT+GMR」コマンドで表示されたバージョンストリングです。
現在はSDKのバージョンもV2.0.0まで進んでいます。さらにATコマンドのバージョンも
進んでいて今はV1.3.0.0となっています。今回はESP-WROOM-02をUARTブートモードで
起動させ、最新のATコマンドファームウエアに書き換えます。

注:本ぶろぐエントリで紹介しているのはEspressifが配布している公式のATファームの
 書き換え方法です。SDKを利用しコンパイルしたカスタムファームの際は書き込む
 アドレスが異なるケースがありますのでご注意ください。



公式BBSのこちらのエントリからESP8266_NONOS_SDK_V2.0.0_16_08_10.zip
ダウンロードしておきます。
展開して出てくる"ESP8266_NONOS_SDK/bin/at/1024+1024"以下のファイル群が書き込む
メインのプログラムとなります。つぎにこちらのエントリからFlash書き込みツール
Flash Download Tools V3.4.2 (ESP8266 & ESP32)をダウンロードし適当な場所に
展開し起動します。そしてエクスプローラから解凍するとなぜか失敗しやがるので、7Zip
使って確実に解凍してくださいF**K!ちくしょうマカーめ!!11!1


起動したらこんなダイヤログが出ますがESP8266 DownloadToolを選択してください。

ESP-WROOM-02はねむいさん謹製のピン配置表を参考にして
UARTブートモードで起動させておきましょう。UARTブートモードでは115200bpsが
安定して書き込める速度ですが230400bpsで上手くいくならばその値でもかまいません。


さて、先に結果を言ってしまいますがESP-WROOM-02は実際に32MBit(=4Mbyte)のSPI-ROM
を持っています。それにしたがってこちらのエントリのにある
2B-ESP8266__Non-OS_SDK__IOT_Demo_Guide__CN.pdfの23ページ目の4096kByte
Flashを参考に各バイナリを書き込むアドレスを指定していきます。

SPIフラッシュに書き込むバイナリのアドレスの構成は上記にならいます。





20161108改変:
"boot_v1.6.bin"は0x0000
"user1.2048.new.5.bin"は0x1000
"blank.bin"は0xFE000
"esp_init_data_default.bin"は0x3FC000
もう一ちょ"blank.bin"は0x3FE000
上記構成はブート領域を書き込むがFOTAを行わない場合の構成です(後述)。
書き込む予定のバイナリにはチェックフォームにチェック(緑に反転する)を忘れずに。

ツールの下段の項目は
CrystalFreqは"26M"
SPI SPEEDは"40MHz"
SPI MODEは"QIO"
FLASH SIZEは"32MBit-C1"を選択してください。


SDKで提供されているデフォルトのATファームのバイナリは20151203現在SPI-ROMの
サイズが1024kByte(8Mbit)と2048kByte(16MBit)版、そしてブートローダー無し版
の3つです。当記事ではブートローダー無し版は対象外ですので無視してください。

ESP-WROOM-02では32MBit(4096kbyte)のSPI-ROMを持ちますが2048kByte版でも
使用可能です。従ってuser1.2048.new.5.binを書きこむATファームのバイナリとします。
また、SDKに同梱しているesp_init_data_default.binについて、これをESP-WROOM-02
に書き込むとSTAモードとAPモードのMACアドレスやSSID、そしてRFの出力設定の
デフォルト値が書き換えられます。書き換えの際はSTAとAPのそれぞれのMACアドレスと
SSIDを事前にATコマンドで読み出しておいて"必ず"控えてください。
AT+CIPSTAMAC_DEF? 」と「AT+CIPAPMAC_DEF?」が読み出しコマンドです。


それはさておきv0.23以前のファームのモジュールをお持ちの方はATコマンドの
ファームウェアのアップデートの際はesp_init_data_default.binとblank.binも
同時に書き換えておかないと変な値が設定されて送信出力が極端に低い値になって
しまうことがありますのでご注意ください。過去にこのぶろぐエントリで書いた書き
変え手順では省略しても可と述べていましたが現在は上記二つのファイルは必ず
適切なアドレスに書き込んで下さい!



これらの設定をストアするデータ領域のアドレス構成だけこちらから抜き出してみました。
ESP-WROOM-02の外付けSPI-ROMはブロック消去単位が4kByteセクタ区切りでコンフィグ
データも上記のように4kByte区切りでストアされます。
FOTA(ネットワーク書き込み)する場合は0xFE000にblank.binの代わりにEspressifから
ダウンロードしてくるmaster_device_key.binを書き込みます。


ところでなんで何も書き込んでない領域が存在する中途半端な歯抜け状態なっている
かというと公式の2a-Esp8266 Iot Sdk User Manual.pdf内でそういう指示があるからです。




Download Panel1のSTARTボタンを押すと書き込みが始まります。
このときDETECTED INFOの項目にSPI-FLASHのデバイスIDが表示されて実際に32MBitの
品種が搭載されているのが分かります。



無事書き換えが完了したところです。一旦電源を落としてSPI-FLASHブートモードに
戻してからESP-WROOM-02に電源を再投入します。


「AT+GMR」でバージョンを確認します。無事アップデートできたのが分かります。

いろいろ試していると変なバイナリをうっかり書き込んでしまい上手く起動できなくなる・・・!
なんてことがよく出てきます。そうなったらとにかく上記の方法でデフォルトのバイナリに
書き換えてしまえば復帰可能ですので参考にしてください。





























●今となってはどうでもいい脱線
※技適について※

現在のATコマンド(v0.24以降)のファームウエアは上記のRF出力設定もコマンドで
変更可能になっています。モジュール出荷の時点でデフォルトでフルパワーの82
(=尖頭値電力20.5dBm(112.2mW))が設定されています。その最大設定で技適が
(FCCの試験レポートを見ると上限いっぱいの23dBmで通してるようでtelecのお墨付きに
書いてある8.09mW/MHzをもって電波法上限の帯域幅26MHz使ってると想定して
逆算すると23dBm弱になりだいたい計算が合うのでやっぱりフルパワーで通ってます)
通っていて(yuna_digickさんのヒのURL先参照)ESP8266のチップ単体の性能上
これ以上の空中線電力は実質出せず、つまりモジュール上のアンテナを違法に改造
しない限りは好きに書き換えても技適に違反しないはず


…ですがそうは問屋がおろさずこのモジュールの外付けSPIフラッシュに書き込む
バイナリはRF部をコントロールするコアの部分が必ず含まれさらにファーム変更後の
技適の保証を示す資料が現時点ではどこにも見当たらないため、誰にも干渉されず
正々堂々と使うならば書き換えるなら個人で再申請して技適を再取得するのが筋です。
(↑"書き換たことで工事認証を失効し、それを使うと電波法に抵触する"と断定していない点に注意!)
BluegigaやInventekのモジュール等はその辺きっちりクリアしていてRFをコントロール
するブロックはユーザーが絶対に触ることができないように分離されているものがあります。

20151021さらに追:
少し前ですがtiger22様のブログ記事のコメント欄のやり取りにてESP-WROOM-02と
非常に似たケースの見解がありました。

>メーカー製のファームウェアアップデートはこちらに申請が無いかぎり、
>技適認証にかかわる部分の変更をやっていないと判断している。

>それ以外のファームウェアは把握していないのでわからない(DD-WRTとか聞き返しても同じ回答)。

>ファームウェアアップデートにおいて、日本の法律を越える出力が可能になることが、
技適を無効にさせる条件にはならない。個別の総合的な判断である。

↑ファームの書き換えでオーバーパワー・スプリアス増大・オフバンドの3アウト
 となるのならばさすがに電監が動いてパーペキにゲームセットだと思います。(※上級国民除く)


ESP-WROOM-02においては"メーカー製ファーム"とはSDKに付属しているデフォのAT
ファームを意味します。私のようにEspressifが提供しているATファームだけを使い続ける
だけならば、電波法に反すると絡まれ指摘された時、「Espressifから提供されたファームウェア
だけを信用して使っている。そんなこと私に言わずにEspressifに直接言え!
もちろん英語でな!
」…と反論しノイズをシャットアウトできます。

むしろEspressifと関係ない一個人が勝手な解釈で法律的判断を下すこと自体大きなミステイク
です。ちゃんと技適マークは取れてお上のお墨付きももらってるんですからEspressifさんを
信用して(←このアピール重要)
バンバン書き換えまくって使い倒しましょう!!!

Espressif提供のスタティックライブラリを含むSDK使ってコンパイルしたファームでも同じ
理屈でなんだか反論出来そうなので技適を名目に難癖付けるのだけが趣味の人たちには
「私に聞くのはお門違い。Espressifに直接言え!」のお題目で突っぱねちゃいましょう。

繰り返しますが現時点で確実に工事設計認証が無効になり電波法違反になる行為は、
技適マークが刻印されているESP-WROOM-02の金属ケースを外したりもしくは
基板上のパタンアンテナを傷つけたり削ったりアンテナにリード線を半田付けしたり
新たに外付けアンテナを取り付けたモジュールをシールドルームの外で動作させる
ことです。

20160129さらに追:ついに白黒が付いた!!
スイッチサイエンスさんから公式に問い合わせた結果が公表されております。
以下引用
ユーザーによるファームウェアの書き換えが、ESP-WROOM-02の工事設計認証を無効にする可能性について、メーカーのEspressif Systemsに確認をしました。同社は登録証明機関に確認した上で、Arduino core for ESP8266 WiFi chipとSDKを使っている限りにおいては、認証には影響を与えないという回答を下さいました。他の開発環境など、ファームを書き換える部分によっては、認証に影響を及ぼし得るとのことですので、ご注意ください。

引用終わり
SDKを使用してビルドしたファームウェアなら書き換えても最早なんの問題も心配もありません!!
みんな遠慮せずどんどんやりまくれ!!!!!!!!!!!!!!!!!!!

Go to top of page