バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFsのメモリ上シミュレーションの話。
今回は対話モードでいろいろ触って、ファイルシステムの構築とstatusの確認。
FatFsでファイルアクセス前の準備の部分を実施の話で、
アクセス初期化、フォーマット、マウント、volume statusの確認をしてみる。
あとAllocation Tableのクラスタについても簡単に説明。
これに伴いファイルがファイルらしい振る舞いを・・・。
登場人物
博識フクロウのフクさん

イラスト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
FatFsとの対話の流れ

前回、話した流れをざっと試してみよう。

確か、この流れだったね。
- 物理ドライブへのアクセス初期化
- FATにフォーマット
- 論理ドライブマウント
- volume status参照
- ルートディレクトリ参照
- ファイルオープン(生成&書き込みモード)
- ファイルへの書き込み
- ファイルクローズ
- ルートディレクトリ参照
- ファイルオープン(読み込みモード)
- ファイル読み出し
- ファイルクローズ

そうそう。
物理ドライブへのアクセス初期化

まずは物理ドライブへのアクセス初期化。
コマンドとしては「di」を使う
>di 0
rc=0
Sector size = 512
Number of sectors = 276480

引数の0が物理ドライブ番号だね。

Sector size = 512
Number of sectors = 276480
ってのは512byte単位で276480個にアクセスできるってことかな?

そうだね。
512*276480=141557760=135[Mbyte]
で
135[Mbyte]のディクスイメージの空間がメモリ内に確保されてることになる。
FATにフォーマット

次は、FATでフォーマットする。
コマンドは「fm」を使う。
>fm 0 2
The volume will be formatted. Are you sure? (Y/n)=Y
rc=0 FR_OK

一個目の引数は論理ドライブ番号で、
2つ目はなんだ?
helpだと<fs type>ってなってるけど。

FileSystemの指定だね。
以下の定義になってる。
- FAT:0x01
- FAT32:0x02
- exFAT:0x04

と言うことは今回はFAT32でフォーマットしたってことだね。
論理ドライブマウント

次にマウントする。
コマンドは「fi」になる。
>fi 0
rc=0 FR_OK

ここも論理ドライブ番号を指定だね。
volume status参照

次にフォーマットの状態を確認するために
volume statusを参照する。
コマンドとしては「fs」を使用する。
>fs 0:
FAT type = FAT32
Cluster size = 2048 bytes
Sectors/FAT = 540
Number of FATs = 1
Number of clusters = 68960
Volume start sector = 63
FAT start sector = 100
Root DIR start cluster = 2
Data start sector = 640
No volume label
Volume S/N is 5281-9BA5
...
0 files, 0 bytes.
0 folders.
4210110 KiB total disk space.
137918 KiB available.

FAT typeがFAT32だからフォーマット時に指定したものであってるね。

Sectors/FATってなんだろ?

それは、FATことFile Allocation Tableで使用しているセクタ数だね。
540*512=276480=270[Kbyte]
270[Kbyte]の空間にFATを展開しているようだ。

File Allocation Tableって?

一言でいうと、「ファイル割当て表」だな。
書き込み単位はクラスタって単位で決定するのだけど、
FATの先頭からどのクラスタがどのクラスタへ繋がってるかをテーブルで表現している。
この動的な繋がりの表現でファイルサイズの伸縮を実現している。

ようわからんが、
ファイルサイズの伸縮に重要なところってのはわかった。

今の時点ではその認識でOKだ。

(「今の時点では」って表現が引っかかるな・・・。)

とりえあず、ファイルアクセスの前準備までは終わったから、
次回は実際にファイルの生成、書き込み、読み取りだな。
まとめ

まとめだよ。
- FatFsでファイルアクセス前の準備の部分を実施。
- 物理ドライブへのアクセス初期化。
- FATにフォーマット。
- 論理ドライブマウント。
- volume status参照。
- FATことFile Allocation Tableはクラスタの繋がりを表現している。
- これによりファイルサイズの伸縮を実現している。
バックナンバーはこちら。
コメント