microSD カードの選び方

FA で Raspberry Pi を使う場合には SanDisk の産業用 microSD カード(*1) を利用しましょう。以上。終わり。

…というのはさすがに乱暴なので、もう少し丁寧に記事を書いてみます。Panasonic の microSD カード もいいですね。Pseudo SLC を採用している SMHA シリーズは「約20,000回の書き換え回数」対応だそうで、用途が広がります。

さて、前置きはこの辺にして、今日は microSD カードの選び方について書いてみます。これを知らなければ、安価に信頼性の高いシステムを作ることはできません。

ファームウェアの機能を確認する

何はともあれファームウェア。ここが microSD カードを選ぶ時の最重要ポイントと言っても過言ではありません。

例えば、SanDisk のデータシート(*1) には以下のような記述があります。

Advanced memory management FW features power immunity, auto/manual read refresh, ECC, wear leveling

ファームウェアについては、以下の3つのポイントを確認する必要があります。

  • 「ウェアレベリングに対応していること」
    普通の SD カードはウェアレベリングに対応しています。当たり前すぎて書かれていないこともあるので、あまり気にする必要はありません。
  • 「記録済みのデータを修復する仕組みがあること」
    主に2種類の方式があります。1つは「データを読み書きする際にエラーを発見して修復する」方式、もう1つは「SD カードが自動的にエラーを発見して修復する」方式です。前者の方式では、エラーを検出するために読み出しか書き込みのどちらかを実行する必要があります。
  • 「電源喪失の際にデータを破壊しない処理方法を採用していること」
    SD カードは内部が数百KB~数MBの「ブロック」で管理されています。データを書き換える際には「ブロック消去 → 新しいデータを反映したブロックを書き込み」という手順になるため、何の工夫もなしに書き換え処理を実行すると、書き換えの途中で電源喪失となった場合にブロック単位でデータが破壊されてしまいます。

ファームウェアというのは、倉庫で言えば倉庫番、車で言えば運転手です。ここがしっかりしていないと、どんなに立派なチップを採用していてもデータが壊れてしまいます。

「そんなに重要な機能だったら、普通の SD カードには搭載されてるんじゃないの?」と考える人が居るかもしれません。そう言いたくなる気持ちはわかりますが、残念ながら、その考えは前提条件が間違っています。そもそも SD カードは、写真や音声や動画を記録することを主な目的として開発されたものです。その仕様は、大きなファイルをまとめて (連続的に) 書き込み、書き換えはあまりしないという使い方に最適化されています。小さなファイルを頻繁に書き換えるような、Raspberry Pi で OS を動かすという使い方が、SD カード本来の目的とは違っているわけです。

書き換え寿命を計算する

SD カードは消耗品です。データを書き込める回数 (書き換え回数) に限界があります。

安物 SD カードの場合、書き換え寿命が公表されていることは殆どありません。そのため巷では「TLC より MLC のほうがいい」とか「3D だったら大丈夫」とか、適当な憶測が飛び交っています。

しかし。一口に「MLC」と言っても、実際には製品によって書き換え回数が何倍も違ったりするのです。フラッシュメモリの種類で寿命を判断するのはやめましょう。メーカーの公式情報を参考にしてください。寿命という重要な情報を隠さなければいけないような製品を、信用してはいけません。

書き換え寿命は総書込量 (TBW) や書き換え回数で表されます。試しに簡単な計算をしてみましょう。

Panasonic の MLC モデルは、約2,000回の書き換え回数とされています。32GB を 2,000回 書き換えると、総書込量で 64TBW となります。この寿命に対して、平均 200KB/sec 程度のデータ更新が発生するアプリケーションを実行した場合、計算上の寿命は「64TB / 200KB = 320,000,000秒 => 10年以上」となります。

なお、SD カードのデータ書き換えはブロック単位で実行されるので、小さなデータを何度も書き込むと寿命が一気に縮みます。例えば 4MB/block の SD カードに 200KB ずつ書き込みした場合、SD カード側は毎回 4MB を書き換えることになるので、先ほどと同じ計算をすると「64TB / 4MB = 16,000,000秒 => 約半年」となります。

データ保持期間を確認…できない

データを書き込んだ後、いつまでデータを保持できるのかというのは重要なポイントです。しかし、書き込み時の温度、書き換え間隔、保存時の温度などによって、データ保持期間は数倍~極端なケースで二桁違ってしまうため、現実のデータ保持期間を正確に把握することは困難です。

一般的には、書き込み時の温度が高く、保存時の温度が低いと、データ保持期間が長くなります。逆に、書き込み時の温度が低く、保存時に温度が上がると、数週間でデータが蒸発する可能性もあります。フラッシュメモリは温度変化、特に保存時に温度が上がる状況に弱いということは覚えておく必要があります。

データ保持期間が温度の影響を受ける関係で、動作温度範囲が広い製品ではデータ保持期間も長くなるのが一般的です。逆に、動作温度範囲が狭い SD カードは避けたほうが良いということになります。

いずれにしても、データ保持期間についてはあまり気にせず、Raspberry Pi を常に動作状態にして、ファームウェアのデータ修復機能によりデータ保持するのが得策です。

読み書きの速度を確認する

Raspberry Pi の microSD カードスロットは、普通に頑張って 20MB/s 程度、オーバークロックしても 40MB/s 程度が限界です。そのため、シーケンシャルリード/ライトの性能が問題になることは殆どありません。

OS を快適に動作させるためにも、4K とか 512K のランダムアクセスが高速な SD カードを選びたいところです。

ネット上で多くの人がベンチマークテストの結果を公開してくれているので、まずはそれを参考にします。しかし、SD カードの速度は容量やリーダーライターの性能によっても違ってきます。最終的には自分で速度を測ってみるのが確実です。

費用対効果を考える

何にいくらかけるのか、という判断は人それぞれなので、ここで要不要は述べません。

参考までに、さきラボの「FA サイネージ」では SanDisk の産業用 microSD カード(*1) を採用しています。16GB で 2,000円程度です。ファームウェアの機能も十分で、耐久性もあり、動作温度の範囲も広く、速度も十分で、しかも安価です。今のところ買うのが少し面倒(*2) ですが、それ以外は問題なさそうです。

(*1) 第三世代の製品で確認しています。
(*2) Mouser で購入できます。

最後に念のため。

似て非なる製品を買ってきたり、使い方がイマイチだったりして問題が起きても、クレームは受け付けていません。悪しからずご了承下さい。

この記事の投稿者

崎 洋佑
崎 洋佑プログラマーもどき
さきラボの代表取締役。自称プログラマーもどき。
開発でよく使う言語は日本語。
IT技術よりも人が好きな、天然物のエンジニアです。