はじめに
これはpellepl/SPIFFSのConfigure spiffsを翻訳(意訳)したものです。
SPIFFSはMITライセンスで配布されています。
SPIFFSとは、マイコンにSPI接続されたSPIフラッシュにファイルシステム載せられるものです。
通常、SPIフラッシュにはアドレスにデータを格納するRawなデバイスでしかありませんが、
ファイルシステムを用いることで、fopen
やread
などのモダンなファイル操作関数が使えるようになります。
本ガイドは、SPIFFSを任意のプラットフォームに移植する際のガイドを日本語意訳したものです。
pellepl/SPIFFS
Copyright (c) 2013-2017 Peter Andersson (pelleplutt1976gmail.com)
Released under the MIT license
https://github.com/pellepl/spiffs/blob/master/LICENSE
ファイルシステム構造
はじめに、使おうとしているSPIフラッシュの大きさ、そのページサイズ(以後、物理ページサイズ)とセクター/ブロックサイズ(以後、物理ブロックサイズ)を知る必要があります。これらはデータシートから見つけることができます。
これを用いて、最初に大体どれくらいのSPIフラッシュの領域をspiffsに与えるか決める必要があります。
次にspiffsの論理ブロックサイズを決定する必要があります。
これは物理ブロックサイズの整数倍である必要があります。あなたのフラッシュメモリが4kB,16kBまたは64kBの物理ブロックサイズならば、論理ブロックサイズはnを整数とし、n*4kB
,n*16kB
またはn*64kB
になります。最も一般的なのは論理ブロックサイズをいくつかの物理ブロックサイズの総量と同じにセットすることです。ファイルシステムサイズのは論理ブロックサイズの整数倍になります。
それではspiffsの論理ページサイズを定義しましょう。これは論理ブロックサイズは論理ページサイズの整数倍にしなければいけないことと関係しています。あなたはおそらくフラッシュを効率よく利用するためにブロックあたり複数(>16)のページにしたいでしょう。一つの論理ページはspiffsにおける最も小さなデータ保持要素です。
64kBの論理ブロックサイズと決定し、256バイトを論理ページサイズとして使いると、256個の論理ページが1つの論理ブロックあたりに作り出されます。もし1バイトをフラッシュのspiffsのファイルに格納しようとすると、少なくとも1つの論理ページが使われます。また、一般的には物理ページサイズと論理ページサイズを同じにします。論理ページを大きくするとHALレイヤーのコードの記述が増えるため、物理ページサイズを超えないようにします。
それぞれのブロックとページにはいくつかのメタデータが来ます。そのため、すごく非常に小さいページまたはブロックはデータ/メタデータ率が極端に低くなります。非常に大きなページサイズはフラッシュの多くの領域を非利用にしてしまうでしょう。また、大量のページを持つとspiffsに多くの読み込みをさせるため遅くなります。
以上はすべて、どんな種類のファイルを通常格納し、どんなパフォーマンスを要求するのかに依ります。
はじめは、最も簡単に論理ページ/ブロックのサイズを物理ページ/ブロックのサイズに合わせることです。それが動いた後に必要に応じて実験できます。論理ブロックまたは論理ページのサイズを変更すると、ファイルシステムの構造が変わるので再フォーマットが必要になることに気をつけてください。
ビルド時設定
すべてのビルド時設定はspiffs_config.h
にあります。