2016.12.11
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
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つのファイルは全て大文字ですが、OHAYOtxtだけは下線部が小文字になっています。
調べてみましたらファイル名としては本来は半角英大文字を使用することになっているのだそうです。
勿論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

前へ
次へ
ホームページトップへ戻る