ベアメタルまたは軽量のOSフラッシュファイルシステムを実装するためのベストプラクティスは?

書き換え可能なデータストレージに利用可能なフラッシュデバイスを探していますが、その上にあるファイルシステム(FATなど)用のある種の変換レイヤー、またはそれらのために設計された特定のタイプのファイルシステム(JFFS2など)が必要です。 。

例:

これは非常に一般的なことのようですが、ページ単位の書き込み専用フラッシュ、ウェアレベリング、および不良ブロックの監視に関するフラッシュの問題に対処するための多くのリソース(特にstm32プラットフォーム)は見ていません。

JFFS2のようなシステムがその大部分を処理するように思えますが、実際にはLinuxエコシステムの外側ではあまり使われていないようです。より細いOS環境でこれに対処するためのより一般的な方法のいくつかは何ですか?

非常に望ましい機能の1つは耐障害性です。たとえば、特定の操作中に電源が切断されると、FATが破損する可能性があります。良い解決策は、ジャーナルに記録されるか、それに似たようなものであるべきです。

(注:「自分で書く」は非常に明白で望ましくない答えです)

6
ハードウェアがすでにウェアレベリングを実行していないことを確認してください。すでにウェアレベリングであるレベルのものをウェアレベリングしようとしている場合は、さらに悪化する可能性があります。
追加された 著者 Bartosz Radaczyński,
Linuxのものは一般的にオープンソースなので、ベアメタルに「単純に」移植すれば完全に自分自身で書く必要はない
追加された 著者 Bartosz Radaczyński,
オープンソースソリューションが本当にないのであれば、それには理由があるかもしれません。
追加された 著者 Bartosz Radaczyński,
Windows CEは、埋め込みFlash用にFATファイルシステムを使用しています。独自のFlash抽象化レイヤがあります。これを行うための標準的なコードベースがないことに驚きました。鍵となるアルゴリズムは特許を取得しているのでしょうか。
追加された 著者 jns,
いくつかのブランドは穏やかな例のセットまたはいくつかの標準的なルーチンさえ持っています。ほとんどは違います。それ以外は、あなたは私にいつも答えである答えを与えないようにと言ったので、私はしません。
追加された 著者 Asmyldof,
答えはありますか? @ダニエルあなたはあなたのプロジェクトのためにファイルシステムを選ぶことができましたか? SPIFF、YAFFS、FATのどれを選びましたか?
追加された 著者 devson,
私が取り組んでいたプロジェクトは別の方向に進んだので、私はそれを必要とすることにはなりませんでしたが、SPIFFSは軽量ファイルシステムサポートのための非常に良い選択肢のように見えます。 ESP8266 Arduinoプロジェクトで広く使用されています。
追加された 著者 Daniel,

4 答え

1 MBのSPIシリアルフラッシュチップを参照していますが、ファイルシステムがリムーバブルSDカードに実装されているのが一般的です。これには2つの利点があります。大容量のストレージ(MBではなくGB)で、SDカードを取り外してPCで読み書きすることができます。

その他の利点は、KingstonやSanDiskのような有名ブランドのSDカードメーカーが、SDカードアーキテクチャの一部としてウェアレベリングを提供していることです(ただし、それほど高価ではないSDカードメーカーからそれを当てにしないでください)。

Microchip社(そして他のベンダーも確かに)には、SDカードにFAT16またはFAT32ファイルシステムを実装するために使用できるライブラリがあります。これについては、アプリケーションノートAN1045 の「ファイルI/Oの実装」で説明されています。マイクロチップ社のメモリディスクドライブファイルシステムライブラリを使用した機能」を参照してください。明らかにこれはPICマイクロコントローラをターゲットにします。

このライブラリの低レベルの読み書き可能なSDカードセクタルーチンは、おそらくSPIシリアルフラッシュで動作するように変更することができますが、あなたはあなた自身のウェアレベリングと悪いセクタマーキングをする必要があり、それは非常に複雑になります。

4
追加された
これは私が過去にたどったルートです。残念ながら私もSDカードの互換性の悪夢を見ました。実のところ、私がやっていることはGBではなく数百KiBの追加容量を必要とし、SO-8用のスペースを持っていますが、実際にはカードスロット用ではありません。ご回答有難うございます!一部の人々にとって、これは確かに正しいものです。
追加された 著者 Daniel,

Here is one option I found during the search: a lightweight filesystem for SPI flash storage: SPIFFS

それは悪いブロック管理サポートを持っていません、しかしファイルを読み書きする本当に簡単な方法に関する限りそれ以外はかなり完成しているようです!

1
追加された
SPIFFS が適しているようです(唯一ではないとしても)。埋め込みターゲット用。私は多くのリソースを使用していない他の公的にライセンスされたライブラリを見つけることができませんでした
追加された 著者 Jacobm001,
@Daniel S25FL0でSPIFFSを機能させることができましたか?私はそれをAT45DBで動かしていますが、その$ 2フラッシュとS25FL0は<1ドルです。
追加された 著者 devson,

RL-FlashFS を使用できますが、ご存じのとおりです。無料のオプションではなく、IDEとしてMDK-KEILを使用してください。おそらくで可能です。 FAT-FS もあります。

1
追加された

私は自分のプロジェクトでそれを使ったことは一度もありませんが、 fat FS libをご覧ください。 。

1
追加された
私は持っています - それは正しく動くためにフラッシュ翻訳層(ftl)を必要とするでしょう
追加された 著者 Daniel,