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

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

バックナンバーはこちら。
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との対話の流れ

フクさん
フクさん

とりあえず、前回は「volume status参照」まで試したところだ。

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

今回は「ルートディレクトリ参照」からだね。

ルートディレクトリ参照

フクさん
フクさん

ディレクトリ参照のコマンドは「fl」になる。

>fl 0:
   0 File(s),          0 bytes total
   0 Dir(s),   141228032 bytes free
太郎くん
太郎くん

ん?
引数の「0:」って?
0は論理ドライブ番号だと思うけど?

フクさん
フクさん

flの引数はpathになるんだよ。
Windowsとかだと「C:」って指定する感じで「0:」って指定している。

太郎くん
太郎くん

あーなるほど。
そういう意味か。

太郎くん
太郎くん

表示された情報としては、
まっさらな状態だからファイルもディレクトリも無いって状態だね。

ファイルオープン(生成&書き込みモード)

フクさん
フクさん

さあ、いよいよファイルアクセスだ。

太郎くん
太郎くん

待ってましたー!

フクさん
フクさん

使用するコマンドは「fo」
所謂fopenをしてくれるコマンドだ。

>fo 6 test.txt
rc=0 FR_OK
太郎くん
太郎くん

「test.txt」はopenするファイル名だと思うけど、
その前の「6」はなんだ?

フクさん
フクさん

ファイルオープン時のmodeだね。

太郎くん
太郎くん

mode?
もしかして、読み/書き/追記とかの?

フクさん
フクさん

そうそう。
FatFsでは以下のように定義されている。

#define	FA_READ			0x01
#define	FA_WRITE		0x02
#define	FA_OPEN_EXISTING	0x00
#define	FA_CREATE_NEW		0x04
#define	FA_CREATE_ALWAYS	0x08
#define	FA_OPEN_ALWAYS		0x10
#define	FA_OPEN_APPEND		0x30
太郎くん
太郎くん

あれ?
今回指定した「6」ってのが無いよ???

フクさん
フクさん

これらの番号はビットアサインになってて、
「6」ってことは
FA_CREATE_NEW
且つ
FA_WRITE
ってことになる。

太郎くん
太郎くん

なるほど。
ファイルが存在しないから
ファイルを作りつつ書き込みモードにしてるってことか。

ファイルへの書き込み

フクさん
フクさん

次はファイルへの書き込み。
コマンドは「fw」

>fw 16 0x61
16 bytes written.
太郎くん
太郎くん

これは・・・なにをしたんだ?

フクさん
フクさん

「0x61」を16byte分書き込んだ。

太郎くん
太郎くん

え?
そういう指定の仕方になるの??

フクさん
フクさん

あくまで対話モードのコマンドの仕様としてそうなってるってだけだね。
APIレベルだと一般的なfwriteと同様にいろいろデータを書き込みできる。
書き込みテストをするためだけのコマンドってことだね。

太郎くん
太郎くん

なんだ。
ちょっとびっくりした。

太郎くん
太郎くん

でも、16byteの書き込みは成功したようだね。

ファイルクローズ

フクさん
フクさん

そしてfclose相当のコマンドが「fc」

>fc
rc=0 FR_OK
太郎くん
太郎くん

特に引数とか無いんだ。

フクさん
フクさん

対話モードの時は一度に開くファイルの数は一個になってて、
foで指定したopenしたファイルがそのまま次のコマンドでも反映されるようだ。
さっきのfwも特にファイル名とかファイルポインタとか指定しなかったのはそのせい。

太郎くん
太郎くん

そういえば、fwの時もそれっぽい引数はいなかったね。
これでFileSystemにファイルが保存されたわけか。

フクさん
フクさん

次回は、これを読み出して、内容の確認だな。

まとめ

フクさん
フクさん

まとめだよ。

  • flコマンドでルートディレクトリ参照。
    • 引数はpathなので「0:」のような表現になる。
  • ファイルオープン時にmode指定。
    • modeはビットアサインになってる。
  • ファイルへの書き込みコマンド「fw」はお試しようのため、自由に書き込みが出来るコマンドにはなっていない。
  • 対話モードは複数ファイルは開けない。

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

コメント

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