Библиотека FatFS: модуль файловой системы FAT Печать
Перевод сделан Microsin онлайн версия перевода   
FatFs является модулем простой файловой системы FAT (generic FAT file system), предназначенным для маленьких встраиваемых систем на микроконтроллерах (embedded systems). FatFS-module-layersFatFs написан на 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, и он должен быть предоставлен пользователем (в этом собственно и заключается основной процесс портирования на целевую систему). Примеры таких низкоуровневых модулей/драйверов можно найти в разделе Ссылки. Список функций низкоуровневого ввода/вывода:

  • disk_initialize - инициализация диска (disk drive)
  • disk_status - получение состояния диска (disk status)
  • disk_read - прочитать сектор (секторы)
  • disk_write - записать сектор (секторы)
  • disk_ioctl - управление опциями, зависящими от устройства
  • get_fattime - получение текущего времени

Ссылки

Модуль FatFs является свободным программным обеспечением (free software), открытым для целей образования, исследования и разработки. Вы можете его использовать, модифицировать и/или распространять для персональных проектов или коммерческих продуктов под Вашей личной ответственностью и без каких-либо ограничений. Для подробностей обращайтесь к указаниям по применению (application note).

[Ссылки]

1. FatFs Generic FAT File System Module - оригинал статьи на английском языке.
2. Библиотека Petit FatFS: модуль файловой системы FAT.