|
Сопряжение карты SD / SDHC с ATmega8 / 32 (реализация для FAT32)
Статьи публикуются по мере поступления. Для упорядоченного тематического
поиска воспользуйтесь блоком "Карта сайта"
Устройство по сопряжению SD-карты (microSD). Отличная возможность иметь огромную память в любом проекте встроенной системы. Он совместим с шиной SPI, поэтому интерфейс очень прост. Адаптеры для SD-карт также легко доступны на рынке, можно легко сделать переходник с платой, припаяв несколько штырей. На следующих рисунках показано расположение выводов карты SD и фото адаптера на печатной плате путем пайки 7-контактного разъема на адаптере.
Я начал эксперимент с карты MicroSD емкостью 1 ГБ от SanDisk (позже также протестированной с использованием карт расширения). Микроконтроллер - AVR ATmega8 или ATmega32, работающий на внутренних тактовых частотах 8Mhz . MAX232 используется для связи схемы с ПК для мониторинга данных. Источник питания 3,3 В используется для питания mega8, microSD и max232 (хотя указанное питание для max232 равно 5 В, оно работает с комфортом при напряжении 3,3 В). Схема для ATmega8 показана здесь (резисторы серии SD удалены, так как они ограничивают скорость шины SPI, на линии CMD / DAT добавлены 51k pullups, что улучшает стабильность работы с разными картами. 3.6v стабилитрон добавляются для защиты SD в случае, когда уровни напряжения программатора ISP составляют 5 В, эти диоды не требуются, если у вашего программатора есть настройки для выхода 3,3 В)
Примечание: контакты VCC и GND MAX232 не показаны на схеме, но они должны быть подключены к оборудованию
Ниже приведена схема для ATmega32 без RTC:
Ниже приведена схема для ATmega32 с RTC (исправление выводов CS, PB4 вместо PB1) . Здесь используются два напряжения питания, 3.3в для SD и 5в для остальных ИС.
Я начал с передачи необработанных данных, отправки некоторых данных в любой блок microSD, чтения его блока, чтения и записи нескольких блоков, стирания нескольких блоков. Все это в сыром формате. Использовал RS232 для просмотра данных, считываемых микроконтроллером с SD-карты. UUC отправляет данные в HyperTerminal. Аналогично, для записи данных на карту данные передавались через HyperTerminal, вводом некоторого текста. После того, как была достигнута сырая передача данных, отформатировал карту с помощью windows (FAT32) и загрузил ее в некоторые текстовые файлы, каталоги и другие файлы (все они хранятся в корневой директории карты). После этого я написал подпрограммы FAT32 для чтения файлов, получения списка файлов (опять с помощью HyperTerminal), определения общей / свободной памяти карты. Все эти данные отправляются в HyperTerminal через uc.
Ниже приведено окно HyperTerminal с различными опциями:
Опции от 0 до 4 - это функции нижнего уровня, относящиеся к необработанным данным. Если вы используете опции 0, 1 или 3, вам, возможно, придется переформатировать карту перед использованием подпрограмм FAT32.
0: Удаляет выбранное количество блоков, выбранных из выбранного блока
1: записывает данные в указанный адрес блока SD. Данные для ввода в HyperTerminal с помощью клавиатуры ПК
2: Чтение данных указанного адреса блока SD. Данные отображаются в окне HyperTerminal
3. Записывает выбранное количество блоков, выбранных из выбранного блока
4. Считывает выбранное количество блоков, выбранных из выбранного блока
Здесь функции множественных блоков, связанные с опциями 3 и 4, отключены из-за ограничения памяти, так как это время mega8 использовалось для тестирования, и эти функции не требуются для тестирования FAT32. При тестировании с помощью mega32 опции 3 и 4 можно включить, удалив макрос (#define FAT_TESTING_ONLY), определенный в SD_routines.h.
Параметры с 5 по 9 относятся к FAT32. Прямо сейчас поддерживаются только короткие имена файлов, 8-байтовое имя + расширение на 3 байта. Если вы храните файл с длинным именем в SD, он будет отображаться этими программами только в коротком формате.
Для тестирования этих параметров отформатируйте карту с файловой системой FAT32 и сохраните некоторые каталоги и текстовые файлы (поскольку текстовые файлы можно прочитать и проверить через HyperTerminal).
5: Отображает список доступных каталогов и файлов с размером (в корневом каталоге карты)
6: Считывает указанный файл и отображает содержимое файла на HyperTerminal
7: создать / добавить файл с указанным именем, ввести текст из HyperTerminal
8: Удаляет любой существующий файл с указанным именем
9: отображает полную и свободную память карты (используя сектор FSinfo на SD-карте)
На следующих рисунках показано окно HyperTerminal, когда выбраны параметры 5 и 9:
( На этих рисунках отображается меню с версии Ver2.3 или более ранней версии. Стиль меню изменен с версии Ver_2.4, которая показана в истории обновлений )
Примечание: HyperTerminal используется здесь со скоростью 19200 бод, без контроля четности, Flow Control 'none'.
Схема использует небольшое число компонентов, и ее можно легко сделать дома. Попробуйте!
Скачать файлы к статье
SD_GCC_V2.4.7
EAGLE версии 2.4
Загрузка / просмотр файлов исходного кода V2.1 (для ATmega8) :
Следующие файлы компилируются с помощью winAVR внутри AVRStudio. Эта версия не поддерживает карты SDHC. Кроме того, функция добавления файла недоступна.