「2C-ESP8266__SDK__Programming Guide__EN_v1.4.pdf」の「3.9. Upgrade (FOTA) APIs」に、FOTAでアップグレードするときのAPIが書かれている。
- system_upgrade_userbin_check()
- system_upgrade_flag_set()
- system_upgrade_flag_check()
- system_upgrade_start()
- system_upgrade_reboot()
うしろに「_check」が付いているのは、GET系のAPIで、それ以外はなにがしかの動作を起こす。
system_upgrade_userbin_check()は、今動作しているuser.binが、UPGRADE_FW_BIN1かBIN2かを返す。
説明文には特に書かれていないけど、examples/at/at_upgrade.cの使い方を見ると、UPGRADE_FW_BIN1が取れたときには"user2.bin"を、UPGRADE_FW_BIN2が取れたときには"user1.bin"をHTTP GETしようとしているから、そうなんじゃなかろうか。
system_upgrade_flag_check()は、現在のアップグレード進行状況を取得するようだ。
ESPRESSIFのサーバを使うならば、アップグレードはsystem_upgrade_start()を使うとうまいことやってくれるようなのだが、自分で何とかしたいとなるとそのAPIが使えないため、ダウンロードして、FLASHに焼いて、というのを自分でやらんといかん。
そこまでは自力でできるのだが、「どっち側のパーティションから起動するか」という情報はSystem Paramが持っているため、そう簡単に変更できない。
それをやってくれるのが、system_upgrade_flag_set()とsystem_upgrade_reboot()のようだ。
読んだ感じでは、
- system_upgrade_flag_set()でUPGRADE_FLAG_FINISHをセットする
- system_upgrade_reboot()を呼び出す
とすると、新しい方のパーティションで再起動してくれるようだ。
もう少しできてくれないか、期待してしまう。
何かというと、
- ファーム更新のダウンロードができた
- ダウンロードしたデータを焼けた
- FLAG_FINISHをセットして、upgrade_rebootした
- 再起動したけど、正常に立ち上がらなかった!
- やっぱり前のパーティションに戻す
赤文字で書いた、最後の2行だ。
せっかく2面持ってやってるんだから、失敗したら元に戻したくなるではないか。
ただ「正常に立ち上がらなかった」を判断するのは、なかなか難しそうだ。
何を持って「正常」と見なすのか。
ブート部がどうなっているか知らないけど、こういうやり方はできるんじゃないかと思う。
- 電源ON
- System Paramの起動パーティション情報を読む
- System ParamのUpgrade Flag情報を読む
- Upgrade Flagが「FINISH」だったら、起動パーティションの反対側で起動させる。
そうでなければ、起動パーティション側で起動させる。 - ブートからアプリに切り替わる
- アプリの起動が安定した時点で、起動パーティション情報とUpgrade Flag情報を読む
- Upgrade Flagが「FINISH」だったら、「IDLE」に書き換える
6の「安定した時点」が、正常起動と見なすタイミングだ。
まあ、これだけだとどうにもならないので、いくつか細工がいる。
まず、WDTはいるだろう。
「起動しない」が固まるとかだったら、WDTでリセット掛けないといかんだろう。
それだけだと再起動を繰り返すだけになるので、再起動起動カウンタみたいなのがいるのかな。
何度か再起動したら、Upgrade Flagを「IDLE」に戻してあきらめる、と。
FLASHの書き換え可能回数もあるだろうから、書き換えを少なくしたいとは思うが、なんかそういうしくみがいるんじゃなかろうかと思う。
system_upgrade_reboot()は、新しいパーティションで再起動する、とは書かれているのだが、この時点でSystem Paramを更新するかどうかまで書かれていないので、もしかしたら・・・という気もするが。
ネットで調べたりしたが、このしくみを使わない人も多く見つかるので、もっと手軽なプラットフォームがあるんだったらそっちを使いたい、という気もする。
Arduinoでやってる人が多く見つかるんだけど、私はそんなにWROOM-02単体で動かしたいって方じゃないので、ATコマンドでホスト側から操作する程度のことができればよいから、なるべくWROOM-02は標準に近くしておきたいのだ。
まあ、標準の方が今ひとつ、というのはしばしばあるけどね・・・。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。