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

マイコン独立大作戦
SDカードインターフェースの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
そして作戦その3は、SDカードインターフェースです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第13回]


●BPB(Bios Parameter Block)

前回改良したSDカードテストプログラムを実行して読み出したセクタbWBはパーティションブロックの先頭に置かれているセクタで、そのパーティションの基本情報が書かれています。
このセクタのことをBPB(Bios Parameter Block)と言います。
SDカードの先頭のセクタbOも良く似た名前がついていて、そちらのほうはMBR(Master Boot Record)です。
MBRにはそのディスクドライブの全体の基本情報が書かれていて、[第11回]で書きましたように、最大4個まで配置できるパーティションについて、FAT種別、パーティションの開始セクタbニパーティションに含まれるセクタ数などが書かれていました。
BPBはそのパーティションのさらに詳しい情報が書かれています。
下は前回読み出したセクタbWB(BPB)です。

>dm 8800,89ff
8800  EB 00 90 20 20 20 20 20-20 20 20 00 02 40 01 00  ...        ..@..
8810  02 00 02 00 00 F8 EA 00-3F 00 40 00 8B 00 00 00  ........?.@.....
8820  75 57 3A 00 80 00 29 F8-4E 16 90 4E 4F 20 4E 41  uW:...).N..NO NA
8830  4D 45 20 20 20 20 46 41-54 31 36 20 20 20 00 00  ME    FAT16   ..
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 55 AA  ..............Uェ
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Mon Nov 07 21:28:53 2016

これからBPBを読み解きますが、このままでは読みにくいので、先頭のデータがある部分だけ取り出して、下のように番号をつけて示しました。



1)3バイト EB 00 90
先頭の3バイトはブートのためのジャンプ命令でブート可能かどうかに関わらず、必ずEBで始まる3バイトが書かれていなければならないようです。
2)8バイト 20 20 20 20 20 20 20 20
システム名のエリアでMSDOS5.0と書かれていることが多いようですが、このSDカードには何も書かれていません(Windowsでフォーマットすると、MSDOS5.0と書かれるようです)。
3)2バイト 00 02
セクタのバイト数。0200H(512)バイト。
4)1バイト 40
クラスタのセクタ数。40H(64)。ディスクの管理はセクタ単位ではなくて、クラスタという単位で行なわれます。通常は1クラスタの大きさは64セクタです。
5)2バイト 01 00
このBPBを含む予約セクタの数。ここが1の時は次のセクタにFATがあります。
6)1バイト 02
FATの数。通常は同じFATが2個あります(1個は予備?)。
7)2バイト 00 02
ディレクトリに記述できる最大ファイル数。通常は0200H(512)。
8)2バイト 00 00
サイズの大きいディスクでは使われません。
9)1バイト F8
ディスク種別 F8:固定 F0:リムーバル。SDカードはリムーバルのように思えますが、固定ディスクとして扱われています。
10)2バイト EA 00
1個のFATのサイズ(セクタ数)。00EAH(234)セクタ。FATは2個あるので、このSDカードの場合、FATは合計して468セクタになります。
11)2バイト 3F 00
古い情報。今は使われません。
12)2バイト 40 00
古い情報。今は使われません。
13)4バイト 8B 00 00 00
MBRからBPBまでのセクタ数。
14)4バイト 75 57 3A 00
このディスクの総セクタ数。003A5775H(3823477)セクタ。
15)1バイト 80
ドライブ番号。80:固定ディスク 00:リムーバルディスク。
16)1バイト 00
予約。
17)1バイト 29
拡張識別子。29:次の3つのエリアが存在することを示します。
18)4バイト F8 4E 16 90
ランダムなボリュームシリアル番号。
19)11バイト
ボリューム名。無いときはNO NAMEにします。
20)8バイト
FATの種別を示す文字列が入ります。

ここから後ろにはブートプログラムが入ります。
無いときは00にします。
最後の2バイトは識別情報 55 AA です。

次回は上記の情報からFATセクタとディレクトリセクタの位置を算出して、それぞれを読み出してみることにします。

SDカードインターフェースの製作[第13回]
2016.11.10upload

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