FatFsをSTM32で使ってみる
出典: Wikimura
FatFsはChaN氏が開発したFATファイルシステムの実装です。他にもいろいろなところの実装があるのですが、FatFsは日本語資料が豊富、開発が継続している、STM32でもサンプルが存在する、などの理由から、利用しやすいと判断しました。
まずはソースをダウンロードし、資料を読んでみます。
FatFsを移植するのに必要なものは?
FatFsはアプリケーション側にFAT操作用の関数をいくつか提供してくれるそうです。これをターゲットのプラットフォームに移植するには、ハードウェアを操作するいくつかの関数を実装する必要があります。
オフィシャルの図にあるように、記憶媒体はHDD・SD・NAND、なんでも良いそうです。バックエンドの関数をしっかり作ってやれば、同じフロントエンドから使えるということだそうです。 そのために実装する必要のある関数は以下の6つだそうです。
- disk_initialize - ディスク・ドライブの初期化
- disk_status - ディスク・ドライブの状態取得
- disk_read - ディスクからの読み込み
- disk_write - ディスクへの書き込み
- disk_ioctl - その他のドライブ制御
- get_fattime - 日付・時刻の取得
これらのテンプレートは、[src/diskio.c]に書かれていました。
物理ドライブとしてATA、MMC、USBがつながっている場合の例が載っていました。
例といっても、具体的なコードのないスケルトンの状態です。
どうやら、ドライブ番号ごとに呼び出す関数を変えるようです。以下のように書かれていました。
DSTATUS disk_initialize ( BYTE drv)
{
DSTATUS stat;
int result;
switch (drv) {
case ATA :
result = ATA_disk_initialize();
return stat;
case MMC :
result = MMC_disk_initialize();
return stat;
case USB :
result = USB_disk_initialize();
return stat;
}
return STA_NOINIT;
}
移植するときは、[src/diskio.h]をインクルードして、バックエンドの関数を実装することが求められているようです。
バックエンドを実装するには?
STM32-P103ボードのSDカードを読み書きしたいので、以下を調べます。これについては「STM32でSPIを使ってみる」に書きます。
- SPIペリフェラルの操作方法
- SPIモードのSDカード操作方法

