File System Design Guide

SDカードを使ったシステムを開発するに当たりまして、テストツールの必要性と特徴について解説します。すべての方に。

はじめに

フラッシュ・メモリ・カード市場で、圧倒的に大きなシェアを持つSDカードですが、このSDカード対応の機器が増えて来ました。カメラ、ビデオ、プリンタ、携帯電話モバイル機器をはじめとしてTVやPCなど、多くの機器がSDカードに対応しているので、SDカードの汎用性が求められます。このようにSDカードの普及が広まる一方で、発生するクレームを回避するために、SDカード製品のテスト・ツールの必要性について説明します。


1.ファイルシステムの規格

現在SDカードは、SD、SDHC、SDXCの三つに分かれます。SDアソシエーション(以降SDA)ではSDカードの仕様や、ホスト側の仕様を決め、その規格書を同会員会社向けに公開しています。この規格については、ハードウェアの規格から、SDカードに読み書きするファイルのフォーマットまですべてを含む仕様書になっています。この規格を正しく遵守すれば、他機種間でもSDカードを経由してファイルのやりとりができます。 以前はいくつかのフラッシュ・メモリ・カードがありましたが、ファイル・フォーマットも企業秘密にしている場合も多く、専用のソフトウェアで読み書きするというのが普通でした。そこでSDAを中心として、多くの加盟会社の合意で共通規格を策定するようになりました。この規格に準拠した製品のみが、SDのロゴ・マークを使うことができます。

ファイル・システムの規格について説明します。SDカードのファイル・システムには、FAT12、FAT16、FAT32、exFATがあります。このファイル・システムの規格は通常Microsoft(以降MS)が規格化したものを指します。例えば同じFAT32であっても、SDAの規格と、MSオリジナルの規格を比べると「イコール」ではありません。日本語では「全く同じ」ではないと言えるかもしれません。 MSでは、ハードウェアに依存しないように規格化されていますが、SDAでは、MSの規格をそのまま使うのではなく,SDカードの特徴を考慮した規格にしています。従って、MSオリジナルのファイル・システム規格を採用した場合、SDA規格に準じた機器では読めない、書けないなどの問題が発生することになります。


2.ファイル・システムのテストの必要性

実際のSDカード対応機器ではSDAの規格書を精査せずに、MSオリジナル規格と全く同じと思って実装している機器も少なくはありません。また、機器によってはより広い範囲を扱えるように実装することもあります。そのため他社機器で読み書きできたからと言って、それがSDAファイル・システム規格として正しいとは限りません。このことから他社機器で読み書きのみで確認というのは、テストにはならないことが多いのです。
特にPCでの読み書きでの確認はテストしたことにならないケースがほとんどです。ファイル・システムがおかしい状態であってもPCは読み書きできる能力を持っています。PCは、CPU性能・メモリの大きさなどSDカード搭載機器とは比べ物にならないくらい大きいわけですから、巨大なリソースを使って、最大限読み書きできるように実装されています。ただし、PCでも読み書きできない状態というのは、完全に規格外ということになります。
PCを含むSD機器で読み書き確認の前に、ファイル・システム規格書を元にしたテストが必要となります。ファイル・システムのテストは、SDカードを読み書きした後のSDカードが、規格書に書かれている管理情報が意図している状態と合致しているかを調べます。通常ファイル・システムをデバッグしている際は、個々の管理領域の値を見てデバッグしていると思います。このすべての管理領域が、意図した値になっているのかという確認が必要なのです。
また、ファイル・システムは考え得るあらゆる状況で確認する必要があります。単に、論理フォーマットした直後にファイルを一つ書いた程度では済まされません。例えば、ファイルをたくさん書いた後、または一部ファイルを削除した後、SDカードの空き領域が途中で無くなった時、ファイルを書き込む領域が不連続になった場合など、さまざまな状況があります。このような確認作業は、管理領域の数だけ必要になるので、大変手間が掛かります。


3.テストツールの必要性

SDAでは、どのようなテストをすべきかの規格書を作成しています。例えば、管理領域の値は、相互関係で他の管理領域の値に依存した値をとる箇所があります。そのため、単純に管理領域の値の数値としての比較だけでは十分ではありません。この規格書は、最低限のテスト項目について書かれています。
この規格書の基本的な確認方法は、セクタのダンプとなります。実際にはSDの容量も増大しているので、セクタの16進ダンプで確認したら、どれだけ時間がかかるのか、またその確認結果は本当に正しいのかなどの問題点があります。セクタ・ダンプと規格書を見比べるのは困難です。ファイルが多い、ファイル・サイズが大きい、ディレクトリが深いなど特殊な状態でのテストでは人間の目での確認は難しくなります。
このような問題を解決するためには、SDカード内を自由に解析することができるソフトウェア(ツール)を使うことが一番です。さらに、見やすさから確認のミスも防ぐこともできます。また、セクタ・ダンプでは、ファイル・システムの規格を熟知した方が見ないと判断ができませんが、ツールを使うことで、正しいか、またはエラーがあるか簡単に判断できます。規格書の読み違えもありますので、一人で規格書を理解して、実装してテストをするとなると、どうしてもどこかでミスが生じます。また次のようなケースつまり、ファイルが多い、既に消したファイルのエントリを再利用する、ディレクトリのクラスタが拡張される、書き込み時に空き領域がない時があります。これらをダンプで確認することは現実的ではありません。ツールを使って時間を減らすことが賢明です。

ここまではSDカードに書き込まれたデータを対象とした検査方法を述べてきましたが、次にファーム・ウェアを対象とした検査方法、つまりcoverageに関して述べます。coverage検査を行うことで、想定外のプログラムのミスにも気づけます。
coverageを行うには、そのプログラム・コードの条件式を満たす場合と、満たさない場合の両方の状態が必要です。条件を満たさない場合にはチェック対象となりません。そこで条件式をいろいろと変更することで、チェック領域を広げることも重要です。実際には、16進ダンプを見ながら条件式の値を別の値に変更してテストを進めるわけですが、手作業で値の変更をしていくのは現実的ではありません。
また検査ツールを使えば、coverageのためのSDカード内の特殊な状態を意図的に造り出せます。

SDAでは、exFATのファイル・システムを32GB超から2TBまでの容量のSDカードに適応するとしています。SDHCの全盛期は短かったように思えますが、exFATの時代は永く続くと思います。exFATの規格外となるようなSDカードが世間に出回らないよう、また万一出回ってしまったために、他の機種が規格外のexFATの対応をしなくてならないといったことが起こらないよう望みます。

 トレンディが開発したSDカード/ホスト用ツールのご紹介はこちら

SD製品