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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/

はじめに

FatFsのファイル上シミュレーションの話。
ロングファイルネームなフォルダやファイルをディスクイメージ上で確認する場合の読み方。
フォルダの中のディレクトリエントリ達。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

フォルダの中のディレクトリエントリ

太郎くん
太郎くん

前回は「.」のカレントディレクトリ、「..」の親ディレクトリの話で終わっちゃったから、今回はフォルダ内のディレクトリエントリ全部見ておきたいね。

フクさん
フクさん

とりあえず、「long_file_name_folder」の中のディレクトリエントリの構造を書き出してみた。

long_file_name_folderのディレクトリエントリ、ファイル/フォルダ名情報、.(ascii文字列)※カレントディレクトリ、..(ascii文字列)※親ディレクトリ、long_file_name_file、LFN、SFN、LONG_F~1.TXT(ascii文字列)
太郎くん
太郎くん

考え方はlong_file_name_folderの時と一緒かな?

フクさん
フクさん

そうだね。

太郎くん
太郎くん

DIR_Attrが0x0FだったらLFN仕様ということで、LFN用のディレクトリエントリ構造体で参照。
unicodeでファイル名が埋まってるから、それを参照。
ただし、ファイル名の後方から埋まってる点に注意。
って感じか。

フクさん
フクさん

大正解!

ファイルの中身

太郎くん
太郎くん

ファイルの中身のデータ自体はSFNのディレクトリエントリでクラスタ指定してる感じかな?

フクさん
フクさん

そうだね。
そこら辺の考え方も一緒だね。

太郎くん
太郎くん

今回のSFNの中身は・・・。

long_file_name_fileのディレクトリエントリ、struct DIR_ENTRY_t {  BYTE DIR_Name[11];  BYTE DIR_Attr;  BYTE DIR_NTRes;  BYTE DIR_CrtTimeTenth;  WORD DIR_CrtTime;  WORD DIR_CrtDate;  WORD DIR_LstAccDate;  WORD DIR_FstClusHI;  WORD DIR_WrtTime;  WORD DIR_WrtDate;  WORD DIR_FstClusLO;  DWORD DIR_FileSize; };
太郎くん
太郎くん

DIR_FstClusHIとDIR_FstClusLOからクラスタ8にファイルの中身のデータが配置されてるね。
ルートディレクトリエントリがクラスタ2で0x90000。
1クラスタが4096[byte]。
よって、
0x90000+(8-2)*4096=614400
614400[byte]目参照だ。

フクさん
フクさん

じゃ、ディクスイメージの614400[byte]目を見てみよう。

クラスタ8、0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63 0x63
太郎くん
太郎くん

確か「0x63」こと’c’を16yte書き込んだはずだから、あってそうだね。

フクさん
フクさん

念のため、FAT領域のクラスタチェーンも確認してみよう。

太郎くん
太郎くん

FAT領域は128セクタ目で65536[byte]目だね。
たしか、ここの回で調べた。

太郎くん
太郎くん

そしてクラスタチェーンは・・・。

FAT領域のクラスタチェーン、F8 FF FF FF FF FF FF FF FF FF FF 0F 04 00 00 00 FF FF FF 0F 06 00 00 00 FF FF FF 0F FF FF FF 0F FF FF FF 0F
太郎くん
太郎くん

クラスタ8を見ると0x0fffffffになってるから、1個のクラスタで完結してるってことだ。

フクさん
フクさん

完璧だ!

太郎くん
太郎くん

まぁ見るところが分かってしまえば、それほど難しい構造じゃないよねー。

まとめ

フクさん
フクさん

まとめだよ。

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

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました