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

小規模な組み込みシステム向けの汎用FATファイルシステム・モジュールです。ANSI C準拠でハードウェア・アーキテクチャには依存しないので、必要なワーク・エリアが確保できれば、8051, PIC, AVR, H8, Z80などほとんどの8ビット・マイコンでそのまま使用可能です。いろいろな使用形態を考慮して、高機能版（FatFs）と省メモリ版（Tiny-FatFs）の2通りを作成してみました。

#### FatFsの特徴

1. ファイル・システム用とファイルI/O用バッファを分離し、複数ファイルの高速アクセスに適する
2. 複数のドライブ・パーテーションをサポート
3. FAT12, FAT16(+FAT64), FAT32に対応 (FAT64: FAT16 in 64KB/cluster)
4. 8.3形式ファイル名とNT小文字フラグに対応(LFN未対応)
5. FDISKフォーマットおよびSFDフォーマットに対応
6. 8/16ビットマイコン向けにコードを最適化

#### Tiny-FatFsの特徴(FatFsとの相違)

1. RAMの使用量を削減し、小メモリ・システム(RAM:1KB)にも対応
2. 単一ドライブのみサポート

### 上位レイヤI/F

FatFs/Tiny-FatFsモジュールは、次のファイル操作関数を提供しています。

- f_mount - ワークエリアの登録・削除
- f_open - ファイルのオープン・作成
- f_close - ファイルのクローズ
- f_read - ファイルの読み込み
- f_write - ファイルの書き込み
- f_lseek - ファイルR/Wポインタの移動
- f_sync - キャッシュされたデータのフラッシュ
- f_opendir - ディレクトリのオープン
- f_readdir - ディレクトリの読み出し
- f_getfree - ディスク空き領域の取得
- f_stat - ファイル・ステータスの取得
- f_mkdir - ディレクトリの作成
- f_unlink - ファイルまたはディレクトリの削除
- f_chmod - ファイルまたはディレクトリ属性の変更
- f_rename - ファイルまたはディレクトリの名前変更・移動
- f_mkfs - ディスクのフォーマット

### 下位レイヤI/F

FatFs/Tiny-FatFsモジュールは、物理ドライブへのアクセスや現在時刻を得るため、下位レイヤに次のインターフェースを要求します。これらのインターフェースを持つそれぞれの記録メディアに対応したディスクI/Oモジュールは、ユーザにより用意する必要があります。（サンプルもあり）

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

### 資料

FatFs/Tiny-FatFsモジュールはフリー・ソフトウェアとして教育・研究・開発用に公開しています。どのような利用目的（個人・非商用・商用）でも使用・改変・配布について一切の制限はありませんが、全て利用者の責任の下での利用とします。

- FatFsホームページ
- FatFsモジュール・アプリケーション・ノート
- パフォーマンス・テスト（テスト・ボード：ATmega64/9.2MHz with MMC/HDD/CFC）
- FAT32仕様書 (Microsoft)
- MMCの使いかた