2021-05

車載外部ストレージ

【FatFs】車載外部ストレージ その109【ファイル上シミュレーション⑯】

フォルダの中のディレクトリエントリの構成を図解。カレントディレクトリ、親ディレクトリ、LFN→SFNの構成。ファイルの実体が配置されてるクラスタ確認。ここの考え方は通常の「8.3形式」のファイルと同一。該当クラスタのFAT領域に於けるクラスタチェーンを確認。
車載外部ストレージ

【FatFs】車載外部ストレージ その108【ファイル上シミュレーション⑮】

ディレクトリエントリが指し示すフォルダの中のデータはフォルダ内のディレクトリエントリ。つまり入れ子になっている。ルートディレクトリ以外のディレクトリは「.」と「..」の名称のディレクトリが存在。「.」がカレントディレクトリ。「..」が親ディレクトリ。相対PATH用の仕様。
車載外部ストレージ

【FatFs】車載外部ストレージ その107【ファイル上シミュレーション⑭】

ロングファイルネームなフォルダやファイルのディレクトリエントリの関係性を確認。LFNが先に現れ、最後にSFN。VFAT未対応FileSystemはLFNをスキップしてSFNだけを参照している。SFNにフォルダ内のディレクトリエントリの先頭クラスタが埋まっている。
車載外部ストレージ

【FatFs】車載外部ストレージ その106【ファイル上シミュレーション⑬】

ロングファイルネームなフォルダやファイルのディスクイメージ上で確認を試みる。まずはルートディレクトリエントリから。存在するファイルとフォルダが3つのはずだが、ディレクトリエントリとしては5つ存在。5つのうち3つがロングファイルネーム仕様を満たす仕掛け。ファイル名もasciiからUnicodeになってる。
車載外部ストレージ

【FatFs】車載外部ストレージ その105【ファイル上シミュレーション⑫】

FatFsのVFAT仕様確認方法。とりえあず、ロングファイルネームなフォルダとファイルを作成してディスクイメージの中身を確認する方針。FatFs対話モードでフォルダとファイルを作成。「long_file_name_folder」作って、その中に「long_file_name_file.txt」を作成。
車載外部ストレージ

【FatFs】車載外部ストレージ その104【ファイル上シミュレーション⑪】

FATは基本「8.3形式」というファイル命名規則になっている。ファイル名8文字、拡張子3文字。VFAT仕様によりその制限を突破している。VFAT未対応FileSystemからは「long_file_name.txt」が「long_f~1.txt」のような形で見える用にして互換性を確保している。
車載外部ストレージ

【FatFs】車載外部ストレージ その103【ファイル上シミュレーション⑩】

FAT領域の位置確認。FAT領域参照。FAT32の場合、32bit長データを1要素としてクラスタチェーンを表現している。FAT16の場合は16bit長データを1要素としている。基本的には該当クラスタがどのクラスタ番号に繋がるかの数値が埋まっている。0x0fffffffがチェーン終端となる。
車載外部ストレージ

【FatFs】車載外部ストレージ その102【ファイル上シミュレーション⑨】

test.txtの内容のクラスタ位置を確認。ファイルの中身を確認。指定した7000[byte]のデータが並んでいたのを確認。しかし、7000[byte]が並んでいるのたまたま。クラスタの空き方によっては並ぶ保証は無い。FAT領域のクラスタチェーンでクラスタの関係性を表現している。
車載外部ストレージ

【FatFs】車載外部ストレージ その101【ファイル上シミュレーション⑧】

ルートディレクトリエントリを確認。ディレクトリエントリが並んでおり、作成したtest.txt、test2.txtが存在。ファイルの中身の情報はDIR_FstClusHIとDIR_FstClusLOで指定されたクラスタから特定。BPB_RootClusでルートディレクトリエントリのクラスタ番号から特定する。
車載外部ストレージ

【FatFs】車載外部ストレージ その100【ファイル上シミュレーション⑦】

ルートディレクトリエントリを直接特定できるパラメータはない。以下パラメータが必要。PT_System、BPB_RsvdSecCnt、BPB_FATSz32、BPB_NumFATs。MBR、BPB、予約領域、FAT領域を積み上げていくとルートディレクトリエントリの位置が分かる。