esp-open-rtosを使ってみる

Non-volatile storage library

esp-open-rtosでもFlashの一部を不揮発性の記憶領域(NVS)として使うことができます。
esp-open-rtosではsysparm領域と呼んでいるようですが、espressifではNon-volatile storage(NVS)と呼ばれています。

examples/sysparam_editorにNVS領域を読み書きするサンプルが有ります。
ビルドしてファームを書き込んだら、picocomを使ってUSB経由で接続します。


使えるコマンドの一覧がhelpで表示されます。


初めて使うときは、
[NOTE: No current sysparam region (initialization problem during boot?)]
のエラーになる事があるので、その時はreformatでパラメータ領域をクリアしてください。
パラメータ領域をクリアすると、パラメータを設定したり、設定されているパラメータを確認することができます。
使い方は下の画面を見てください。


バイナリーデータを設定した直後に、問い合わせを行うとリセットが掛かる不具合が有ります。
バイナリーデータを設定した直後に、dumpすれば大丈夫です。
バイナリーデータは偶数の文字数でないと、正しく認識されません。

また、サンプルコードの中で使われているgetchar()は、完全にバックグラウンドの処理を止めてしまうので、
マルチタスクの環境ではこ ちらのuart_getc_nowait()を使う必要が有ります。
uart_getc_nowait()は、何も入力が無いとき-1を返しますので以下の様なコードになります。
   while (true) {
     vTaskDelay(1);
//     c = getchar();
     c = uart_getc_nowait(0);
     if ( c == -1) continue;
     入力文字有り
   }




examples/sysparam_editorのディレクトリで「sudo make dump-flash」を行うと、
esptool.pyを使ってFLASHの中身をダウンロードし、hexdumpでダウンロードしたファイルをダンプします。
ダンプするFLASHのアドレスは、0x1f7000と0x1f9000です。
これはFlashサイズが2Mの場合のパラメータ領域のアドレスです。




パラメータ領域はFLASHの一番末尾の36KByte(9セクター分)を使います。
esp-open-rtosのデフォルトのFlashサイズは16Mbit(2MByte)です。
Flaskサイズが2Mの場合のパラメータ領域の先頭アドレスは
2M-36K=2048K-36K=2012K=2,060,288=0x1F7000
となります。


Makefileの中で以下の様にFlashサイズを指定することができます。
FLASH_SIZE = 32
この指定を行うことでFlashサイズを32Mbit(4MByte)に変更することができます。
Flaskサイズが4Mの場合のパラメータ領域の先頭アドレスは
4M-36K=4096K-36K=4060K=4,157,440=0x3F7000
となります。




このサンプルは
sdk_wifi_set_opmode(NULL_MODE);
を実行しているので、これ以降、APへの接続は一切行われなくなります。
APへの接続を再開するには、こちらの手順でちゃんとモードを指定する必要が有ります。
一応確認しましたが、SoftAPモードでも、Stationモードでもこのサンプルは動きます。

続く....