Подключение SD и SDHC карт памяти к микроконтроллерам ATmega8 / Atmega32

На сегодняшний день карты памяти SD (microSD) стали очень дешевыми и доступными, являются хорошим вариантом для увеличения памяти в своих проектах на микроконтроллерах и встраиваемых системах. В этом проекте мы рассмотрим методы подключения данных типов карт к микроконтроллерам AVR ATmega8, ATmega32 компании Atmel. Основной целью является изучение интерфейса SD карт и понимание процесса передачи данных в «сыром» (без спецификации) формате и в формате файловой системы FAT32.

подключение SD карт памяти к микроконтроллеру AVR

Как известно, карты памяти SD совместимы с интерфейсом SPI, поэтому их легко можно подключить к микроконтроллеру и наладить с ними обмен данными. Адаптеры для карт типа microSD также являются доступными, из такого адаптера мы можем изготовить слот для карты microSD для нашего макета. На фотографиях ниже показан внешний вид изготовленного адаптера для подключения к макетной плате.

В проект изначально использовалась карта памяти microSD объемом 1 ГБайт. Микроконтроллер – ATmega8 или ATmega32, работающий на частоте 8 МГц от внутреннего RC осциллятора. Кроме того, для подключения макета к персональному компьютеру для мониторинга данных использовался интерфейс RS-232. Для преобразования логических уровней интерфейса используется микросхема MAX232. Для питания схемы необходим стабилизированный источник питания 3.3 В (микросхема MAX232 рассчитана на напряжение питания 5 В, однако, как показала практика, сохраняет работоспособность при 3.3 В). Подключение карты памяти по 7-проводной схеме, согласно распиновке (см. рис).

интерфейс SD карт памяти

Принципиальная схема для микроконтроллера ATmega8.

Принципиальная схема подключения SD КАРТЫ к микроконтроллеру
Кликните для увеличения

 

Подтягивающие резисторы R1, R2 номиналом 51 кОм интерфейса SPI придают лучшую стабильность при работе с различными картами. Стабилитроны D1, D2 предназначены для защиты карты памяти при работе внутрисхемного программатора (ISP). Выводы микросхемы MAX232 VCC и GND на схемах не указаны, но их необходимо подкличить к соответствующим точкам схемы.

Принципиальная схема для микроконтроллера ATmega32

Подключение SD карты памяти к микроконтроллеру ATmega32
Кликните для увеличения

Принципиальная схема для микроконтроллера ATmega32 (добавлены часы реального времени на микросхеме DS1307)

Подключение SD карты памяти к микроконтроллеру ATmega32
Кликните для увеличения

Как вы заметили, питание последнего варианта устройства осуществляется от источника 12 В, а на плате установлены два регулятора напряжения 5.0 В (LM7805) и 3.3 В (LM1117-3.3). Для питания интерфейса SD карты используется 3.3 В, вся остальная часть схемы питается от источника 5.0 В. Микросхема часов реального времени DS1307 в стандартном включении и подключена к интерфейсу I2C микроконтроллера.

Сперва был изучен «сырой» формат передачи данных, на примере операций чтения любого блока данных, чтения и записи нескольких блоков данных, стирания нескольких блоков, записи данных в любой блок памяти SD. Устройство, собранное на макетной плате, подключалось к компьютеру по интерфейсу RS-232. Для отображения прочитанных данных с карты памяти, а также для ввода и записи данных на карту используется программа HyperTerminal (или аналогичная) на компьютере.

После удачной реализации обмена данными без спецификации, карта памяти была отформатирована (FAT32) в операционной системе Windows XP, затем на карту были записаны несколько текстовых файлов, директорий и другие типы файлов (в корневую директорию карты). После этого были написаны подпрограммы и функции по работе с файловой системой FAT32 для чтения файлов, для получения списка файлов на карте памяти (с использованием HiperTerminal), для получения информации о полном и свободном объеме памяти.

Вид окна программы HiperTerminal с функциями по работе с картой памяти SD:

Пользователю предлагаются свыше 10 опций по работе с картой памяти (для варианта с часами).

Опции 0 – 4 – это низкоуровневые функции. Gосле использования опций 0 – 3 Вам необходимо переформатировать карту перед использованием FAT32 подпрограмм.
Опции 5 – 9 – относятся к файловой системе FAT32. На данный момент поддерживаются только короткие имена файлов (8 Байт - имя файла, 3 Байта – расширение файла). Если будут записаны файлы с длинными именами, то они будут отображены в терминальной программе в коротком формате. Для тестирования этих опций не забудьте отформатировать карту в файловой системе FAT32, записать несколько директорий и текстовых файлов.

Описание опций:

0 – Erase Blocks – стирание выбранного количества блоков начиная с указанного.
1 – Write Single Block - запись данных в блок с определенным адресом. Данные вводятся с клавиатуры в программе Hiperterminal;
2 – Read Single Block – чтение данных с блока с определенным адресом. Прочитанные данные отображаются в окне терминальной программы;
3 - Writing multiple blocks – запись нескольких блоков, начиная с определенного адреса;
4 - Reading multiple blocks – чтение нескольких блоков, начиная с определенного адреса.

Примечание. Здесь функции работы с несколькими блоками (опции 3 и 4) отключены из-за нехватки памяти микроконтроллера ATmega8, поскольку эти функции не нужны для тестирования файловой системы FAT32. Для включения этих опций необходимо удалить макрос в файле SD_routines.h (#define FAT_TESTING_ONLY). И, если Вы используете ATmega8, на время тестирования опций 3 и 4 библиотека FAT32 может быть удалена с целью освобождения памяти микроконтроллера.

5 – Get File List – отображает список доступных директорий и файлов с занимаемым ими объемом памяти (в корневой директории карты);
6 – Read File – чтение указанного файла и отображение содержимого в окне терминальной программы;
7 – Create File – создать/добавить файл с указанным именем;
8 – Delete File – удалить все файлы файл с указанным именем;
9 – Read SD Memory Capacity – информация о полном и свободном объеме карты памяти (используется FSinfo сектор SD карты).

В терминальной программе последовательный порт настраивается на скорость обмена 19200 бод, без контроля потока и без проверки четности.

Для версии с часами реального времени (DS1307) на микроконтроллере ATmega32 свойства создаваемых или обновляемых файлов привязываются к дате и времени (дата создания/изменения), эти свойства прописываются в файловой таблице и могут быть проверены с помощью компьютера, а также часы могут быть полезны при сборе данных. В меню опций в терминальной программе добавлены три опции:

a – Show Date&Time – по этой команде в окне терминальной программы отображается текущая дата и время;
b – Update Date – обновить дату;
с – Update Time – обновить время.

Также в верхней части отображается информация об определенной карте памяти:

Исходные файлы проекта:
Для разработки ПО и компиляции использовался Си компилятор WinAVR совместно с AVRStudio
Версия 2.4 (ATmega32, поддержка часов реального времени, поддержка SDHC) от 17 мая 2010 г..
Версия 2.3 (ATmega32, поддержка SDHC) от 09 мая 2010 г.

Версия 2.1 для микроконтроллера ATmega8, без поддержки SDHC:

  1. SD_main.c
  2. SD_routines.c & SD_routines.h
  3. FAT32.c & FAT32.h (версия 2.1, последнее обновление - 13 сентября 2009)
  4. SPI_routines.c & SPI_routines.h
  5. UART_routines.c & UART_routines.h
  6. Makefile
  7. HEX file (версия 2.1, последнее обновление - 13 сентября 2009)

Версии 2.3, 2.4 тестировались на микроконтроллере ATmega32, но могут быть адаптированы под любой контроллер с памятью SRAM не менее 1 КБайт и Flash-памятью программ не менее 16 КБайт.

Дополнительные материалы:

  1. Спецификация Microsoft FAT32.
  2. Руководство SanDisk SD v.1.9.
  3. Структура файловой системы FAT32.

dharmanitech.com

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: SD/SDHC Card Interfacing with ATmega8 /32 (FAT32 implementation)

Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • хороший материал, жду продолжения!
  • можно ли использовать ATmega128 ??? Вроде бы по характеристикам он лучше.
  • Я думаю можно, только программу под него перекомпилировать нужно будет...
  • Очень хорошая статься. Все есть в ней. Спасибо большое! А еще так хотелось бы увидеть фузбиты. Очень признателен. Правильно ли я использую ? High: D9 Low : F8 Atmega32 для версии 2.3