バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFs WinシミュレーションでSDカードに直接制御する話。
今回は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改造
- FatFsでSDカードのFAT認識
- FatFsでファイル書き込みとWindowsでの認識
- FatFsでFAT32フォーマットしてWindowsで認識

方針から考えるのか・・・。

まぁある程度決めてはいるけどねー。
FatFs改造方針

いつも通り、図解でよろしくー。

うむ。
ざっと書いてみた。


思ったよりもシンプルだけど・・・。

DiskIOの下のDeviceIoControlがキモなのかな?
DeviceIoControl

ところでDeviceIoControlって結局なに?

まぁデバイスアクセス用の設定関数的な位置づけにあるAPIだね。

設定?
設定以外はどうするの?

設定以外はWriteFile、ReadFileで読み書きって感じだね。

WriteFile、ReadFileってファイルアクセス用のAPIだよね?
デバイスが関係あるの?

Windowsに限らずの話だけど、
デバイスドライバ経由でデバイス制御する場合、
OS上のアプリケーションはWriteFile、ReadFileを使って通信するんだよね。
有名どころだとRS232CことCOMポートなんか有名どころかな。

あー!
たしかにCOMポートで通信する時にWriteFile、ReadFileを使った気がする。

他のデバイスもデバイスドライバがあることが前提とはなるけど、
同じようにWriteFile、ReadFileでアクセスすることになる。
DeviceIoControlをどうつかうのか?

で、DeviceIoControlで設定って具体的になにするの?

DeviceIoControlにFileSystem関連の制御コードがあったはずなんだよね。
そこを調べてうまくSDカードことリムーバブルディスクの直接制御ができるようにするつもり。

(まだ調べてなかったのか・・・。)

まぁ次回までに調べてFatFsのソースコードを改造しておくよー。
まとめ

まとめだよ。
- FatFs改造方針。
- DeviceIoControl関数を使用する。
- 余談として、ファイルアクセス以外にデバイスアクセスにもReadFile、WriteFileを使用する。
- DeviceIoControlの制御コードにFileSystem関連のものがあるので、これでリムーバブルディスクの直接制御はできそう。
バックナンバーはこちら。
コメント