Модуль SD-карти

Матеріал з Вікі-знання або навчання 2.0 в ТНТУ
(відмінності між версіями)
Перейти до: навігація, пошук
Рядок 11: Рядок 11:
 
• Адаптер підключається до апаратних виводів шини SPI (4 виведення: CS, SCK, MOSI, MISO). Назва виводів зазначено на адаптері, їх потрібно підключити до однойменних виводів плат Arduino.
 
• Адаптер підключається до апаратних виводів шини SPI (4 виведення: CS, SCK, MOSI, MISO). Назва виводів зазначено на адаптері, їх потрібно підключити до однойменних виводів плат Arduino.
  
==Характеристика==
+
==Характеристика модуля==
 +
 
 
- Вхідна напруга живлення: 4.5 - 5.5 В
 
- Вхідна напруга живлення: 4.5 - 5.5 В
  
Рядок 27: Рядок 28:
  
 
==Підключення модуля до Arduino==
 
==Підключення модуля до Arduino==
 +
 
Плата розширення значно полегшує підключення. На ній встановлено регулятор, який перетворює напругу в 3.3 В (I2C). Є регулятор рівня, який перетворює живення логіки з 3.3-5 В в 3.3 В. Це означає, що плату розширення можна використовувати з мікроконтролерами 3.3 В і 5 В.
 
Плата розширення значно полегшує підключення. На ній встановлено регулятор, який перетворює напругу в 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 карту до пінам 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
+
      Таблиця підключення SD модуля і Arduino
 
{| border=1  
 
{| border=1  
 
  |'''Адаптер карт MicroSD'''
 
  |'''Адаптер карт MicroSD'''
Рядок 55: Рядок 57:
 
  |}
 
  |}
 
Є ще один коннектор - CD - це пін для ініціалізації SD карти. Він замикається на землю, коли карта встановлена. Якщо ви хочете його задіяти, підключіть підтягаючий резистор (близько 10 кОм) і далі до іншого піну.
 
Є ще один коннектор - CD - це пін для ініціалізації SD карти. Він замикається на землю, коли карта встановлена. Якщо ви хочете його задіяти, підключіть підтягаючий резистор (близько 10 кОм) і далі до іншого піну.
 +
 
==Програмування==
 
==Програмування==
 +
 
У програмний пакет Arduino IDE входить спеціальна бібліотека SD. Бібліотека підтримує на стандартних картах і SDHC файлові системи FAT16 і FAT32. Працює з іменами файлів довжиною 8 символів і розширенням імені 3 символу. Починаючи з версії 1.0, бібліотека SD підтримує відкриття декількох файлів. Програмне забезпечення Arduino містить процедури дозволяють працювати з картою SD і інтерфейсом SPI.
 
У програмний пакет Arduino IDE входить спеціальна бібліотека SD. Бібліотека підтримує на стандартних картах і SDHC файлові системи FAT16 і FAT32. Працює з іменами файлів довжиною 8 символів і розширенням імені 3 символу. Починаючи з версії 1.0, бібліотека SD підтримує відкриття декількох файлів. Програмне забезпечення Arduino містить процедури дозволяють працювати з картою SD і інтерфейсом SPI.
 +
 
===Базові функції, для роботи з файлами SD-карти===
 
===Базові функції, для роботи з файлами SD-карти===
  
  // створення змінної myFile класу File бібліотеки SD, яка буде служити "покажчиком" на файл
+
        // Створення змінної myFile класу File бібліотеки SD, яка буде служити "покажчиком" на файл
 
   File myFile; // змінна буде потрібно для відкриття і закриття файлу, а так само для роботи з відкритим файлом
 
   File myFile; // змінна буде потрібно для відкриття і закриття файлу, а так само для роботи з відкритим файлом
  // відкриття файлу "iarduino.txt" для читання і запису, починаючи з кінця файлу:
+
 
 +
        // Відкриття файлу "iarduino.txt" для читання і запису, починаючи з кінця файлу:
 
   myFile = SD.open ( "iarduino.txt", FILE_WRITE); // якщо файлу з ім'ям "iarduino.txt" - немає, то він буде створений.
 
   myFile = SD.open ( "iarduino.txt", FILE_WRITE); // якщо файлу з ім'ям "iarduino.txt" - немає, то він буде створений.
  // запис рядка в файл> "iarduino.txt":
+
 
 +
        // Запис рядка в файл> "iarduino.txt":
 
   myFile.print ( "початок рядка,"); // запис рядка у відкритий файл "iarduino.txt", без додавання символів переходу на новий рядок.
 
   myFile.print ( "початок рядка,"); // запис рядка у відкритий файл "iarduino.txt", без додавання символів переходу на новий рядок.
 
   myFile.println ( "продовження рядка."); // запис рядка у відкритий файл "iarduino.txt", з додаванням символів переходу на новий рядок.
 
   myFile.println ( "продовження рядка."); // запис рядка у відкритий файл "iarduino.txt", з додаванням символів переходу на новий рядок.
  // закриття файлу "iarduino.txt":
+
 
 +
        // Закриття файлу "iarduino.txt":
 
   myFile.close ();
 
   myFile.close ();
  // відкриття файлу "iarduino.txt" для читання, починаючи з початку файлу:
+
 
 +
        // Відкриття файлу "iarduino.txt" для читання, починаючи з початку файлу:
 
   myFile = SD.open ( "iarduino.txt"); // якщо файлу з ім'ям "iarduino.txt" - немає, то він не буде відкритий.
 
   myFile = SD.open ( "iarduino.txt"); // якщо файлу з ім'ям "iarduino.txt" - немає, то він не буде відкритий.
  // читання рядків з файлу "iarduino.txt":
+
 
 +
        // Читання рядків з файлу "iarduino.txt":
 
   while (myFile.available ())  
 
   while (myFile.available ())  
 
   {// якщо є дані для читання з відкритого файлу "iarduino.txt"
 
   {// якщо є дані для читання з відкритого файлу "iarduino.txt"
 
       Serial.write (myFile.read ()); // читаємо черговий байт з файлу і виводимо його в послідовний порт.
 
       Serial.write (myFile.read ()); // читаємо черговий байт з файлу і виводимо його в послідовний порт.
 
   }
 
   }
  // видалення файлу "iarduino.txt":
+
 
 +
        // Видалення файлу "iarduino.txt":
 
   SD.remove ( "iarduino.txt"); // функція повертає результат видалення true / false
 
   SD.remove ( "iarduino.txt"); // функція повертає результат видалення true / false
  // створення файлу "iarduino.txt":
+
 
 +
        // Створення файлу "iarduino.txt":
 
   myFile = SD.open ( "iarduino.txt", FILE_WRITE); // якщо файлу з ім'ям "iarduino.txt" - немає, то він буде створений.
 
   myFile = SD.open ( "iarduino.txt", FILE_WRITE); // якщо файлу з ім'ям "iarduino.txt" - немає, то він буде створений.
 
   myFile.close (); // закриваємо файл "iarduino.txt" без запису даних.
 
   myFile.close (); // закриваємо файл "iarduino.txt" без запису даних.
  // перевірка існування файлу "iarduino.txt":
+
 
 +
        // Перевірка існування файлу "iarduino.txt":
 
   if (SD.exists ( "example.txt")) {...;} // умова буде виконана, якщо файл "iarduino.txt" існує на SD-карті
 
   if (SD.exists ( "example.txt")) {...;} // умова буде виконана, якщо файл "iarduino.txt" існує на SD-карті
  // перевірка відкриття файлу "iarduino.txt":
+
 
 +
        // Перевірка відкриття файлу "iarduino.txt":
 
   if (myFile) {...;} // умова буде виконана, якщо файл був успішно відкритий: myFile = SD.open (...)
 
   if (myFile) {...;} // умова буде виконана, якщо файл був успішно відкритий: myFile = SD.open (...)
  // створення каталогу "my_Dir"
+
 
 +
        // Створення каталогу "my_Dir"
 
   SD.mkdir ( "my_Dir"); // функція повертає результат створення true / false. Якщо вказати "first_Dir / my_Dir", то буде створено два каталоги (каталог my_Dir в каталозі first_Dir)
 
   SD.mkdir ( "my_Dir"); // функція повертає результат створення true / false. Якщо вказати "first_Dir / my_Dir", то буде створено два каталоги (каталог my_Dir в каталозі first_Dir)
  // видалення каталогу "my_Dir"
+
 
 +
        // Видалення каталогу "my_Dir"
 
   SD.rmdir ( "my_Dir"); // функція повертає результат видалення true / false. Видаляється каталог повинен бути порожнім
 
   SD.rmdir ( "my_Dir"); // функція повертає результат видалення true / false. Видаляється каталог повинен бути порожнім
  
 
===Створення файлу===
 
===Створення файлу===
  
// підключення бібліотек SPI і SD:
+
  // підключення бібліотек SPI і SD:
#include <SPI.h>
+
  #include <SPI.h>
#include <SD.h>
+
 
const uint8_t PIN_CS = 10; // вказуємо номер виведення arduino підключеного до висновку CS адаптера
+
  #include <SD.h>
File myFile; // створюємо змінну myFile класу File, яка буде служити "покажчиком" на відкритий файл
+
 
void setup () {
+
  const uint8_t PIN_CS = 10; // вказуємо номер виведення arduino підключеного до висновку CS адаптера
   Serial.begin (9600); // відкриваємо послідовний порт на швидкості 9600 бод
+
 
  while (! Serial) {;} // очікуємо з'єднання послідовного порту
+
  File myFile; // створюємо змінну myFile класу File, яка буде служити "покажчиком" на відкритий файл
// використовуємо відповідь ініціалізації, для визначення працездатності карти і адаптера
+
 
  if (! SD.begin (PIN_CS)) {// ініціалізація SD карти із зазначенням номера виведення CS
+
  void setup ()  
    Serial.println ( "SD-card not found"); return; // помилка ініціалізації. картка не знайдено або сигнал не підключено (неправильно підключений) адаптер карт MicroSD
+
   {
  }
+
      Serial.begin (9600); // відкриваємо послідовний порт на швидкості 9600 бод
// перевіряємо наявність файлу "iarduino.txt" на SD-карті
+
  while (! Serial)  
  if (SD.exists ( "iarduino.txt")) {// якщо файл з ім'ям "iarduino.txt" існує, то ...
+
    {
    Serial.println ( "file exists");
+
      ; // очікуємо з'єднання послідовного порту
  } Else {// інакше ...
+
    }
     Serial.println ( "file does not exist");
+
 
 +
  // використовуємо відповідь ініціалізації, для визначення працездатності карти і адаптера
 +
  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");
 +
    }
 
   }
 
   }
// відкриваємо файл "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 ()  
 
   void loop ()  
 
   {
 
   {
Рядок 146: Рядок 186:
 
а на SD-карті з'явиться файл "iarduino.txt" з одним рядком "The beginning of a line, The end of the line".
 
а на 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" (файл виявлений).
+
Якщо завантажити програму при вставленої в адаптер карт 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:
 
   // підключення бібліотек SPI і SD:
 
   #include <SPI.h>
 
   #include <SPI.h>
 
   #include <SD.h>
 
   #include <SD.h>
 +
 
   const uint8_t PIN_CS = 10; // вказуємо номер виведення arduino підключеного до висновку CS адаптера
 
   const uint8_t PIN_CS = 10; // вказуємо номер виведення arduino підключеного до висновку CS адаптера
 +
 
   void setup ()  
 
   void setup ()  
  {
+
  {
  Serial.begin (9600); // відкриваємо послідовний порт на швидкості 9600 бод
+
    Serial.begin (9600); // відкриваємо послідовний порт на швидкості 9600 бод
  while (! Serial) {;} // очікуємо з'єднання послідовного порту
+
  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" існує, то ...
+
  if (! SD.begin (PIN_CS)) // ініціалізація SD карти із зазначенням номера виведення CS
     Serial.println ( "file exists");
+
     {
// видаляємо файл "iarduino.txt":
+
    Serial.println ( "SD-card not found"); // помилка ініціалізації. картка не знайдено або сигнал не підключено (неправильно підключений) адаптер карт MicroSD
     if (SD.remove ( "iarduino.txt")) {// функція повертає результат видалення true / false
+
    return;
 +
    }
 +
 
 +
  // перевіряємо наявність файлу "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");
 
       Serial.println ( "file deleted");
    } Else {
+
    }  
 +
    Else
 +
    {
 
       Serial.println ( "file is not deleted");
 
       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");
 
     }
 
     }
  } Else {// інакше ...
 
    Serial.println ( "file does not exist");
 
 
   }
 
   }
// перевіряємо наявність файлу "iarduino.txt" на SD-карті
+
   void loop ()  
   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-карту і запустити Монітор послідовного порту, то в моніторі будуть виведені наступні рядки:
 
Якщо підключити адаптер карт MicroSD v1.0 до Arduino Uno, підключити Arduino Uno до ПК, завантажити скетч, вставити SD-карту і запустити Монітор послідовного порту, то в моніторі будуть виведені наступні рядки:
  
 
file exists (файл виявлений)
 
file exists (файл виявлений)
 +
 
file deleted (файл знаходиться на відстані)
 
file deleted (файл знаходиться на відстані)
 +
 
file does not exist (файл не виявлений)
 
file does not exist (файл не виявлений)
 +
 
а файл "iarduino.txt" буде видалений з SD-карти.
 
а файл "iarduino.txt" буде видалений з SD-карти.
  
 
Якщо завантажити скетч при вставленої в адаптер карт MicroSD v1.0 SD-картою, то файл "iarduino.txt" буде видалений з SD-карти, але в моніторі послідовного порту будуть два рядки "file does not exist" (файл не виявлений) .
 
Якщо завантажити скетч при вставленої в адаптер карт MicroSD v1.0 SD-картою, то файл "iarduino.txt" буде видалений з SD-карти, але в моніторі послідовного порту будуть два рядки "file does not exist" (файл не виявлений) .
 
Справа в тому, що функція setup () в обох випадках виконується двічі (відразу після завантаження скетчу і після запуску монітора послідовного порту). Але в першому випадку, після завантаження скетчу, SD-карти не було в адаптері, отже, файл "iarduino.txt" був вилучений тільки після запуску монітора послідовного порту.
 
  
 
==Перелік посилань==
 
==Перелік посилань==
 +
 
<br>1.
 
<br>1.

Версія за 16:05, 31 травня 2017

Модуль дозволяє зберігати, читати і записувати на 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" (файл виявлений).


Видалення файлу

 // підключення бібліотек 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"); // помилка ініціалізації. картка не знайдено або сигнал не підключено (неправильно підключений) адаптер карт MicroSD
    return; 
   }
  // перевіряємо наявність файлу "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" (файл не виявлений) .

Перелік посилань


1.

Особисті інструменти
Google AdSense
реклама