Chan FAT

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:29, 23 июня 2016.
FAT
Полное название File Allocation Table
Содержимое каталога Table
Распределение файлов Linked list
Сбойные блоки Cluster tagging
Limits
Макс. размер тома FAT12: 32 MB (256 MB for 64 KB clusters)
FAT16: 2 GB (4 GB for 64 KB clusters)
FAT32: 2 TB (16 TB for KB sectors)
Макс. размер файла 4,294,967,295 bytes
Макс. количество файлов FAT12: 4,068 for 8 KB clusters
FAT16: 65,460 for 32 KB clusters
FAT32: 268,173,300 for 32 KB clusters
Макс. длина имени файла 8.3 filename, or 255 UCS-2 characters when using LFN
Features
Даты зарегистрирован Modified date/time, creation date/time (DOS 7.0 and higher only), access date (only available with ACCDATE enabled),[1] deletion date/time (only with DELWATCH 2)
Диапазон дат 1980-01-01 to 2099-12-31 (2107-12-31)
Дата резолюции 2 seconds for last modified time,
10 ms for creation time,
1 day for access date,
2 seconds for deletion time
Вилка Not natively
Признаки Read-only, Hidden, System, Volume, Directory, Archive
Разрешения файловой системы FAT12/FAT16: File, directory and volume access rights for Read, Write, Execute, Delete only with DR-DOS, PalmDOS, Novell DOS, OpenDOS, FlexOS, 4680 OS, 4690 OS, Concurrent DOS, Multiuser DOS, System Manager, REAL/32 (Execute right only with FlexOS, 4680 OS, 4690 OS; individual file / directory passwords not with FlexOS, 4680 OS, 4690 OS; World/Group/Owner permission classes only with multiuser security loaded)
FAT32: Partial, only with DR-DOS, REAL/32 and 4690 OS
Прозрачное сжатие FAT12/FAT16: Per-volume, SuperStor, Stacker, DoubleSpace, DriveSpace
FAT32: No
Транспорантное шифрование FAT12/FAT16: Per-volume only with DR-DOS
FAT32: No

Chan FAT - свободно распространяемая версия FAT для микроконтроллеров с поддержкой NAND, NOR, а также длинных имен и коротких имен. (универсальный модуль файловой системы FAT для небольших встраиваемых систем)

Разработчик - ChaN

FatFs является общим FAT / EXFAT модуль файловой системы для малых встраиваемых систем.

Особенности

Microsoft Windows, совместимая файловая система FAT / EXFAT. Платформо-независима. Легко портируется на любую архитектуру. Очень мало места для хранения программного кода и рабочей области.

Возможны различные варианты конфигурации для поддержки:

  • Несколько томов (физических дисков и их разделов).
  • Несколько кодовых страниц ANSI / OEM, включая DBCS.
  • Длинные имена файлов в ANSI / OEM или Unicode.
  • exFAT файловой системы.
  • RTOS envilonment.
  • Фиксированной или переменной размер сектора.
  • Только для чтения, дополнительный API, буфер ввода / вывода и т.д. ...

Как портировать

Основные соображения

Модуль FatFs берет на себя следующие условия на портативности.

  • ANSI C

Модуль FatFs является ПО промежуточного слоя написан на ANSI C (C89). Там нет платформо-зависимости, пока компилятор соответствует ANSI C.

  • Размер целочисленных типов

Модуль FatFs предполагает, что размеры char/short/long, сответственно 8/16/32 бит и INT составляет 16 или 32 бит. Это соответствует определению в integer.h. Это не будет проблемой в большинстве компиляторов. Когда какой-либо конфликт с существующими определениями произойдет, вы должны разрешить его осмотрительно.

Системная организация

Ниже приведена диаграмма зависимостей,которая является типичной,но не конкретная конфигурация для встроенной системы с модулем FatFS

Рис. 1. Диаграмма зависимостей


Рис. 2.
(a) Если рабочий диск модуль с FatFs API предоставляется, не требуется дополнительная функция.
(b) Для того, чтобы присоединить существующие дисковые драйверы с различными API, функции склеивания необходимы для перевода API-интерфейса между FatFs и драйверами.

Какие функции необходимы?

Вам надо предоставить только низкоуровневые функции I/O, которые необходимы для FatFS модуля и ничего более. Если работаючий модуль диска уже существует для целевой системы,то нужно написать только склеивающую функцию,чтобы прикрепить его к модулю FatFS. Если нет,то вам нужно портировать любой другой дисковый модуль или записать его с нуля. Например, функция записи на диск не требуетмя для read-only конфигурации. Следующая таблица показывает какие функции завися от каких конфигурационных опций.

СХ.PNG

Ограничения

  • Тип файловой системы: FAT12, FAT16, FAT32(r0.0) and exFAT(r1.0).
  • Количество открытых файлов: Не ограничено. (Зависит от объема свободной памяти)
  • Количество томов: До 10.
  • Размер тома: До 2 TiB at 512 bytes/sector из-за 32-bit LBA.
  • Размер файла: До 4 GiB - 1 для объема FAT и практически неограниченный для exFAT.
  • Размер кластера: До 128 sector для объема FAT, до 32768 sectors для объема exFAT.
  • Размер сектора: 512, 1024, 2048 and 4096 bytes.

Использование памяти

Использование памяти варьируется в зависимости от конфигурации

Снимок1.PNG

Это использование памяти на некоторых целевых системах с последующим условием. Размеры памяти в байтах, V означает опцию _VOLUMES и F обозначает число открытых файлов.

Сокращение размера модели

Следующая таблица показывает, какие функции API удаляют опции конфигурации для уменьшения размера модуля. Для использования какой-либо функции API, строка функции должна быть чистой.

Снимок3.PNG

Эффективный доступ к файлам

Для получения хорошей пропускной способности для чтения / записи на малых встраиваемых системах с ограниченным объемом памяти, программист должен учитывать, что процесс выполняется в модуле FatFs. Данные файлов тома передается в следующей последовательности с помощью функции f_read.


Рис. 1. Сектор смешенный под чтение (short)

Рис.2 Сектор смешенный под чтение (long) F2.png

Рис.3 Сектор полностью выделенный под чтение Func3.png

Файл I/O представляет собой буфер сектора для чтения/записи части данных о секторе. Буфер секторов - или буфер частного сектора файла на каждом объекте файла или совместно использованный буфер секторов в объекте файловой системы. Буферный параметр конфигурации _FS_TINY определяет, какой буфер секторов используется для передачи данных файла. Когда крошечная буферная конфигурация (1) выбрана, потребление памяти данных уменьшено _MAX_SS байты каждый объект файла. В этом случае модуль FatFs использует только буфер секторов в объекте файловой системы для передачи данных файла и доступа FAT/каталога. Недостаток крошечной буферной конфигурации: данные FAT, кэшируемые в буфере секторов, будут потеряны передачей данных файла, и это должно быть перезагружено на каждой кластерной границе.

Рисунок 1 показывает, что частичный сектор, сектор, неправильно выровненный часть файла, передан через буфер файлового ввода-вывода. При долгой передаче данных, показанной в рисунке 2, середина данных передачи, которые покрывают один или несколько секторов, передана буферу приложения непосредственно. Рисунок 3 показывает, что случай данных передачи entier выровненный к границе сектора. В этом случае буфер файлового ввода-вывода не используется. На прямой передаче максимальная степень секторов считана с функцией disk_read за один раз, но многократная передача сектора разделена на кластерной границе. Поэтому выровненный доступ чтения-записи на секторы устраняет буферизованную передачу данных, и производительность чтения-записи будет улучшена. Помимо эффекта, кэшируемые данные FAT не будут сброшены передачей данных файла в крошечной конфигурации, так, чтобы это могло достигнуть той же производительности как некрошечная конфигурация с небольшим объемом потребляемой памяти.

Обсуждение медиа флеш-памяти

Чтобы максимизировать производительность записи носителей флэш-памяти, таких как SDC, CFC и Диск U, этим нужно управлять с учетом его характеристик.

Использование множественного сектора записи

Пропускная способность записи носителей флэш-памяти становится хуже при единственной транзакции записи сектора. Пропускная способность записи увеличивается как число секторов за транзакцию записи как показано на рисунке. F6.png Этот эффект больше кабанов на более быстрой интерфейсной скорости и отношении производительности часто становится теркой, чем десять. Этот график четко объясняет, как быстро многократная блочная запись (W:16K, 32 сектора), чем единственная блочная запись (W:100, 1 сектор), и также большая карта имеет тенденцию быть медленной в единственной блочной записи. Число транзакций записи также влияет на время жизни носителей флэш-памяти. Когда сравнено в той же сумме данных записи, единственная запись сектора в рисунке 6 выше носит носители флэш-памяти в 16 раз больше, чем многократная запись сектора в рисунке 6 ниже. Единственная запись сектора - симпатичная боль для носителей флэш-памяти.

Прикладной интерфейс

Доступ к файлам

  • f_open - Открыть/создать файл
  • f_close - Закрыть открытый файл
  • f_read - Считывание данных
  • f_write - Запись данных
  • f_lseek - Переместить указатель чтения / записи , Увеличить размер
  • f_truncate - Обрезать размер
  • f_sync - Очистить кэш данных
  • f_forward - Перенаправить данные потока
  • f_expand - Allocate a contiguous block to the file
  • f_gets - Чтение строки
  • f_putc - Записать символ
  • f_puts - Записать строку
  • f_printf - Записать отформатированную строку
  • f_tell - Получить текущий считывания/записи указатель
  • f_eof - Test for end-of-file
  • f_size - Получить размер
  • f_error - Тест на наличие ошибок

Доступ к каталогам

  • f_opendir - Открыть каталог
  • f_closedir - Закрыть открытый каталог
  • f_readdir - Прочитать элемент каталога
  • f_findfirst - Открыть каталог и прочитать первый соответствующий пункт
  • f_findnext - Read a next item matched

Управление Файлами / Каталогами

  • 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 получает доступ к устройствам хранения данных через простой интерфейс, показанного ниже. Модуль управления устройством низкого уровня не является частью модуля FatFs. Это обеспечивается реализатора. Кроме того, примеры реализации для некоторых платформ доступны в загрузки.

  • disk_status - Получить статус устройства
  • disk_initialize - Инициализировать устройство
  • disk_read - Чтение сектора (ов)
  • disk_write - Запись сектора (ов)
  • disk_ioctl - Устройство управления зависимыми функциями
  • get_fattime - Получить текущее время

Примечания

  1. Microsoft (2006-11-15). Windows 95 CD-ROM CONFIG.TXT File Article 135481, Revision: 1.1, retrieved 2011-12-22: "For each hard disk, specifies whether to record the date that files are last accessed. Last access dates are turned off for all drives when your computer is started in safe mode, and are not maintained for floppy disks by default. Syntax: ACCDATE=drive1+|- [drive2+|-]..."

Ссылки

  1. http://elm-chan.org/ - сайт разработчика
  2. http://elm-chan.org/fsw/ff/00index_e.html -