PICで気圧、温度、湿度計 by 24FJ64GA004 SDカードに記録する その7
FAT16ファイルシステムを狙い撃ちする実験 5
ダミーデータの準備


さて、FAT16ファイルシステムを狙い撃ちする実験の核心に迫りたいと思います。

その1、その2で説明した事柄は、FAT16ファイルシステムの基本事項であり、ファイルが順番に都合よく整然とならんで記録されている場合の話です。

通常はそれぞれのファイル自身の大きさは、みな異なっています。複数あるファイルの1つを削除したり、追加したり、ファイルの中身を部分的に削除、追加したりすれば、元のファイルの領域では収まらなくなったりします。

つまり、同一の大きさのファイルを、データ「0」クリア等の初期化済みのSDカードに順序よく書込んで置けば、そのデーターは、FAT16ファイルシステム上に順番に並んでいるだけではなく、物理的にも順序よくSDカード内に順序よく記憶されていると云う事なのです。

複数の同一の大きさのダミーファイルデータを使って、上記の様な状態のSDカードを用意しておいて、そのSDカードの先頭ファイルのアドレス(物理アドレス)をつかってPICから狙い撃ちでデーターを上書きし、その後パソコンでそのSDカードを読み込むとどうなるでしょうか?

SDカード内のFAT管理領域は一切PICからは変更していなければ、単純にダミーファイルの中身が変更されて表示されるだけなのです。何の問題も発生しません。特に、複数のファイルに分割する必要も無いのですが、これ以上大きいと、エディターの動作が緩慢になり、また、これより小さいとSDカード内で扱える最大ファイル数を超えてしまったりするので、4Mバイト(4096Kバイト)位に分割した方が何かと手頃な大きさのようです。

 
 
 

上記が今回用意したダミーファイルの中身です。画面上では62個のテキストファイルが並んでいる様に見えますが、行末にはCR,LFの見えない2文字が含まれていますので、1行が64文字のASCIIコードになっています。固定長のファイルデータの様なものですね。

この1行64文字(CR,LFを含む)文字列を64行分記録すると4k(4096)バイト分の内容をもつダミーデータの1ファイルが出来上がります。このダミーデータファイルを1つづつ名前を分かりやすく順番に付けて64ファイル分用意すれば、256k(262,144)バイト分ダミーデータファイル群が出来上がります。

Air3-24GDSでは、最速で0.6秒毎に1記録64バイトの観測データが発生しますので、
262144バイト/64バイト*0.6秒=2,457.6秒=40.96分
約41分の記録が出来る事になります。

2GBのSDメモリーであれば、
2*1024*1024*1024/64/0.6/3600/24=647.3
647日分(約21.5ヶ月分)のデーターが蓄えられる事になりますが、この2GBSDカードが管理できるファイルの総数は、FAT16では、
ルートディレクトリー:512個
の制限がある。

つまり、1ファイル4096バイトのダミーデータの場合には、
512*4096/64/0.6/3600=15.2時間
分の記録しか出来ない。

1ファイル8192バイトのダミーデータの場合には、
512*8192/64/0.6/3600=30.3時間=1.3日
分の記録。

1ファイル16384バイトのダミーデータの場合には、
512*16384/64/0.6/3600=60.7時間=2.5日
分の記録。

・・・

最大で1ファイルが
2,147,483,648/512=4,194,304バイト
のダミーデータの場合には、
512*4,194,304/64/0.6/3600=15,534時間=647.3日=1.78年=1年9ヶ月
分の記録が可能なのですが、実際にはそう簡単にはいかないのです。

試しに、16M(268,435,456バイト)程の大きさのダミーデータを作ってエディターで開こうとするとパソコンの処理能力にも依存しますが、これが結構重たいのです。EXCELでグラフを描くにしても、結構な重荷なのです。

やはり、1つのファイルの大きさにも、適度な大きさが有るようです。

観測データの全数を記録するのではなく、目的に合わせて、0.6秒の倍数で100回に1回(60秒毎)とか、1024回で1回(約10分毎)にするとかすれば実用的で有ろうと思われます。

要するに、どのくらいの時間に対する分解能が必要か?という事ですね。短時間に急激な変化を記録するならば0.6秒毎の観測値の全数を記録し、長期に渡ってデータを記録するのであれば、記録間隔のインターバルを設定してデーターを飛び飛びに記録する様にすべきです。

ただし、FAT16でもサブディレクトリーには、実は大変多くのファイルを記録する事も可能なのですが、今回はこの方法は使用いたしません。

PICで使用するSDカードへの書込みコマンドはSPIモードでの512バイトブロック書き込みを使用いたします。従って、64バイト×8=512バイトですから、8回分のデータをバッファリングして512バイト毎にSDカードへ、ファイルの先頭番地から順に書込んで行く事にします。

ここで、注意したいのは、単純に512バイト書込み命令を使用しただけでは気づかない事で、連続的に何回も512バイトの書込み命令を使ってみて、初めて気がつく事が有りました。

それは、ある一定の512バイトの連続書き込みをすると、SD内部のコントローラーの書込み完了動作が通常より長引く時が周期的に起きる事が有ると云う事でした。

従って、比較的頻繁に512バイトの連続書込みを行う場合には、たまに書込み完了の信号がなかなか帰ってこないときが有り、その待ち時間のタイムアウトを長めに取って置かないと、エラーになるか、もしくは、書込み中に次のデータを書込みに行ってしまってデータが書込めずに、情報が飛んでしまう事が有る事です。

 
ハード回路図は、前回と変化は有りません。(PICで気圧、温度、湿度計 by 24FJ64GA004 SDカードに記録する! その2、参照)

ただ今サンプルソフトウエアを清書中です。今回、SDへの観測データー連続書き込みは、1ヶ月前に完成していたのですが、Air-3のグラフィック用変数の退避、読み出し部分にバグがあり、そのデバッグの為に公開が遅れておりました。ようやく、バグが取れて公開出来そうです。今しばらく、お待ち下さい。
(May. the 1st. 2011)

諸般の事情によって、幸か不幸か約1ヶ月程のテスト長期運転(ACアダプタ使用)を行いバグが発生しない事を確認できました。

現状は、SDメモリーカードへのアクセス試験が主な目的だった為に、電源を入れるとSDカードへの書込み開始はいきなりスタートし、いっぱいまで書込むと無限ループでシステムが止まる様になっています。

この辺をもう少し実用的になる様に修正したら、ソフトの公開をするつもりです。(Jun. the 5th 2011)


2GBの容量のSDメモリーカードは、フォーマットすると実際に使用できるデータ容量は、FAT16ファイルシステムに使用される部分を除いたユーザーが自由に使用できる領域は1.8GB程となります。

1つのファイルの容量を4096KB(4096×1024バイト)とすると460ファイル程になります。今回は450ファイル分をあらかじめダミーファイルとしてSDメモリーカードに書込んでおくことにしました。

2GBの容量のSDメモリーカードのFAT16でのディレクトリーエントリー数は512ですので、ちょうど良い値だと思います。

そんなに必要かどうかは判りませんが、これで0.6秒毎に発生する観測データを約568.8日分、1年7ヶ月弱の記録が2GBのSDカード上に記録できる事になります。

なお、パナソニックのSDFormatterV2.0(無償)でゼロクリアをしっかり行ってから使用して下さい。

以前のパソコンで非正規なフォーマットをした内容が邪魔になってしまい、正規のフォーマットが出来きず、2GBのSDカードの最大容量をフルに使用できず半分の1GBしか使えないという有名な問題が発生したり、FATテーブルやデータ領域に様々な残骸が残ってしまっているので、思いも寄らない問題が発生する事があります。

かならずパナソニックのSDFormatterV2.0で、SDメモリーカードの完全消去設定ON(イレース無し)、論理サイズ調整OFF、を行ってから使用する事を強くお進めいたします。

なお、2GBのSDメモリーカードをSDFormatterV2.0で完全消去を行うと、約10分程の時間がかかります。

完全消去フォーマット直後のSDメモリーカードは、一旦取り外しを行ってパソコン側に再認識させてから御使用下さい。その後は、いつもの様に使用できます。


また、SDカードの製造元の違いや、同じ会社でもロットが異なると、同じ製品を同じ様にパナソニックのSDFormatterV2.0でゼロクリアしても、データーの開始物理アドレスが異なる事があるので厄介です。

そこで、C言語でSDカードの物理アドレス0を512バイト読み出し。その論理セクタへのオフセット量を読み取って、さらにディレクトリーの開始位置を計算し、最終的にデータの開始論理セクタを割り出して、データの開始の物理アドレスを割り出す様にします。
(Jun. the 12th 2011)

注意事項
General disclaimer
トッ プページへ

なお、当ホームページで公開しているデーター(写真、音声)等を個人の枠を超えて複製・転用する事はご遠慮下さいませ。
ご意見/苦情/ご感想はこちらまで