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

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

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

フクさん
フクさん

前回はファイル生成、書き込みで「ファイルクローズ」まで試した。

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

今回は、ファイル読み込みの「ルートディレクトリ参照」からだね。

ルートディレクトリ参照

フクさん
フクさん

これは前回説明した、flコマンド。

>fl 0:
----A 2021/04/01 19:30         16  test.txt
   1 File(s),         16 bytes total
   0 Dir(s),   141225984 bytes free
太郎くん
太郎くん

お!
前回、ファイル生成したから、
test.txtってファイルが出来てるね。
しかも16byte書き込みしたからサイズもちゃんと16byteになってる。

ファイルオープン(読み込みモード)

フクさん
フクさん

ファイルオープンは前回説明したfoコマンド。
ただし、今回は読み取りモードでopenする。
一応、前回貼ったFatFsで定義されてるmodeを貼っておこう。

#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
太郎くん
太郎くん

読み取りモードだから、FA_READで、「1」を指定すればいいんだね。

>fo 1 test.txt
rc=0 FR_OK

ファイル読み出し

フクさん
フクさん

次にファイルの読み出しだが、
コマンドといては「fr」・・・
と見せかけて「fd」ってコマンドを使う。

太郎くん
太郎くん

「fr」ってコマンドは使えないの?
helpには載ってた気がするけど?

フクさん
フクさん

対話モードのfrコマンドはファイルの参照位置を進めるだけで
読み出した情報を表示してくれないんだ。
ファイルの中身を参照する場合は「fd」コマンドを使用する必要がある。
って感じだ。

>fd 16
00000000: 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 aaaaaaaaaaaaaaaa
太郎くん
太郎くん

お。
前回書き込んだ16byteの0x61が読み出せたっぽい。
ちゃんとファイルっぽい動作してるね!

フクさん
フクさん

まぁFileSystemだからねー。

ファイルクローズ

フクさん
フクさん

これも前回説明したfcコマンド

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

ここは特に差はなさそうだねー。

感想

フクさん
フクさん

というわけで、対話モードでFatFsを触ってみたわけだが、
感想としてはどう?

太郎くん
太郎くん

最初の方の物理ドライブアクセス初期化、論理ドライブへマウントあたりが
「え?!」
って思ったけど、そこら辺が済めばあとは普通のファイルアクセスと一緒なんだなーって感じだった。

フクさん
フクさん

まぁFatFs自体がC言語のファイルアクセス系の仕様に寄せてくれてるからねー。
よって、理解し易いし、分かり易い。

今後の方針

太郎くん
太郎くん

で、この後はどうするの?

フクさん
フクさん

折角シミュレーションしてるわけだから、
FAT FileSystemの中を追っていこうかと思ってる。

太郎くん
太郎くん

追うって、ソースコードを?

フクさん
フクさん

必要があれば、ソースコードも追うかもしれないが、
基本はディスクイメージの中を見ていく感じかな?

太郎くん
太郎くん

ディスクイメージの中って見れるの?

フクさん
フクさん

一応、「dd」ってコマンドがあって、
これを使うとディスクイメージが見れる。

>dd 0 63
PD#:0 LBA:63
00000000: EB FE 90 4D 53 44 4F 53 35 2E 30 00 02 04 25 00 ...MSDOS5.0...%.
00000010: 01 00 00 00 00 F8 00 00 3F 00 FF 00 3F 00 00 00 ........?...?...
00000020: C1 37 04 00 1C 02 00 00 00 00 00 00 02 00 00 00 .7..............
00000030: 01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000040: 80 00 29 A5 9B 81 52 4E 4F 20 4E 41 4D 45 20 20 ..)...RNO NAME
00000050: 20 20 46 41 54 33 32 20 20 20 00 00 00 00 00 00   FAT32   ......
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000001A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000001B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000001C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000001D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000001E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000001F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA ..............U.
太郎くん
太郎くん

なんかそれっぽいデータが出てきた!

フクさん
フクさん

とはいえ、512byteずつでしか参照できないんでちょっと使い勝手が悪いんだよねー。
それに、メモリ上にディスクイメージを構築してるんで、再起動すると消えちゃうし。

太郎くん
太郎くん

じゃー、どうするの?

フクさん
フクさん

今はメモリ上にディスクイメージを構築しているが、
これをファイル上に構築して、
それをバイナリエディアで見た方が追いやすいって思ってる。

太郎くん
太郎くん

そういうば、以前そういうこと言ってたねー。

太郎くん
太郎くん

で、実現はできそうなの?

フクさん
フクさん

まぁメモリに対して読み書きしているのをファイルに対して実施するだけだからたぶん大丈夫なんじゃない?

太郎くん
太郎くん

(うーん、結果的にはなんとななること多いからあまり心配はしてないが、割と楽観的なんだよなー。)

フクさん
フクさん

というわけで、次回からFatFsのディスクアクセス部分を改造してディスクイメージをファイルにする方向で進める!

まとめ

フクさん
フクさん

まとめだよ。

  • ファイル読み取りのコマンド呼び出しの流れは書き込み時と一緒。
    • オープン時のmode指定を読み取りmodeにする。
  • ddコマンドでディスクイメージをdumpできる。
    • 512byte単位なので若干使い勝手は悪い。
  • 次回からメモリ上でなく、ファイル上にディスクイメージを構築できるようチャレンジ。

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

コメント

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