バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFs WinシミュレーションでSDカードに直接制御する話。
今回は「FatFsでFAT32フォーマットしてWindowsで認識」。
まずはフォーマット手順の確認。
SDカードをFatFsでフォーマットしてみる。
RAMディスクに対してフォーマットしたことはある。
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でFAT32フォーマットしてWindowsで認識」。
- FatFs改造方針を考える
- FatFs改造
- FatFsでSDカードのFAT認識
- FatFsでファイル書き込みとWindowsでの認識
- FatFsでFAT32フォーマットしてWindowsで認識 ← これの1回目/全2回
![フクさん](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」10アップ.png)
これ・・・本当に大丈夫????
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁ大丈夫でしょー。
物理的に壊れたりはしないし、
フォーマットがおかしくてもWindowsからしたらフォーマットされてないSDカードが刺さってるくらいにしか見えないし。
実は以前にもFatFsでフォーマットはしている
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
実はフォーマット自体は以前、RAMディスクに対してはやってるんだよねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
え?そうだっけ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
RAMディクスは起動直後はまっさらなメモリ空間なんで、
フォーマット処理を書けないとFileSystemとして成立しない。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
なるほど。
過去の記事を確認したらここでやってたね。
FatFs対話モードでのフォーマットコマンド
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
一応、フォーマットコマンドのおさらいをしておこう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
うん。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
コマンドとしては、「fm」コマンドを使用する。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
FatFsのhelp的にはこういう文法になってる。
fm <ld#> [<fs type> [<au size> [<align> [<N fats> [<N root>]]]]] - Create FAT volume
FatFs対話モードでのフォーマットコマンドの各種パラメータ
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ld#は論理ディスク番号で、
fs typeはなんだっけ?
以前やった気がするけど。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
(たしかにデジャヴ)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
FileSystemの指定だね。
以下の定義になってる。
(デジャヴ)
- FAT:0x01
- FAT32:0x02
- exFAT:0x04
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
そして、
au sizeがクラスタサイズで・・・
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
alignは?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
セクタサイズだね。
ここは512byte固定にしておいた方が良いかな。
まぁ指定するのは「au size」までで良いと思うよ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
一応、残りのパラメータも説明だけしておくと、
- N fats:FATテーブル個数、デフォルトは1
- N root:ルートディレクトリエントリの位置
「N root」なんかそうそう指定するパラメータでは無いな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
じゃ、これを元にSDカードをフォーマットしてみるかー。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- SDカードをFatFsでフォーマットしてみる。
- 物理的に壊れることはない。はず。
- RAMディスクに対してフォーマットしたことはある。
- FatFs対話モードのコマンドは「fm」。
- fm <ld#> [<fs type> [<au size> [<align> [<N fats> [<N root>]]]]]
バックナンバーはこちら。
コメント