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

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

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

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

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

FatFsモジュールは、次のファイル操作関数(API)を提供します。つまり、このリストはFatFsにできることをシンプルに示しています。

- f_mount - ワークエリアの登録・削除
- f_open - ファイルのオープン・作成
- f_close - ファイルのクローズ
- f_read - ファイルの読み出し
- f_write - ファイルの書き込み
- f_lseek - リード/ライト・ポインタの移動, ファイルの拡張
- f_truncate - ファイル・サイズの切り詰め
- f_sync - キャッシュされたデータのフラッシュ
- f_opendir - ディレクトリのオープン
- f_readdir - ディレクトリの読み出し
- f_getfree - ボリューム空き領域の取得
- f_stat - ファイル・ステータスの取得
- f_mkdir - ディレクトリの作成
- f_unlink - ファイル/ディレクトリの削除
- f_chmod - ファイル/ディレクトリの属性の変更
- f_utime - ファイル/ディレクトリのタイムスタンプの変更
- f_rename - ファイル/ディレクトリの名前変更・移動
- f_mkfs - ディスクのフォーマット
- f_chdir - カレント・ディレクトリの変更
- f_chdrive - カレント・ドライブの変更
- f_getcwd - カレント・ディレクトリの取得
- f_forward - ファイル・データをストリーム関数に転送
- f_gets - 文字列の読み出し
- f_putc - 文字の書き込み
- f_puts - 文字列の書き込み
- f_printf - 書式化文字列の書き込み

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

FatFsモジュールは、物理ドライブ等へのアクセスのため、下位レイヤに少なくとも次のインターフェースを要求します。使用する記録メディアに対応したディスクI/Oモジュールは、ユーザによって用意される必要があります。OS関連機能を有効にしたときは、加えてプロセス・メモリ関連関数も必要になります。資料にドライバを含むサンプル・プロジェクトあり。

- disk_initialize - ディスク・ドライブの初期化
- disk_status - ディスク・ドライブの状態取得
- disk_read - ディスクからの読み込み
- disk_write - ディスクへの書き込み
- disk_ioctl - その他のドライブ制御
- get_fattime - 日付・時刻の取得

### 資料

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

- FatFsユーザ・フォーラム
- 最初に読め: FatFsモジュール・アプリケーション・ノート
- ダウンロード: サンプル・プロジェクト (AVR, PIC24, LPC2000, H8/300H, SH-2A, V850ES and Win32)
- ARM-Projects by Martin THOMAS (examples for LPC2000, AT91SAM and STM32)
- FATファイル・システム仕様書 by Microsoft (FATの理解・実装に必要な唯一のリファレンス)
- FATファイル・システム概要 (↑を読むためのガイド)
- MMCの使いかた
- パフォーマンス・テスト1 (ATmega64/9.2MHz with MMC via SPI, HDD/CFC via GPIO)
- パフォーマンス・テスト2 (LPC2368/72MHz with MMC via MCI)