Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2740
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

25. Файловая система FAT

Электронные встроенные устройства становятся все более сложными, и сегодня достаточно часто встречаются устройства, которым необходимо считывать и хранить структурированные данные. К примеру, рассмотрим устройство с выходом в Интернет, которое должно обслуживать HTTP-запросы и передавать HTML-файлы. Если HTMLстраницы не являются слишком простыми, этому устройству потребуется способ обработки нескольких отдельных HTML-файлов, а также CSS-стилей и файлов JavaScript. По этой причине многим разработчикам встраиваемых систем необходим способ для работы со структурированными файловыми системами в своих приложениях.

ST интегрировала в свой CubeHAL широко известную библиотеку для управления файловыми системами FAT (FAT12, FAT16 и FAT32): библиотеку FatFs от Чана1. Это библиотека, специально разработанная для встроенных систем с ограниченным объемом SRAM и Flash-памятью. Она действительно популярна и доказала свою надежность.

В данной главе дается краткое введение в эту библиотеку промежуточного программного обеспечения. В ней описывается, как использовать CubeMX для генерации проекта, интегрирующего ее, и как разрабатывать приложения, основанные на этой полезной библиотеке. Более того, мы увидим, как взаимодействовать с SD-картами через интерфейс SPI, который представляет собой наиболее распространенный способ использования карт памяти с недорогими микроконтроллерами встроенных систем.

25.1. Введение в библиотеку FatFs

Таблица размещения файлов (File Allocation Table, FAT) – это архитектура файловой системы, разработанная Microsoft в начале 1980-х и используемая в качестве официальной файловой системы для операционных систем MS-DOS и Windows до выпуска Windows NT 3.1. Файловая система FAT была заменена более продвинутой NTFS, которая предлагает улучшенную поддержку метаданных и использование расширенных структур данных для повышения производительности, надежности и использования дискового пространства, а также дополнительных расширений, таких как списки управления безопасным доступом (т. е. права доступа к файлам) и журналирование файловой системы.

Благодаря своей простоте и надежности, файловая система FAT по-прежнему широко используется в USB-накопителях, Flash-памяти и других твердотельных картах памяти и модулях, таких как SD-карты, а также на многих портативных и встроенных устройствах. Технически термин «файловая система FAT» относится ко всем трем основным вариантам файловой системы: FAT12, FAT16 и FAT32. Эти числа, по существу, указывают, сколько битов используется для адресации кластеров (clusters) файловой системы

– непрерывных областей дискового пространства. Чем больше кластеров может обрабатывать файловая система, тем больше байт может быть использовано. По этой причине FAT32 в настоящее время является наиболее часто используемой файловой системой на больших твердотельных и съемных запоминающих устройствах. Диск, а также

1 http://www.elm-chan.org/fsw/ff/00index_e.html

Файловая система FAT

700

твердотельная память, инициализированная файловой системой FAT, могут иметь произвольное количество разделов.

FatFs – это действительно оптимизированная по размеру2 библиотека, которая предоставляет следующие функции:

Поддерживает файловые системы FAT12, FAT16, FAT32 (r0.0) и exFAT (r1.0).

Допускает неограниченное количество открытых файлов (единственным ограничением является доступная память SRAM).

Поддерживает до 10 томов, каждый размером до 2 ТиБ по 512 Байт/сектор.

Каждый файл может расти до 4 ГиБ на томе FAT и практически неограниченно на томе exFAT.

Кластер занимает до 128 секторов на томе FAT и до 16 МиБ на томе exFAT.

Поддерживает 4 разных размера сектора: 512, 1024, 2048 и 4096 Байт.

Библиотека FatFs предоставляет до 37 API-функций, и они могут быть выборочно отключены с помощью нескольких конфигурационных макросов. Фактически, для уменьшения занимаемого объёма Flash-памяти можно отключить ненужную функциональность. Библиотека FatFs написана на чистом ANSI C и полностью абстрагирована от нижележащих аппаратных средств. Официальная библиотека не предоставляет никакой поддержки для специализированных устройств памяти, и пользователь сам может реализовать необходимую прослойку для взаимодействия с аппаратной частью.

Рисунок 1: Как библиотека FatFs взаимодействует с нижележащими аппаратными средствами

2 Для полноты картины следует отметить, что этот же автор создал еще меньшую версию библиотеки

FatFs, названную Petit FatFs (http://www.elm-chan.org/fsw/ff/00index_p.html), которая лучше всего подходит для 8-разрядных микроконтроллеров. По сути, она реализует подмножество основной библиотеки FatFs.

Файловая система FAT

701

Инженеры ST интегрировали библиотеку FatFs в CubeHAL. Они разработали необходимые адаптеры для использования библиотеки FatFs со следующими устройствами:

SD карты памяти, использующие периферийное устройство SDIO: Безопас-

ный цифровой ввод-вывод (Secure Digital Input Output, SDIO) – это расширение спе-

цификации SD, которое охватывает функции ввода-вывода, связанные с SD- и MMC-картами. Более продвинутые микроконтроллеры STM32, такие как некоторые STM32F4 (например, STM32F401RE) и микроконтроллеры STM32F7, предоставляют эту специализированную периферию. Интерфейс SDIO может быть сконфигурирован для работы в 1-битном режиме (то есть обмен данными с SD производится с использованием лишь одного порта выходных данных, называемого DO, плюс два дополнительных I/O для тактирования и передачи команд) или для работы в 4-битном режиме (то есть данные передаются с использованием 4 специализированных I/O в дополнение к тактирующей и командной линиям). Это самый быстрый способ использования SD-карт, позволяющий достигнуть максимальной скорости передачи данных в 50 МГц в высокопроизводительных микроконтроллерах STM32.

Статическая и динамическая ОЗУ: два отдельных низкоуровневых драйвера для SDRAM и SRAM памятей позволяют создавать файловые системы в ОЗУ. Эти два драйвера работают в сочетании с контроллерами FMC и FSMC. Они позволяют инициализировать RAM-диски, и эта возможность особенно полезна, когда производительность критически важна для вашего приложения (SRAM намного быстрее, чем энергонезависимая память).

USB-диски: специальный драйвер, созданный на основе библиотеки USB от ST, позволяет создавать хост-устройства USB, поддерживающие класс устройств Mass Storage Class (MSC) (то есть устройства, которые могут взаимодействовать с USBдисками).

На рисунке 1 показана связь между библиотекой FatFs и CubeHAL. К сожалению, инженеры ST до сих пор не разработали драйвер для SD-карт при работе по SPI. Фактически, SD-карты разработаны для поддержки, помимо других протоколов, команд обмена через шину SPI. Тем не менее, я подготовил полный SPI-совместимый драйвер SD-карт, который представлю вам позже.

Чтобы интегрировать библиотеку FatFs с устройством памяти, нам необходимо реализовать следующие шесть процедур:

disk_initialize(): данная процедура содержит весь необходимый код для иници-

ализации аппаратной части. Например, для SD-карты, работающей по SPI, эта процедура должна содержать весь необходимый код для инициализации интерфейса SPI и для перевода SD-карты в режим SPI (существует специальная процедура, которой необходимо следовать, как описано на веб-сайте Чана3).

disk_status(): данная функция используется библиотекой для получения инфор-

мации о состоянии устройства (например, инициализировано ли оно и т. д.).

disk_read():данная процедура используется для получения заданного количества

секторов из устройства памяти, начиная с указанного.

disk_write(): как следует из названия, данная функция используется для сохране-

ния заданного числа секторов в устройство.

3 http://elm-chan.org/docs/mmc/mmc_e.html