バックナンバーはこちら。
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」はお試しようのため、自由に書き込みが出来るコマンドにはなっていない。
- 対話モードは複数ファイルは開けない。
バックナンバーはこちら。
コメント