Table)FATは、BPBに続く領域に配置されている。FATが存在するセクタ番号は次のように計算することができる。BPB_FATSz16で計算することができる。FATの例FAT16では、上の例のように16bit(2バイト)で一つの要素になっていて、ユーザファイルの場所(クラスタ番号)を示す連結リストになっている。RDEとFATRDEのFstClusLO(クラスタ番号)は、ファイルの先頭が存在するクラスタ番号を示しており、上の例では0x0002である。これは、ファイルの先頭がクラスタ2に存在することを示している。FATテーブルのクラスタ2には、0x0003と記録されている。これはファイルの続きがクラスタ3に存在することを示している。同様にFATの連結リストをたどっていくと、クラスタ5の0xffffに出会う。0xffffは連結リストの終了を意味している。よって、上の例ではSAMPLE.TXTの格納場所はクラスタ2→クラスタ3→クラスタ4→クラスタ5の順に、4つのクラスタに分かれていることになる。※クラスタ0とクラスタ1は使われていない。ユーザデータ領域はクラスタ2が先頭になるので注意が必要である。ユーザデータユーザデータはRDEに続く領域に位置していて、先頭セクタは次のように計算することができる。BPB_RootEntCntはRDEのサイズ(バイト)である。これをBPB_BytesPerSec(セクタあたりのバイト数)で割ると、BPBに必要なセクタ数になる。ユーザデータは、セクタではなく、クラスタ単位で管理されている。BPB_SecPerClusは1クラスタあたりのセクタ数である。2であれば、1クラスタあたり2セクタである。ユーザデータ領域の先頭はクラスタ2であり、クラスタ0とクラスタ1は存在しない。BPB_SecPerClusである。FirstDataSectorで計算することができる。FATの例(複数のファイル)複数のファイルが存在する場合のRDEとFATを次に示す。FILE4.TXTの4つのファイルが存在している。RDEとFATの抜粋RDEによると、FILE1.TXTはクラスタ2に存在している。FATによると、クラスタ2に続くクラスタは無い。よって、FILE1.TXTはクラスタ2に全て格納されている。クラスタ2は512*2バイトであるが、全てを使用しているのではない。RDEのFileSize分だけが有効なデータとして使われていて、クラスタの残りの部分は空きになっている。同様に、FILE4.TXTはクラスタ6に存在している。FATによると、クラスタ6の次はクラスタ7、クラスタ7の次はクラスタ8、クラスタ8の次はクラスタ9となっている。クラスタ9はクラスタチェーンの最後である。よって、FILE4.TXTはクラスタ6→クラスタ7→クラスタ8→クラスタ9の4つのクラスタに記録されている。FATの例(ファイル削除)ファイルを削除した場合のRDEとFATの変化は以下のようである。削除前のRDE削除前のFATこの状態で、FILE3.TXTを削除する。FILE3.TXTはクラスタ4→クラスタ5に存在しているファイルである。削除後のRDE削除により、RDEのFILE3.TXTのエントリ部分のファイル名の先頭の1文字が0xe5に変化している。ファイル名の先頭が0xe5のとき、このエントリは無効であると判断され、ファイルがルートディレクトリから消える。削除後のFAT削除により、FILE3.TXTが使用していたクラスタ4とクラスタ5のFATは0x0000となり、クラスタは未使用となる。このように、ファイルを削除する場合は、データ自体を消去するのではなく、ディレクトリエントリのファイル名に未使用のマークをし、FATテーブルの該当部分を解放するだけである。次のワークスペースを使い、演習を行う。BPB_FATSz16の各パラメータを抜き出し、表示するプログラムを作成せよ。クラスタ番号、ファイルサイズを抜き出し、表示するプログラムを作成せよ。作成時刻と作成日時は、xx時xx分xx秒、xxxx年xx月xx日のように表示すること。演習3:FATを読み、RDEに登録されているファイルのデータが記録されているクラスタ番号を表示するプログラムを作成せよ。RDEに登録されているファイルそれぞれについて、クラスタ番号を表示する。複数のクラスタが使われている場合は、クラスタチェーンをたどり、すべてのクラスタ番号を表示する。演習4:SDカードに書き込まれている”SAMPLE.TXT”の内容を表示するプログラムを作成せよ。RDEから得たファイルサイズ分だけ表示すること。BuyNowShop.com.。