Интернет журныл о промышленности в Украине

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

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

Atmel

Як відомо, карти пам'яті 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 мікроконтролера.

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

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

Вид вікна програми HiperTerminal з функціями по роботі з картою пам'яті SD:

Вид вікна програми 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 бод, без контролю потоку і без перевірки парності.

В термінальній програмі послідовний порт налаштовується на швидкість обміну 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