Модуль SD-карти
Модуль дозволяє зберігати, читати і записувати на SD карту дані необхідні для роботи приладу на основі мікроконтролера. Застосування пристрою актуально при зберіганні файлів від десятків мегабайт до двох гігабайт. На платі розміщений контейнер SD карти, стабілізатор живлення карти, вилка з'єднувача ліній інтерфейсу і живлення. Якщо потрібно працювати з звуковими, відео або іншими об'ємними даними, наприклад, вести журнал реєстрації подій, даних датчиків або зберігати інформацію веб-сервера, то модуль SD карти пам'яті для Arduino дасть можливість застосувати SD карту для цих цілей. За допомогою модуля можна вивчити особливості роботи SD карти.
Зміст
Загальні відомості
Спеціальний модуль для підключення Micro SD (TF) карт пам'яті до Arduino:
• Може використовуватися в різних робототехнічних проектах, де необхідно забезпечити завантаження аудіо, відео, графіки або записи будь-яких даних.
• Модуль дозволяє значно розширити можливості Arduino. Так як в більшості мікроконтролерів вбудована пам'ять обмежена.
• Бібліотека для роботи з даними адаптером входить в стандартний набір Arduino IDE. Бібліотека SD дозволяє: читати і записувати дані, створювати і видаляти файли, отримувати інформацію про файлах і SD-карті, працювати з SD-картою на низькому рівні.
• Адаптер підключається до апаратних виводів шини SPI (4 виведення: CS, SCK, MOSI, MISO). Назва виводів зазначено на адаптері, їх потрібно підключити до однойменних виводів плат Arduino.
Характеристика
- Вхідна напруга живлення: 4.5 - 5.5 В
- Струм споживання адаптером: 0.2 - 200 мА
- Підтримувані рівні логічної «1»: 3.3 / 5 В
- Інтерфейс: SPI
- Підтримуваний обсяг MicroSD: до 2 Гб
- Розмір: 46 x 24 x 7 мм
- Вага: 5 г
Підключення модуля до Arduino
Плата розширення значно полегшує підключення. На ній встановлено регулятор, який перетворює напругу в 3.3 В (I2C). Є регулятор рівня, який перетворює живення логіки з 3.3-5 В в 3.3 В. Це означає, що плату розширення можна використовувати з мікроконтролерами 3.3 В і 5 В.
Найкраще підключати SD карту до пінам hardware SPI, тому-що при її використанні відбувається передача великої кількості даних. На "класичних платах Arduino (Duemilanove / Diecimila / Uno) це цифровий пін 13 (SCK), 12 (MISO) і 11 (MOSI). Також знадобиться четвертий пін для ланцюга 'chip / slave select' (SS). Традиційно використовують 10 пін, але можна і інший. Якщо в наявності є плата Arduino Mega, піни будуть відрізнятися! В цьому випадку використовуйте 50 (MISO), 51 (MOSI), 52 (SCK) і 53 (SS) для ланцюга CS. Знову таки, ви можете змінити пін SS (10 або 53).
Таблиця підключення SD модуля і Arduino
Адаптер карт MicroSD | Arduino Uno |
CS (Chip Select) | 10 |
SCK (Serial ClocK) | 13 |
MOSI (Master Out Slave In) | 11 |
MISO (Master In Slave Out) | 12 |
Vcc | 5V |
GND | GND |
Є ще один коннектор - CD - це пін для ініціалізації SD карти. Він замикається на землю, коли карта встановлена. Якщо ви хочете його задіяти, підключіть підтягаючий резистор (близько 10 кОм) і далі до іншого піну.
Програмування
У програмний пакет Arduino IDE входить спеціальна бібліотека SD. Бібліотека підтримує на стандартних картах і SDHC файлові системи FAT16 і FAT32. Працює з іменами файлів довжиною 8 символів і розширенням імені 3 символу. Починаючи з версії 1.0, бібліотека SD підтримує відкриття декількох файлів. Програмне забезпечення Arduino містить процедури дозволяють працювати з картою SD і інтерфейсом SPI. Базові функції, для роботи з файлами SD-карти: // створення змінної myFile класу File бібліотеки SD, яка буде служити "покажчиком" на файл
File myFile; // змінна буде потрібно для відкриття і закриття файлу, а так само для роботи з відкритим файлом
// відкриття файлу "iarduino.txt" для читання і запису, починаючи з кінця файлу:
myFile = SD.open ( "iarduino.txt", FILE_WRITE); // якщо файлу з ім'ям "iarduino.txt" - немає, то він буде створений.
// запис рядка в файл> "iarduino.txt":
myFile.print ( "початок рядка,"); // запис рядка у відкритий файл "iarduino.txt", без додавання символів переходу на новий рядок. myFile.println ( "продовження рядка."); // запис рядка у відкритий файл "iarduino.txt", з додаванням символів переходу на новий рядок.
// закриття файлу "iarduino.txt":
myFile.close ();
// відкриття файлу "iarduino.txt" для читання, починаючи з початку файлу:
myFile = SD.open ( "iarduino.txt"); // якщо файлу з ім'ям "iarduino.txt" - немає, то він не буде відкритий.
// читання рядків з файлу "iarduino.txt":
while (myFile.available ()) {// якщо є дані для читання з відкритого файлу "iarduino.txt" Serial.write (myFile.read ()); // читаємо черговий байт з файлу і виводимо його в послідовний порт. }
// видалення файлу "iarduino.txt":
SD.remove ( "iarduino.txt"); // функція повертає результат видалення true / false
// створення файлу "iarduino.txt":
myFile = SD.open ( "iarduino.txt", FILE_WRITE); // якщо файлу з ім'ям "iarduino.txt" - немає, то він буде створений. myFile.close (); // закриваємо файл "iarduino.txt" без запису даних.
// перевірка існування файлу "iarduino.txt":
if (SD.exists ( "example.txt")) {...;} // умова буде виконана, якщо файл "iarduino.txt" існує на SD-карті
// перевірка відкриття файлу "iarduino.txt":
if (myFile) {...;} // умова буде виконана, якщо файл був успішно відкритий: myFile = SD.open (...)
// створення каталогу "my_Dir"
SD.mkdir ( "my_Dir"); // функція повертає результат створення true / false. Якщо вказати "first_Dir / my_Dir", то буде створено два каталоги (каталог my_Dir в каталозі first_Dir)
// видалення каталогу "my_Dir"
SD.rmdir ( "my_Dir"); // функція повертає результат видалення true / false. Видаляється каталог повинен бути порожнім
Створення файлу: // підключення бібліотек SPI і SD:
- include <SPI.h>
- include <SD.h>
const uint8_t PIN_CS = 10; // вказуємо номер виведення arduino підключеного до висновку CS адаптера File myFile; // створюємо змінну myFile класу File, яка буде служити "покажчиком" на відкритий файл void setup () {
Serial.begin (9600); // відкриваємо послідовний порт на швидкості 9600 бод while (! Serial) {;} // очікуємо з'єднання послідовного порту
// використовуємо відповідь ініціалізації, для визначення працездатності карти і адаптера
if (! SD.begin (PIN_CS)) {// ініціалізація SD карти із зазначенням номера виведення CS Serial.println ( "SD-card not found"); return; // помилка ініціалізації. картка не знайдено або сигнал не підключено (неправильно підключений) адаптер карт MicroSD }
// перевіряємо наявність файлу "iarduino.txt" на SD-карті
if (SD.exists ( "iarduino.txt")) {// якщо файл з ім'ям "iarduino.txt" існує, то ... Serial.println ( "file exists"); } Else {// інакше ... Serial.println ( "file does not exist"); }
// відкриваємо файл "iarduino.txt" для читання і запису, починаючи з кінця файлу, і записуємо в нього рядок
myFile = SD.open ( "iarduino.txt", FILE_WRITE); // якщо файлу з ім'ям "iarduino.txt" - немає, то він буде створений. if (myFile) {// якщо файл доступний (відкритий для запису), то ... Serial.println ( "file is opened"); myFile.print ( "The beginning of a line,"); // записуємо першу частину рядка в файл myFile.println ( "The end of the line"); // записуємо другу частину рядка в файл Serial.println ( "data written to the file"); myFile.close (); // закриваємо файл Serial.println ( "file is closed"); } Else {// інакше ... Serial.println ( "file is not opened"); }
// перевіряємо наявність файлу "iarduino.txt" на SD-карті
if (SD.exists ( "iarduino.txt")) {// якщо файл з ім'ям "iarduino.txt" існує, то ... Serial.println ( "file exists"); } Else {// інакше ... Serial.println ( "file does not exist"); }
} void loop () { }
Якщо підключити адаптер карт MicroSD v1.0 до Arduino Uno, підключити Arduino Uno до ПК, завантажити скетч, вставити SD-карту і запустити Монітор послідовного порту, то в моніторі будуть виведені наступні рядки:
file does not exist (файл не виявлений) file is opened (файл відкритий) data written to the file (дані записані в файл) file is closed (файл закритий) file exists (файл виявлений) а на SD-карті з'явиться файл "iarduino.txt" з одним рядком "The beginning of a line, The end of the line".
Якщо завантажити скетч при вставленої в адаптер карт MicroSD v1.0 SD-картою, то на SD-карті з'явиться файл "iarduino.txt" з двома рядками "The beginning of a line, The end of the line", а першим рядком в моніторі послідовного порту буде "file exists" (файл виявлений).
Справа в тому, що функція setup () в обох випадках виконується двічі (відразу після завантаження скетчу і після запуску монітора послідовного порту). Але в першому випадку, після завантаження скетчу, SD-карти не було в адаптері, отже, файл "iarduino.txt" був створений тільки після запуску монітора послідовного порту.
Видалення файлу: // підключення бібліотек SPI і SD:
- include <SPI.h>
- include <SD.h>
const uint8_t PIN_CS = 10; // вказуємо номер виведення arduino підключеного до висновку CS адаптера void setup () {
Serial.begin (9600); // відкриваємо послідовний порт на швидкості 9600 бод while (! Serial) {;} // очікуємо з'єднання послідовного порту
// використовуємо відповідь ініціалізації, для визначення працездатності карти і адаптера
if (! SD.begin (PIN_CS)) {// ініціалізація SD карти із зазначенням номера виведення CS Serial.println ( "SD-card not found"); return; // помилка ініціалізації. картка не знайдено або сигнал не підключено (неправильно підключений) адаптер карт MicroSD }
// перевіряємо наявність файлу "iarduino.txt" на SD-карті
if (SD.exists ( "iarduino.txt")) {// якщо файл з ім'ям "iarduino.txt" існує, то ... Serial.println ( "file exists");
// видаляємо файл "iarduino.txt":
if (SD.remove ( "iarduino.txt")) {// функція повертає результат видалення true / false Serial.println ( "file deleted"); } Else { Serial.println ( "file is not deleted"); } } Else {// інакше ... Serial.println ( "file does not exist"); }
// перевіряємо наявність файлу "iarduino.txt" на SD-карті
if (SD.exists ( "iarduino.txt")) {// якщо файл з ім'ям "iarduino.txt" існує, то ... Serial.println ( "file exists"); } Else {// інакше ... Serial.println ( "file does not exist"); }
} void loop () { }
Якщо підключити адаптер карт MicroSD v1.0 до Arduino Uno, підключити Arduino Uno до ПК, завантажити скетч, вставити SD-карту і запустити Монітор послідовного порту, то в моніторі будуть виведені наступні рядки:
file exists (файл виявлений) file deleted (файл знаходиться на відстані) file does not exist (файл не виявлений) а файл "iarduino.txt" буде видалений з SD-карти.
Якщо завантажити скетч при вставленої в адаптер карт MicroSD v1.0 SD-картою, то файл "iarduino.txt" буде видалений з SD-карти, але в моніторі послідовного порту будуть два рядки "file does not exist" (файл не виявлений) .
Справа в тому, що функція setup () в обох випадках виконується двічі (відразу після завантаження скетчу і після запуску монітора послідовного порту). Але в першому випадку, після завантаження скетчу, SD-карти не було в адаптері, отже, файл "iarduino.txt" був вилучений тільки після запуску монітора послідовного порту.