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

Як відомо, карти пам'яті SD сумісні з інтерфейсом SPI, тому їх легко можна підключити до мікроконтролеру і налагодити з ними обмін даними. Адаптери для карт типу microSD також є доступними, з такого адаптера ми можемо виготовити слот для карти microSD для нашого макета. На фотографіях нижче показаний зовнішній вигляд виготовленого адаптера для підключення до макетної платі.


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

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

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

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

Натисніть для збільшення
Як ви помітили, харчування останнього варіанту пристрою здійснюється від джерела 12 В, а на платі встановлені два регулятора напруги 5.0 В (LM7805) і 3.3 В (LM1117-3.3). Для харчування інтерфейсу SD карту, Вам потрібно 3.3 В, вся інша частина схеми харчується від джерела 5.0 В. Мікросхема годин реального часу DS1307 в стандартному включенні і підключена до інтерфейсу I2C мікроконтролера.
Після вдалої реалізації обміну даними без специфікації, карта пам'яті була відформатована (FAT32) в операційній системі Windows XP, потім на карту були записані декілька текстових файлів, директорій і інші типи файлів (в кореневу директорію карти). Після цього були написані підпрограми і функції по роботі з файловою системою FAT32 для читання файлів, для отримання списку файлів на карті пам'яті (з використанням HiperTerminal), для отримання інформації про повне і вільному обсязі пам'яті.
Вид вікна програми HiperTerminal з функціями по роботі з картою пам'яті SD:

Користувачеві пропонуються понад 10 опцій по роботі з картою пам'яті (для варіанту з годинником).
Опції 0 - 4 - це низькорівневі функції. Gосле використання опцій 0 - 3 Вам необхідно переформатувати карту перед використанням FAT32 підпрограм.
Опції 5 - 9 - відносяться до файлової системи FAT32. На даний момент підтримуються тільки короткі імена файлів (8 Байт - ім'я файлу, 3 Байта - розширення файлу). Якщо будуть записані файли з довгими іменами, то вони будуть відображені в термінальній програмі в короткому форматі. Для тестування цих опцій не забудьте відформатувати карту в файлової системі FAT32, записати кілька директорій і текстових файлів.
Примітка. Тут функції роботи з декількома блоками (опції 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 DateTime - по цій команді в вікні термінальної програми відображається поточна дата і час;
b - Update Date - оновити дату;
з - Update Time - оновити час.
Також у верхній частині відображається інформація про певну карті пам'яті:

Версія 2.1 для мікроконтролера ATmega8, без підтримки SDHC:
Версії 2.3, 2.4 тестувалися на мікроконтролері ATmega32, але можуть бути адаптовані під будь-який контролер з пам'яттю SRAM не менше 1 КБ і Flash-пам'яттю програм не менше 16 КБ.