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

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

バックナンバーはこちら。
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

FatFsとの対話

太郎くん
太郎くん

んで、前回FatFsをWindows上で起動させたわけだけど、
このコンソール画面は一体なに?

FatFs module test monitor (LFN, CP932, UTF-8)、PD#0
フクさん
フクさん

FatFsのWindowsサンプルは対話式にFatFsを動作させるようになってるんだ。

太郎くん
太郎くん

対話式?

フクさん
フクさん

簡単に言うとコマンドで指示して動作させる感じ。

太郎くん
太郎くん

ほう?

フクさん
フクさん

まずは 「?」 を打ってEnterを押してみな。

FatFsコンソールのヘルプ

太郎くん
太郎くん

あ、なんか出てきた!

[Disk contorls]
 di <pd#> - Initialize disk
 dd [<pd#> <sect>] - Dump a secrtor
 ds <pd#> - Show disk status
 dl <file> - Load FAT image into RAM disk (pd#0)
[Buffer contorls]
 bd <ofs> - Dump working buffer
 be <ofs> [<data>] ... - Edit working buffer
 br <pd#> <sect> <count> - Read disk into working buffer
 bw <pd#> <sect> <count> - Write working buffer into disk
 bf <val> - Fill working buffer
[Filesystem contorls]
 fi <ld#> [<opt>] - Force initialized the volume
 fs [<path>] - Show volume status
 fl [<path>] - Show a directory
 fL <path> <pat> - Find a directory
 fo <mode> <file> - Open a file
 fc - Close the file
 fe <ofs> - Move fp in normal seek
 fE <ofs> - Move fp in fast seek or Create link table
 ff <len> - Forward file data to the console
 fh <fsz> <opt> - Allocate a contiguous block to the file
 fd <len> - Read and dump the file
 fr <len> - Read the file
 fw <len> <val> - Write to the file
 fn <object name> <new name> - Rename an object
 fu <object name> - Unlink an object
 fv - Truncate the file at current fp
 fk <dir name> - Create a directory
 fa <atrr> <mask> <object name> - Change object attribute
 ft <year> <month> <day> <hour> <min> <sec> <object name> - Change timestamp of an object
 fx <src file> <dst file> - Copy a file
 fg <path> - Change current directory
 fj <path> - Change current drive
 fq - Show current directory path
 fb <name> - Set volume label
 fm <ld#> [<fs type> [<au size> [<align> [<N fats> [<N root>]]]]] - Create FAT volume
 fp <pd#> <p1 size> <p2 size> ... - Divide physical drive
 fz [<ld#> <pd#> <pt#>] - Map logical drive to partition
 p <cp#> - Set code page
フクさん
フクさん

これが、FatFsと対話するためのコマンド群だ。

太郎くん
太郎くん

Disk contorls、Buffer contorls、Filesystem contorls
とカテゴリ分けされてるようだけど、
どこから何をやったら良いかわからんな。
あと、パラメータにあるpd#とかld#とかって何のパラメータ??

フクさん
フクさん

pd#は物理ドライブ番号で、
ld#は論理ドライブ番号だな。

太郎くん
太郎くん

物理ドライブ?
論理ドライブ?

物理ドライブと論理ドライブ

フクさん
フクさん

今回に於いては特に物理ドライブ、論理ドライブの切り分けは気にして良いが、
簡単に説明しておこう。
分からなかったら、「物理ドライブ 論理ドライブ」でGoogle検索すれば、
丁寧に説明してくれてるサイトは多いと思うよ。

フクさん
フクさん

物理ドライブはその名通り、物理的なドライブの番号。
論理ドライブは物理ドライブをパーティション分けした場合も含めた番号。
例えば、WindowsとかだとCドライブから始まるが、
物理ドライブをパーティション分けすると、
物理的には同一ドライブだが、
Windowsが認識するドライブとしては
CドライブとDドライブの2つになる。
ってのが論理ドライブだな。

フクさん
フクさん

まぁ今回は物理ドライブ、論理ドライブ共に0番を使用するだけなんで、
とりえあずは気にしなくてもよいよ。

太郎くん
太郎くん

まぁ後で調べておくかー。

FatFsのコマンド呼び出し順序

フクさん
フクさん

大雑把に以下の流れで動作確認しようと思ってる。

  • 物理ドライブへのアクセス初期化
  • FATにフォーマット
  • 論理ドライブマウント
  • volume status参照
  • ルートディレクトリ参照
  • ファイルオープン(生成&書き込みモード)
  • ファイルへの書き込み
  • ファイルクローズ
  • ルートディレクトリ参照
  • ファイルオープン(読み込みモード)
  • ファイル読み出し
  • ファイルクローズ
太郎くん
太郎くん

いきなりfopenとかfwriteとかができるのかと思ってたけど、
フォーマット、マウントとかが事前に必要なのか。

フクさん
フクさん

まぁRAM上に展開されたメモリ空間にFATを構築するんで、
起動直後はまっさらな状態なんだよね。
というわけで事前処理的に必要になる。

太郎くん
太郎くん

なるほど。

フクさん
フクさん

次回、上記手順で実際動かしてみよう。

まとめ

フクさん
フクさん

まとめだよ。

  • FatFsと対話するためのコマンド群がある。
    • 「?」でhelpが確認できる。
  • パラメータ指定に物理ドライブと論理ドライブの指定があるので注意。
  • ファイルアクセスの前にフォーマットやマウントなどの処理が必要。
  • 上記が済めば、一般的なファイルアクセスAPIが使用できる。

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

コメント

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