FatFs является модулем простой файловой системы FAT (generic FAT file system), предназначенным для маленьких встраиваемых систем на микроконтроллерах (embedded systems).
FatFs
написан на ANSI C и полностью разделен по уровням дискового
ввода/вывода диска (disk I/O). Таким образом, модуль полностью не
зависит от аппаратной архитектуры подключения носителя данных (карта
памяти, жесткий диск, FLASH, SDRAM и т. п.) к микроконтроллеру, и может
быть легко портирован на любой микроконтроллер и систему. Модуль хорошо
подходит для микроконтроллеров нижней ценовой категории типа AVR, 8051, PIC, ARM, Z80, 68k
и т. д., и портируется без всяких изменений. Для того, чтобы модуль
заработал, нужно только предоставить низкоуровневый интерфейс ввода
вывода (см. далее, Disk I/O Interface). Модуль Petit FatFs(см. [2]) также доступен как пример реализации такого ввода/вывода для 8-битных микроконтроллеров.
Возможности FatFS
- Поддержка файловой системы, совместимой с FAT Windows.
- Не зависит от платформы. Легко портируется на любую архитектуру.
- Очень малые затраты на код и рабочую область.
- Многочисленные опции конфигурации:
- Поддержка нескольких томов (Multiple volumes) - физических дисков и их разделов.
- Поддержка нескольких кодовых страниц ANSI/OEM, включая DBCS.
- Поддержка длинных имен (Long file name, LFN) в кодировке ANSI/OEM или Unicode.
- Поддержка со стороны операционных систем реального времени (RTOS, например FreeRTOS) и популярных библиотек (LUFA).
- Поддержка нескольких размеров сектора.
- Поддержка Read-only (только чтение), минимизация API, настройка буфера I/O и т. д. ...
- Низкоуровневый код доступа к карте поддерживает как карты стандарта SD, так и SDHC
(причем одновременно). Правда, это не совсем относится к библиотеке
FatFS, так как уровни доступа к носителю памяти разделены, но все равно
упомянуть о поддержке SDHC необходимо, так как это очень полезная и
востребованная возможность.
Интерфейс приложения (Application Interface)
Модуль
FatFs предоставляет набор функций для приложения (API). Другими
словами, в этом списке показано, как через модуль FatFs можно получить
доступ к томам FAT.
- f_mount - регистрация/дерегестрация рабочей области
- f_open - открытие или создание нового файла (Open/Create)
- f_close - закрытие файла (Close)
- f_read - чтение файла (Read)
- f_write - запись в файл (Write)
- f_lseek - перемещение по файлу позиции чтения/записи, увеличение размера файла (Expand file size)
- f_truncate - обрезка файла (Truncate file size)
- f_sync - сброс закешированных данных на физический носитель (Flush cached data)
- f_opendir - открыть директорию/папку (Open a directory)
- f_readdir - прочитать информацию об объекте директории
- f_getfree - получить количество свободных кластеров
- f_stat - получить информацию о состоянии файла (Get file status)
- f_mkdir - создать директорию/папку (Create a directory)
- f_unlink - удалить файл или директорию
- f_chmod - поменять атрибуты
- f_utime - поменять время/дату (Change timestamp)
- f_rename - переименовать/переместить файл или директорию (Rename/Move a file or directory)
- f_chdir - поменять текущую директорию (Change current directory)
- f_chdrive - поменять текущий диск (Change current drive)
- f_getcwd - запросить текущую директорию
- f_forward - перенаправить данные файла напрямую в поток
- f_mkfs - создать файловую систему на диске
- f_fdisk - поделить физический диск на разделы (логические диски)
- f_gets - прочитать строку
- f_putc - записать символ
- f_puts - записать строку
- f_printf - записать форматированную строку
- f_tell - получить текущее значение позиции чтения/записи файла
- f_eof - проверить на окончание данных файла (т. е. дошла ли позиция чтения до конца файла EOF, end-of-file)
- f_size - получение размера файла
- f_error - проверка - были ли ошибки при работе с файлом
Низкоуровневый интерфейс ввода/вывода диска (Disk I/O Interface)
Поскольку
модуль FatFs спроектирован так, что полностью отделен от ввода/вывода
на физический носитель, то для работы он нуждается в нескольких функциях
для доступа к физической памяти, где хранятся данные файловой системы
FAT (physical media). Если разрешена опция, связанная с операционной
системой, то дополнительно нужны функции для работы с процессами/памятью
(process/memory functions). Модуль низкоуровневго ввода/вывода не
является частую модуля FatFs, и он должен быть предоставлен
пользователем (в этом собственно и заключается основной процесс
портирования на целевую систему). Примеры таких низкоуровневых
модулей/драйверов можно найти в разделе Ссылки. Список функций
низкоуровневого ввода/вывода:
Ссылки
Модуль
FatFs является свободным программным обеспечением (free software),
открытым для целей образования, исследования и разработки. Вы можете его
использовать, модифицировать и/или распространять для персональных
проектов или коммерческих продуктов под Вашей личной ответственностью и
без каких-либо ограничений. Для подробностей обращайтесь к указаниям по
применению (application note).
- FatFs User Forum
- Прочитайте в первую очередь: FatFs module application note 6 сентября 2011
- Загрузка (Download): FatFs R0.09 | Обновления | Исправления 14 ноября 2011
- Загрузка (Download): Примеры проектов, использующих FatFs (AVR, PIC24, LPC2300, LPC1700, V850ES, H8/300H, SH-2A, RX62N, Win32 and Generic uC) 18 декабря 2011
- Загрузка (Download): FatFs R0.08b | R0.08a | R0.08 | R0.07e | R0.07c | R0.07a | R0.07 | R0.06 | < R0.06
- Блог Nemui-san (хорошо написанные реализации для STM32F/SDIO и LPC2300/MCI)
- ARM-проекты от Martin THOMAS (примеры для LPC2000, AT91SAM и STM32)
- Спецификация FAT32 от Microsoft (исходная документация на файловую систему FAT)
- Как использовать карты памяти MMC/SDC(cтатья от microsin)
- Benchmark 1 (тестирование скорости) (ATmega64/9.2MHz с MMC через SPI, HDD/CFC через GPIO)
- Benchmark 2 (LPC2368/72MHz с MMC через MCI)
- Видеоролик демо-приложения (этот проект находится в файле ffsample.zip/lpc23xx)
[Ссылки]
1. FatFs Generic FAT File System Module - оригинал статьи на английском языке. 2. Библиотека Petit FatFS: модуль файловой системы FAT. |