一言で言うと、
「きちんと扱えるという確証がない限り、NANDフラッシュではなくeMMCを使え!」
ということなんですが、
ちょっと詳細を説明しようと思います。
昔、ある製品でNANDフラッシュメモリーにプログラムを書いていました。
しかし、NANDフラッシュはどんどん劣化していくだけでなく、最初からエラービットがあるというある意味とんでもない部品です。
つまり、買ったときから不良品(こういう言い方するをマズいかもしれないけど)なわけです。
しかもどの程度のエラーがあるかとか、エラーの詳細とかそういうことをメーカーが教えてくれませんでした。
それが原因で製品が正しく動かないとかでトラブルがあったのです。
じゃあ、そんなメモリをどうやって扱うのかというと、「誤り訂正符号」という技術を使います。
簡単に言うと100bitのデータを110bitで表現するといったように、データを水増しさせます。
水増しすることにより1bitぐらいの間違いなら「これはおかしい」と検出して訂正することが出来ます。
水増しする量を増やすほど多くの間違いを検出できるようになりますが、当然メモリが無駄になりますので、訂正能力とメモリの使用量のバランスを取ります。
この誤り訂正符号の力でNANDメモリーが実用的に使用できるようになります。
しかし、実際に開発するとなると非常に面倒でした。
CPU側に「誤り訂正符号」のファームウェアを組み込まないといけない上に、そのファームウェアにバグが有ってですね・・・
要は、NANDを扱うためだけに四苦八苦しないといけなかったのです。
ということで、使うならeMMCです。
これはSDカードとほとんど同じものです。
SDカードは中身にNANDフラッシュが入っていますが、誤り訂正などを行うコントローラが内蔵されており、外からは普通の読み書きすればいいだけになっています。
eMMCも同じようにNANDフラッシュとコントローラが内蔵されており、これまでに書いたような誤り訂正などで苦しむ必要がありません。
また、実装部品なのでSDカードより堅牢です。
(SDカードだと接触不良が起こりうるので、OSイメージを入れるのは少し怖い)
なので、大容量のストレージが必要な時にNANDフラッシュを選択していいかよく考えるようにしましょう。
誤り訂正符号の処理などが確立されており問題ないならいいですが、ライブラリなどを活用して自前で作り上げるとなると大仕事です。
そういうときはeMMCなどを活用しましょう。
以上、小田切でした。