ESP32の内臓フラッシュメモリを使う:選択肢を調査

Arduino/ESP32ESP32,nvs,ファイルシステム,フラッシュロム

さてwifiも試した事ですしWebServerも試しましたので、wifiの接続情報をESP32に保持させておきたいなと思いまして。

しかしプログラム領域にハードコーディングしていては、別の場所に持って行った時につかえませぬ。

その都度プログラムを書き込み直すのは非常に面倒ですからね。

というわけでざっくりと、ソフトから読み書き出来る領域について情報収集を。

ESP32の公式ドキュメントを覗いてみます。

Espressif – Storage API

これによると、ソフトウェアで読み書きする選択肢は大きく分けて以下の二つみたいです

■NVS領域(Non-Volatile Storage)
恐らくKVSみたいな感じで保持できる

■その他アプリケーション領域 / 外部フラッシュストレージ領域
領域に好きなファイルシステムとしてマウントできる

ESP32のアドレスマップを見てみると、基本的にブート領域、nvs領域、アプリケーション領域が固定されており、それ以降は自由に使ってくださいなという感じかな。

アプリケーション領域は多少動かせるらしいのですが、、

それが可能なのはセカンドブートローダー含むプログラム書き込み時のみで、自分自身を動作中に書き換える様な事はしちゃダメだぜ!って事なんだと思うます。

windowsはやってるのに、、、

と思ったら、ESP32もOTA(Over The Air)の仕組みを利用して自分自身を書き換える方法が用意されている模様。

当面使うつもりはないので今はスルーしておきますが、、

そして自由にデザインして使ってOK領域には以下の様なファイルシステムを設置可能との事。

■FAT ファイルシステム
Windowsとかのやつ
■SPIFFS ファイルシステム
SPI接続用に作られた組み込み用ファイルシステム?
■Virtual ファイルシステム(VFS)
linuxとかで使ってるやつ
■Wear Levelling ファイルシステム
ウェアラブルデバイス用に、書き込みを均等化してフラッシュロムの長寿命が期待できるらしい

他にも作れば出来るのでしょうが、ひとまずEspressifが公式にサポートしているのはこの4種類の様です。

面白そうなのはWear Levellingですかね

ESP32の書き込み寿命はウン万回だとかどこかで見かけたのですが、どれだけフラッシュロムの寿命を延ばせるのか。

データロガーとして使う場合、例えば波形の測定数値なんかを自身に書き込みし続けたら、あっというまにフラッシュロムが寿命を迎えそうです。

さて、wifiのSSIDとパスワードくらいの設定値を保持しておくにはやはりnvsがヨサゲです。

現状、設定値くらいではファイルシステムをマウントするのは少しばかり大袈裟で、行うとしたらWebサーバー用のHTMLとかを書き換え可能な状態で保持しておく位でしょうか。

ファイルシステムをマウントするのは必要になったら調べるとして、今度はnvsをテストしてみようと思います。

そのうちに・・・。