マイコン独立大作戦
SDカードインターフェースの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
そして作戦その3は、SDカードインターフェースです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第31回]
●FAT32システム(3) ディスクレイアウト
[第29回]のBPB(Bios Parameter Block)の解析をしたことで得られた情報をもとに、FAT32のディスクレイアウトを図にしてみました。
図の中でMBR、BPB、FS information(ファイルシステム情報)、BPB back upについては、前回までのところで確認済みです。
そこで今回は図で示されたエリアでまだ確認していないエリアについて確認をしていくことにします。
まず最初はFAT#1です。
セクタbR12Eを読みました。
logfile nd80zlog\12081120.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >cm 8103 8103 00- 8104 00- 8105 20-31 8106 06-2e 8107 00- >jp 8100 [0000312E] 8800 F8 FF FF 0F FF FF FF FF-FF FF FF 0F FF FF FF 0F ................ 8810 FF FF FF 0F FF FF FF 0F-FF FF FF 0F 00 00 00 00 ................ 8820 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8830 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8840 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8850 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8860 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8870 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8880 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8890 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8900 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8910 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8920 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8930 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8940 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8950 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8960 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8970 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8980 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8990 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ |
FAT16ではFATエリアの2バイト(16ビット)が1クラスタに割り当てられていました(だからFAT16です)。
FAT32ではFATエリアの4バイト(32ビット)が1クラスタに割り当てられています(だからFAT32です)。
前から順にクラスタ#0、クラスタ#1…と数えていくと、クラスタ#6までが割り当て済みになっています。
クラスタ#0とクラスタ#1はシステムのエリアです。
クラスタ#2はDIRエリアです([第29回]参照)。
ということはクラスタ#3〜クラスタ#6までがユーザーズエリアとして割り当て済みということになります。
ユーザーズエリアについては後のところで検証していくことにします。
次はFAT#2です。
セクタbR897を読みました。
>cm 8103 8103 00- 8104 00- 8105 31-38 8106 2E-97 8107 00- >jp 8100 [00003897] 8800 F8 FF FF 0F FF FF FF 7F-FF FF FF 0F FF FF FF 0F ............... 8810 FF FF FF 0F FF FF FF 0F-FF FF FF 0F 00 00 00 00 ................ 8820 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8830 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8840 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8850 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8860 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8870 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8880 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8890 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8900 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8910 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8920 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8930 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8940 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8950 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8960 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8970 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8980 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8990 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ |
FAT#1と同じ内容です。
次はDIRエリアです。
セクタbS000を読みました。
>cm 8103 8103 00- 8104 00- 8105 38-40 8106 97-00 8107 00- >jp 8100 [00004000] 8800 4F 48 41 59 4F 42 20 20-42 54 4B 20 00 B1 79 41 OHAYOB BTK .アyA 8810 5D 49 5D 49 00 00 0D 74-31 3D 03 00 81 00 00 00 ]I]I...t1=...... 8820 4F 48 41 59 4F 42 20 20-4C 53 54 20 00 B7 79 41 OHAYOB LST .キyA 8830 5D 49 5D 49 00 00 0D 74-31 3D 04 00 42 0A 00 00 ]I]I...t1=..B... 8840 41 4F 00 48 00 41 00 59-00 4F 00 0F 00 91 62 00 AO.H.A.Y.O....b. 8850 2E 00 74 00 78 00 74 00-00 00 00 00 FF FF FF FF ..t.x.t......... 8860 4F 48 41 59 4F 42 20 20-54 58 54 20 00 BF 79 41 OHAYOB TXT .ソyA 8870 5D 49 5D 49 00 00 A2 56-F5 3C 05 00 A0 04 00 00 ]I]I..「V.<..... 8880 4F 48 41 59 4F 42 20 20-42 49 4E 20 00 C5 79 41 OHAYOB BIN .ナyA 8890 5D 49 5D 49 00 00 0D 74-31 3D 06 00 7D 00 00 00 ]I]I...t1=..}... 88A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8900 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8910 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8920 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8930 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8940 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8950 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8960 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8970 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8980 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8990 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ |
DIRエリアは通常は1ファイルにつき32バイトが割り当てられています。
32バイトの中身は基本的にはFAT16と同じです([第15回]参照)。
ただクラスタb指定するところが拡張されています。
FAT16では前から27、28バイト目の2バイトだったのですが、FAT32ではそこはクラスタbフ下位16ビットです。
そして上位16ビットのエリアとして、前から21、22バイト目が割り当てられています(下図で赤の四角で囲ったエリア)。
OHAYOB.BTKはクラスタbRにあることがわかります。
それなら次はそのクラスタbRを読んでみましょう。
といきたいところなのですが、上のDIRを見ていて、あれ?というところに気が付いてしまいましたので、ユーザーのデータエリアの確認は次回にすることにしまして、ここでその「あれ?」と思ったことについて書くことにします。
さきほどのFATのところでユーザーズエリアとしては#3〜#6の4クラスタが割り当て済みである、と書きました。
ところが上のDIRエリアを見てみると、それなら32×4=128バイトのはずなのに(8800〜887F)、160バイト(8800〜889F)使われています。
あれ?
1ファイル分多い?
上から見ていきますと、3番目におかしなところがあります。
1番目はOHAYOB.BTKでクラスタ#3です。
2番目はOHAYOB.LSTでクラスタ#4です。
3番目は何だか変です。
4番目はOHAYOB.TXTでクラスタ#5です。
5番目はOHAYOB.BINでクラスタ#6です。
うむむ。
3番目は、はて、なんでしょう?
あれこれさぐっていて、やっと、ああ、そういうことか、と合点しました。
実はこのいくつかのファイルは、テストのためにWindows7のハードディスクに入れてあるファイルを適当にコピーしたものでした。
Windows7のコピー元のフォルダを開いてみましたら、1つだけファイル名が他の3つとは少し異なっていることに気が付きました。
他の3つのファイルは全て大文字ですが、OHAYOb.txtだけは下線部が小文字になっています。
調べてみましたらファイル名としては本来は半角英大文字を使用することになっているのだそうです。
勿論Windowsではファイル名としてカナや漢字も使うことができます。
そこのところをどうやってクリアしているのだろうということなのですが、それが今回気が付いた、はてな?の正体でした。
これはなかなかに複雑なルールのようなのですが、しかし、当マイコン独立大作戦としましては、そのようなルールは規格外ということで扱わないつもりでおります。
ですので細部にわたっての追求は当面は無用ということで概略にとどめます。
つまり、ルール外のファイル名については別の32バイト(またはその複数倍)の名前エリアを設けて、そこでは1文字に16ビットを割り当てることになっているようです。
8840〜885Fのエリアを見てみますと、O H A Y O b t x t の文字コードが16ビットに拡張されています。
そしてその下の8860〜887Fでは、そのファイル名が全て大文字に変換されて、OHAYOB、TXTになっています。
このファイル名の拡張の仕組みは8文字を越えるファイル名(long file name)にも適用されているようです。
しかししかし、上でも書きましたように、そのようなルールは8ビットマイコンでのシステム構築ではオーバーヘッドが増大する要因になりますから、当マイコン独立大作戦としましては、古き良き時代のルールでありますところの、ファイル名は半角英数8文字+拡張子3文字、を堅持したいと思います。
SDカードインターフェースの製作[第31回]
2016.12.11upload
前へ
次へ
ホームページトップへ戻る