バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFs WinシミュレーションでSDカードに直接制御する話。
今回はFatFs改造方針を考える回。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
実験手順
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
前回提示した実験手順。
- FatFs改造方針を考える
- FatFs改造
- FatFsでSDカードのFAT認識
- FatFsでファイル書き込みとWindowsでの認識
- FatFsでFAT32フォーマットしてWindowsで認識
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
方針から考えるのか・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
まぁある程度決めてはいるけどねー。
FatFs改造方針
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
いつも通り、図解でよろしくー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
うむ。
ざっと書いてみた。
![FatFS、FileSystem、DiskIO、DeviceIoControl、読み書き実施、SDHC、WindowsAPIを駆使してSDを直接制御](https://www.simulationroom999.com/blog/wp-content/uploads/2021/05/02_FatFs改造方針-1024x576.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
思ったよりもシンプルだけど・・・。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
DiskIOの下のDeviceIoControlがキモなのかな?
DeviceIoControl
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ところでDeviceIoControlって結局なに?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁデバイスアクセス用の設定関数的な位置づけにあるAPIだね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
設定?
設定以外はどうするの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
設定以外はWriteFile、ReadFileで読み書きって感じだね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
WriteFile、ReadFileってファイルアクセス用のAPIだよね?
デバイスが関係あるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
Windowsに限らずの話だけど、
デバイスドライバ経由でデバイス制御する場合、
OS上のアプリケーションはWriteFile、ReadFileを使って通信するんだよね。
有名どころだとRS232CことCOMポートなんか有名どころかな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あー!
たしかにCOMポートで通信する時にWriteFile、ReadFileを使った気がする。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
他のデバイスもデバイスドライバがあることが前提とはなるけど、
同じようにWriteFile、ReadFileでアクセスすることになる。
DeviceIoControlをどうつかうのか?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
で、DeviceIoControlで設定って具体的になにするの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
DeviceIoControlにFileSystem関連の制御コードがあったはずなんだよね。
そこを調べてうまくSDカードことリムーバブルディスクの直接制御ができるようにするつもり。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
(まだ調べてなかったのか・・・。)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
まぁ次回までに調べてFatFsのソースコードを改造しておくよー。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- FatFs改造方針。
- DeviceIoControl関数を使用する。
- 余談として、ファイルアクセス以外にデバイスアクセスにもReadFile、WriteFileを使用する。
- DeviceIoControlの制御コードにFileSystem関連のものがあるので、これでリムーバブルディスクの直接制御はできそう。
バックナンバーはこちら。
コメント