# FatFs 汎用FATファイルシステム モジュール

FatFsは小規模な組み込みシステム向けの汎用FAT/exFATファイルシステム モジュールです。ANSI C(C89)準拠でハードウェア アーキテクチャには依存しないので、必要なワーク エリアが確保できれば、8051, PIC, AVR, SH, Z80, 68k, H8, ARMなど安価なマイコンでも使用可能です。このほか、FatFsを極小マイコン向けにシュリンクしたぷちFatFsもあります。

#### FatFsモジュールの特徴

- Windows互換 FAT/exFATファイルシステム
- プラットフォーム非依存
- コンパクトなコードとRAM使用量
- 多くの構成オプション:
  - ボリューム構成(物理ドライブ数・区画)
  - DBCSを含む複数のANSI/OEMコード ページの選択
  - 長いファイル名(LFN)への対応
  - exFATファイルシステムへの対応
  - RTOS環境への対応
  - セクタ サイズ(固定/可変)
  - リード オンリー構成、一部APIの削除、バッファ構成、その他…

### 上位レイヤ インターフェース

- ファイル アクセス
  - f_open - ファイルのオープン・作成
  - f_close - ファイルのクローズ
  - f_read - データの読み出し
  - f_write - データの書き込み
  - f_lseek - リード/ライト ポインタの移動, サイズの拡張
  - f_truncate - サイズの切り詰め
  - f_sync - キャッシュされたデータのフラッシュ
  - f_forward - データをストリーム関数に転送
  - f_expand - 連続領域の割り当て
  - f_gets - 文字列の読み出し
  - f_putc - 文字の書き込み
  - f_puts - 文字列の書き込み
  - f_printf - 書式化文字列の書き込み
  - f_tell - リード/ライト ポインタの取得
  - f_eof - 終端の有無の取得
  - f_size - サイズの取得
  - f_error - エラーの有無の取得
- ディレクトリ アクセス
  - f_opendir - ディレクトリのオープン
  - f_closedir - ディレクトリのクローズ
  - f_readdir - 項目の読み出し
  - f_findfirst - ディレクトリのオープンと最初の検索項目の読み出し
  - f_findnext - 次の検索項目の読み出し
- ファイル/ディレクトリ管理
  - f_stat - ファイル/サブ ディレクトリの存在チェックと情報の取得
  - f_unlink - ファイル/サブ ディレクトリの削除
  - f_rename - ファイル/サブ ディレクトリの名前の変更・移動
  - f_chmod - ファイル/サブ ディレクトリの属性の変更
  - f_utime - ファイル/サブ ディレクトリのタイムスタンプの変更
  - f_mkdir - サブ ディレクトリの作成
  - f_chdir - カレント ディレクトリの変更
  - f_chdrive - カレント ドライブの変更
  - f_getcwd - カレント ディレクトリの取得
- ボリューム管理
  - f_mount - ボリューム ワーク エリアの登録・抹消
  - f_mkfs - 論理ドライブ上にFATボリュームを作成
  - f_fdisk - 物理ドライブ上に複数の論理ドライブを作成
  - f_getfree - ボリュームのサイズと空きサイズの取得
  - f_getlabel - ボリューム ラベルの取得
  - f_setlabel - ボリューム ラベルの設定

### 下位レイヤ インターフェース

FatFsモジュールは、単なるファイルシステム レイヤなので、その下位のストレージ デバイス制御レイヤはそれに含まれません。それぞれのプラットフォームやストレージ デバイスに対応した制御レイヤは、インプリメンタによって提供される必要があります。FatFsモジュールは、下位レイヤに対し標準的には次のインターフェースを要求します。一部の拡張機能、たとえばOS関連機能を有効にしたときは、加えてプロセス/メモリ操作関数なども必要になります。サンプル プロジェクトに下位レイヤの実装例を示します。

- disk_status - デバイスの状態取得
- disk_initialize - デバイスの初期化
- disk_read - データの読み出し
- disk_write - データの書き込み
- disk_ioctl - その他のデバイス制御
- get_fattime - 日付・時刻の取得

### 資料

FatFsモジュールはフリー ソフトウェアとして教育・研究・開発用に公開しています。どのような利用目的（個人利用から商用まで）でも使用・改変・配布について一切の制限はありませんが、全て利用者の責任の下での利用とします。詳しくはアプリケーション ノートを参照してください。

- 最初に読め: FatFsモジュール アプリケーション ノート 2016. 9. 4
- コミュニティ: FatFsユーザ フォーラム
- FATファイルシステム仕様 by Microsoft↗ (The reference document on FAT file system)
- FATファイルシステム概要 (↑を読むためのガイド)
- MMCの使いかた
- FlashAirとFatFs [en]
- Read SD card with FatFs on STM32F4xx devices by Tilen Majerle↗ (Quick and easy implementation for STM32F4-Discovery)
- ねむいさんのぶろぐ↗ (Well written implementations for STM32F/SPI & SDIO and LPC4088/SDMMC)
- ARM-Projects by Martin THOMAS↗ (Examples for LPC2000, AT91SAM and STM32)
- パフォーマンス テスト1 (ATmega1284/20MHz with MMC via USART in SPI, CFC via GPIO)
- パフォーマンス テスト2 (LPC2368/72MHz with MMC via MCI)

FatFsホームページ