【FatFs】車載外部ストレージ その91【メモリ上シミュレーション③】

【FatFs】車載外部ストレージ その91【メモリ上シミュレーション③】 車載外部ストレージ

バックナンバーはこちら。
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はクラスタの繋がりを表現している。
    • これによりファイルサイズの伸縮を実現している。

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

コメント

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