Главная » Статьи » FAT в микроконтроллерах STM32 – поддержка SD карт

FAT в микроконтроллерах STM32 – поддержка SD карт

В настоящее время SD (Secure Digital) карты являются самыми популярными и универсальными. Стандарт включает в себя карты емкостью до 4 ГБ и их разновидности, т. е. SDHC (Secure Digital High Capacity), до 32 ГБ. Стандарт SD-карт был разработан тремя компаниями: Matsushita, SanDisk и Toshiba.

Первые носители данных такого типа появились в конце 2000 года. Первоначально доступ к документации стандарта SD был довольно сложным, но ситуация изменилась с приходом 2006 года. Тогда стала доступна информация, в том числе и на интерфейсе SDIO, который позволил реализовать в микроконтроллерах аппаратные драйверы для SD-карты. Представители самой продвинутой группы систем из семейства STM32 имеют такой встроенный контроллер.

Поддержка FAT в микроконтроллерах STM32 - поддержка карт

Все имеющиеся на рынке SD-карты поддерживают два стандарта связи: SDBus и SPI. Как обычно, родной интерфейс (SDBus) предлагает большие возможности и высокую скорость работы, но за счет увеличения сложности интерфейса. По этой причине связь с SD-картами также можно осуществить с  гораздо более простой в использовании шины SPI, но при несколько ограниченных возможностях.

Если только приложение не требует чрезвычайно высокой скорости передачи данных, то реализовывать поддержку интерфейса SDBus нет смысла, достаточно работать с шиной SPI. Представленный выше подход значительно упрощает этот вопрос, поскольку подавляющее большинство доступных микроконтроллеров (включая, конечно, семейство STM32F) оснащены аппаратным контроллером SPI.

Рис. 1. Подключение SD-карты через шину SPI к микроконтроллеру в наборе STM3210B-EVAL

Команды, поддерживаемые SD-картами

Каждая команда для отправки на SD-карту состоит из шести байтов. Первый байт всегда является кодом команды, следующие четыре байта являются его аргументом. В конце отправляется байт контрольной суммы CRC.

В то время как сумма CRC проверяется в рабочем режиме с помощью интерфейса SDBus, контрольная сумма игнорируется картой при обмене данными через шину SPI. Только при отправке команды CMD0, переключающей режим работы с SDBus на SPI, требуется байт CRC. Его не нужно рассчитывать каким-либо образом, поскольку он является фиксированным значением и равен 0x95.

В табл. 1 указаны несколько команд при работе с шиной SPI с описанием аргументов. В дополнение к стандартным командам CMD карты SD также могут использовать так называемые прикладные команды (ACMD). Для отправки команды необходимо сначала отправить команду CMD55, информирующую SD-карту о том, что следующей командой будет ACMD.

Табл. 1. Команды, поддерживаемые SD-картами в режиме SPIf

команда описание
CMD0 сбрасывает карту, позволяет включить режим шины SPI
CMD12 принудительное завершение передачи множества блоков данных
CMD16 настройка длины блока данных для чтения / записи
CMD17 чтение блока памяти длины, указанной CMD16
CMD24 запись блока памяти с длиной, указанной CMD16
CMD32 адрес первого удаляемого блока передается в аргументе
CMD33 адрес последнего удаляемого блока передается в аргументе
CMD38 удаляет блоки, обозначенные CMD32 и CMD33

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

С точки зрения файловой системы каждый носитель данных (жесткий диск, карта памяти) разделен на сектора и кластеры. Сектор — это наименьшее количество байтов, которое может быть записано или прочитано. Обычно размер сектора составляет 512 байт. Файлы сохраняются в пронумерованных кластерах.

Размер кластера зависит от файловой системы и носителя. Каждый кластер полностью выделен для данного файла. Это означает, что даже если файл намного меньше размера кластера, он все равно занимает столько же, сколько один кластер на диске.

Ключевым элементом файловой системы FAT (File Allocation Table) является, в соответствии с ее именем, таблица размещения файлов. Файловая система FAT представлена ​​четырьмя разновидностями, во встроенных системах обычно используется две, в зависимости от размера носителя и требований к приложениям, это будет FAT16 или FAT32.

Рис. 2. Разделение носителя информации в системе FAT

Носитель данных в файловой системе FAT разделен на пять частей, все они показаны на рис. 2. Первая логическая часть носителя данных, расположенная в первом секторе, представляет собой зарезервированную область, которая содержит всю основную информацию о текущем разделе (носителе).

К этой информации относятся, в частности: тип и размер разделов, размер сектора и количество секторов в кластере. За зарезервированной областью находятся таблицы размещения файлов, которые являются основным источником информации о данных, сохраняемых на носителе. Обычно, помимо основной таблицы размещения, есть и ее копия. Четвертая область — это корневой каталог, который создается автоматически при создании файловой системы. Последний, пятый сектор — это область данных.

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*