マイコン独立大作戦
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
前へ
次へ
ホームページトップへ戻る