Схема подключения sd карты памяти к Ардуино

Модуль карты памяти Ардуино (sd card shield) позволяет сохранять данные с датчиков при создании сложных проектов, так как собственная энергонезависимая память (eeprom arduino) позволяет использовать лишь 4 Кбайта памяти на Arduino Mega (Atmega2560). Рассмотрим в этом обзоре, как правильно производить чтение и запись информации в файл на SD память при помощи микроконтроллера Ардуино.

Модуль SD card shield Arduino Uno

Распиновка SD card module Arduino
Распиновка платы SD card module Arduino

Некоторые производители изготавливают модули с двумя контактами питания — 5 В и 3,3 В. К контакту «3,3В» в этом случае следует подключить стабилизированное напряжение 3,3 Вольта. Если нет такого контакта, то к выводу «5В» или «VCC» следует подключить 5 Вольт от платы, которое будет преобразовываться в 3,3 В. К контакту «3,3В» нельзя подключать большее напряжение, так как это выведет из строя microSD.

Для работы с модулем рекомендуется использовать файловую систему на sd карте — FAT16 или FAT32. При работе с новой картой всегда используйте данную программу для проверки работоспособности флэш памяти и модуля. Если у вас не появилась подобная информация на мониторе порта Arduino IDE, проверьте правильность подключения micro sd card модуля к плате и попробуйте предварительно отформатировать карту.

SD библиотека Arduino описание команд

Перед началом работы с модулем карты памяти потребуется установить в Arduino IDE библиотеки SD.h и SPI.h, которые можно скачать на нашем сайте — здесь. Данная библиотека содержит множество полезных команд и функций, позволяющих работать с файлами на флэш памяти sd card shield arduino nano: создавать и удалять файлы, открывать и сохранять в файлах нужную информацию с датчиков и т.д.

Функции библиотеки SD.h для microsd Arduino

  • begin() – инициализация библиотеки, присваивает пин для сигнала;
  • exists() – проверка, имеется ли на карте информация;
  • mkdir() – создает нужную папку на sd карте памяти;
  • rmdir() – удалят папку (папка должна была пустой);
  • open() – открывает файл для записи/чтения (если файла нет, то он будет создан);
  • remove() – удаляет файл с карты памяти.

Команды библиотеки SD.h для Arduino microsd

  • available() – проверяет наличие в файле байт, доступные для чтения;
  • size() – выводит информацию о размере данных;
  • read() – считывает информацию;
  • write() – производит запись в файл;
  • close() – закрывает файл, проверяя сохранены ли данные на sd карту;
  • flush() – позволяет убедиться, записаны ли данные на карту памяти;
  • name() – возвращает указатель на имя;
  • peek() – считывает байты данных, не перемещая указатель;
  • position() – показывает текущее положение указателя в файле;
  • seek() – меняет положение текущей позиции в файле;
  • print() – выводит данные в отдельный файл;
  • println() – печатает данные в файл до места, где появляется пустая строка;
  • isDirectory() – проверка, является ли файл директорией (папкой);
  • openNextFile() – выводит имя следующего файла на карте;
  • rewindDirectory() – возвращает к первому файлу в папке;

Как подключить SD карту к Ардуино

Для этого занятия потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • arduino micro sd card;
  • провода «папа-мама».
Схема подключения sd карты памяти к Ардуино
Схема подключения sd карты памяти к Ардуино
SD card shield Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VCC 5V 5V 5V
MOSI 11 11 51
MISO 12 12 50
SCK 13 13 52
SC 4 4 53

Модуль подключается к Ардуино по SPI интерфейсу, а для этого понадобятся выводы SCK, MISO, MOSI и CS. Для SPI шины у плат Arduino Uno и Nano имеются специальные пины, у платы Mega 2560 пины отличаются. Для контакта CS можно использовать любой свободный пин на микроконтроллере и указать это изменение в коде. По умолчанию используют пины на платах, указанные в следующей таблице.

Скетч. Проверка microSD карты памяти

Для проверки подключения sd модуля к плате Ардуино и флэш памяти используйте стандартный скетч из библиотеки SD.h — CardInfo (пример кода размещен ниже). После загрузки программы в микроконтроллер, откройте монитор порта и вы увидите там информацию (смотри скриншот ниже) — файловая система microSD карты, доступный объем памяти и список файлов с датой создания, которые сейчас есть на карте.

#include "SPI.h"
#include "SD.h"

Sd2Card card;
SdVolume volume;
SdFile root;

const int chipSelect = 4;    

void setup(){
   Serial.begin(9600);
   pinMode(SS, OUTPUT);

   // если карта не исправна, есть ошибка в подключении модуля - выводим сообщение
   while (!card.init(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed"); } 

   // определяем тип карты и выводим его в COM-порт
   Serial.print("\nCard type: ");
   switch(card.type()) {
     case SD_CARD_TYPE_SD1:
        Serial.println("SD1");
        break;
     case SD_CARD_TYPE_SD2:
        Serial.println("SD2");
        break;
     case SD_CARD_TYPE_SDHC:
        Serial.println("SDHC");
        break;
     default:
        Serial.println("Unknown");
   }
  
   // инициализация файловой системы
   if (!volume.init(card)) {
      Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
      return;
   }

   // вычисляем размер первого раздела на карте
   uint32_t volumesize;
   Serial.print("\nVolume type is FAT");
   Serial.println(volume.fatType(), DEC);
   Serial.println();
  
   // вычисляем объем памяти карты в Кб и Мб
   volumesize = volume.blocksPerCluster();
   volumesize *= volume.clusterCount();
   volumesize *= 512;
 
   Serial.print("Volume size (Kbytes): ");
   volumesize /= 1024;
   Serial.println(volumesize);
 
   Serial.print("Volume size (Mbytes): ");
   volumesize /= 1024;
   Serial.println(volumesize);

   Serial.println("\nFiles found on the card (name, date and size in bytes): ");
   root.openRoot(volume);
   // выводим список файлов в COM-порт
   root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop(void) {
  
}

Пояснения к коду:

  1. в дальнейшем, после диагностики целостности карты памяти и правильного подключения sd модуля к плате, от проверки типа microSD, вычисления объема памяти карты и вывода списка файлов на флэшке можно отказаться.



Программа для проверки sd модуля и карты памяти
Программа для проверки sd модуля и карты памяти

Скетч Ардуино запись на SD карту данных

Следующий пример кода позволяет открыть файл test.txt с карты памяти для записи (если файла с таким именем нет, то он будет создан) и сохранить в нем строчку текста «testing 1, 2, 3». После этого файл следует обязательно закрыть, чтобы все данные в нем сохранились. И уже вся информация с файла выводится на COM-порт Arduino IDE. Загрузите скетч для записи файла на SD карте и откройте монитор порта.

#include "SPI.h"
#include "SD.h"

File myFile;

const int chipSelect = 4;    

void setup(){
   Serial.begin(9600);
   pinMode(SS, OUTPUT);

   // если карта не исправна, есть ошибка в подключении модуля - выводим сообщение
   while (!SD.begin(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed"); }
 
   // открываем файл, в котором будем сохранять информацию
   myFile = SD.open("test.txt", FILE_WRITE);
   // если файл открылся, сохраняем в нем строчку "testing 1, 2, 3"
   if (myFile) {
      Serial.println("Writing to test.txt");
      myFile.println("testing 1, 2, 3");
      myFile.close();
   }
   // иначе выводим ошибку об открытии файла
   else { Serial.println("error opening test.txt"); }
 
   // снова открываем файл с sd карты для чтения
   myFile = SD.open("test.txt");
   // если файл открылся, выводим информацию с него на монитор порта
   if (myFile) {
      Serial.println("\ntest.txt:");
      while (myFile.available()) {
         Serial.write(myFile.read());
      }
      myFile.close();
   }
   // иначе выводим ошибку об открытии файла
   else { Serial.println("error opening test.txt"); }
}

void loop(){

}

Пояснения к коду:

  1. при работе с sd card module в Arduino IDE нельзя открывать несколько файлов одновременно, перед открытием нового файла, старый надо закрыть;
  2. при каждой перезагрузке программы новые данные в файл будут добавляться, а не перезаписываться (смотри скриншот ниже).
Запись информации в файл на sd card Arduino
Запись информации в текстовый файл на sd card Arduino

Скетч Ардуино чтение данных с micro SD card

Следующий код позволяет вывести на монитор порта информацию о размере файла test.txt из предыдущего примера, а также всю информацию, которая была в него записана. Отметим, что имя файла на SD карте памяти не должно содержать более 8 символов (букв), не включая расширение. А библиотека SD.h не чувствительна к регистру букв в имени файла, т.е. «TEST.txt» и «test.txt» — это один и тот же файл.

#include "SPI.h"
#include "SD.h"

File myFile;

const int chipSelect = 4;    

void setup(){
   Serial.begin(9600);
   pinMode(SS, OUTPUT);

   // если карта не исправна, есть ошибка в подключении модуля - выводим сообщение
   while (!SD.begin(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed"); }
 
   // открываем файл с sd карты для чтения
   myFile = SD.open("test.txt");
   // если файл открылся, узнаем его размер и выводим информацию
   if (myFile) {
      Serial.print(myFile.size());
      Serial.println(" Kb");
      Serial.println("\ntest.txt:");
      while (myFile.available()) {
         Serial.write(myFile.read());
      }
      myFile.close();
   }
   // иначе выводим ошибку об открытии файла
   else { Serial.println("error opening test.txt"); }
}

void loop(){

}

Пояснения к коду:

  1. библиотека SD.h не чувствительна к регистру букв, т.е. команды SD.open("test.txt"); и SD.open("TEST.txt"); откроют один и тот же файл.

Заключение. Мы рассмотрели несколько возможностей работы с sd модулем для Ардуино Уно для чтения и записи файлов на sd карту памяти. Данный модуль будет полезно использовать в проектах, где требуется периодически сохранять информацию. Например, если требуется ежедневно сохранять информацию с датчика bmp180 (GY-68) Arduino об атмосферном давлении и температуре окружающего воздуха.



2 Replies to “Подключение SD карты к Ардуино”

  1. Спасибо! Датчик DHT уже встраивали в схему с microSD, интересно было бы посмотреть как происходит запись данных на SD карту.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.