Проект предназначен для IAR Embedded Workbench for ARM 5.20 и отладочной платы Olimex SAM7-EX256 (хотя может работать и на любом другом устройстве с минимальной косметической правкой).
Здесь демонстрируется чтение файловой системы карточек SD/MMC с помощью библиотеки EFSL (см. [6]). Карточка SD подключена к SPI0 микроконтроллера AT91SAM7X256 (точно так же, как в примере USB Mass Storage Device). У меня заработала SD-карточка на 512 мегабайт, а на 16 мегабайт карточка MMC почему-то не заработала. Ошибка была не в карте и не в последовательном интерфейсе, так как Mass Storage Device на этой карте работало, и объем этой карточки определялся правильно. Что-то не сложилось в EFSL (может, из-за файловой системы FAT12?).
|
|
Примеры вариантов подключения карты SD/MMC к микроконтроллеру ARM7 (AT91SAM7X128, AT91SAM7X256, AT91SAM7X512) приведены в таблице ниже. Можно подключить карту либо к SPI0, либо к SPI1. Например, в макетной плате Olimex SAM7-EX256 используется вариант 1 подключения карты SD/MMC. Для макетной платы AT91SAM7X можно выбрать любой вариант подключения, соответствующим образом настроив порты и SPI. Для подключения сигнала выборки ~CS существует еще больше вариантов, так как каждый из SPIn имеет по 4 аппаратных выхода выборки.
№ конт.
|
сигнал |
описание |
Вариант 1 подключения (SPI0, PIOA, периферия A) |
Вариант 2 подключения (SPI1, PIOA, периферия B) |
1 |
~CS |
выборка карты (режим DAT3 не используется) |
PA13 |
PA21 |
2 |
MOSI |
данные, приходящие на вход карты |
PA17 |
PA23 |
3 |
GND |
минус питания карты, сигнальная земля |
|
|
4 |
VCC |
плюс питания карты, от 2.7 до 3.6 вольт, самый лучший вариант 3 вольта |
|
|
5 |
SCK |
такты данных, поступающие на вход карты |
PA18 |
PA22 |
6 |
GND |
минус питания карты, сигнальная земля |
|
|
7 |
MISO |
данные, уходящие с выхода карты (DAT0) |
PA16 |
PA24 |
8 |
|
не используется (DAT1) |
|
|
9 |
|
не используется (DAT2) |
|
|
Чтобы заработал индикационный светодиод, показывающий обращение к карточке (он подключен к ножке 66 процессора), не забудьте ввести макроопределение OlimexDBG. Поведение библиотеки EFSL настраивается в файле efsl_0_2_7\inc\config.h. Проект нужно компилировать для работы во flash (почему-то в sram у меня библиотека EFSL глючила), и размер HEAP надо задать не меньше 0x1200 байт, иначе вызовы подпрограмм библиотеки EFSL будут производить вываливание в Undefined_Handler. Библиотека EFSL, как выяснилось, штука довольно капризная. Скачать проект arm-basic-efsl можно здесь.
Чтобы EFSL заработала на любой платформе, не только ARM (говорят, что EFSL работает на PC (GNU/Linux, среда разработки), TMS C6000 DSP от Texas instruments и ATMega от Atmel), нужно выполнить следующее: 1. Добавить код низкого уровня, который пишет и читает 512-байтовый сектор у карточки SD/MMC. 2. Для работы непосредственно EFSL (не считая памяти, которая уйдет на основную программу) требуется 1 кбайт RAM, остальная RAM может использоваться дополнительно как кэш (чем больше кэш, тем выше быстродействие). Это требование, наверное, самое жесткое - тут отсеивается сразу много разновидностей микроконтроллеров. 3. Попрыгать с бубном вокруг файла config.h и опций компиляции (настройка HEAP, оптимизация кода и т. п.), чтобы библиотека наконец заработала.
[Ссылки]
1. Другая популярная реализации файловой системы для микроконтроллеров - Petit FAT File System Module. См. также FatFs Generic FAT File System Module, как использовать SD/MMC. 2. Polymuson - отличная разработка, позволяющая проигрывать WAV-файлы на флешке (музыкальный звонок). Применена платная библиотека FlashFile в виде бинарника mmc_fat.r90 (фирмы Progressive Resources LLC, http://www.priio.com). Сайт автора Полимузона часто недоступен, содержимое статьи можно скачать здесь. При известном упорстве на пиратских развалах можно раскопать исходники библиотеки FlashFile и скомпилировать код самому, не используя mmc_fat.r90 (подсказка - ищите файл avr_sd.rar). При компиляции под IAR EW AVR библиотека FlashFile требует размер CLIB HEAP 0x300 и размер CSTACK 0x100. 3. MMC/SD ansteuern mit AVR. 4. AVR-DOS, под BASCOM-AVR. 5. ARM MP3/AAC Player (AT91SAM7S256). 6. Библиотека EFSL. Сайт авторов библиотеки efsl.be.
|