Модуль SD карты

Описание

Универсальный модуль со слотом под SD карту. Дешевый и простой в эксплуатации модуль будет полезен в тех случаях, когда требуется дополнительная память для хранения данных. Идеально подходит для хранения картинок, музыки, видео и т.д.

Технические характеристики

  • рабочее напряжение: 4,5-5,5В
  • потребляемый ток 80 мА
  • поддержка карт: SD
  • файловая система: FAT 16
  • поддержка карт памяти SD: до 2Гб

Физические размеры

  • Модуль (Д х Ш х В): 51 х 31 х 11 мм

Плюсы использования

  • Простое и недорогое решение для работы с данными
  • Прост в подключении

Минусы использования

  • Не поддерживает карты выше 2 Гб

Примеры подключения и использования

Пример 1: В примере иллюстрируется подключение модуля к контроллеру и тестирование работы карты (Пример взят из среды разработки для Ардуино). (Примеры тестировались на контроллере Smart UNO)

Схема подключения:

Скетч для загрузки:

// Подключение библиотек SPI и SD:
#include <SPI.h>
#include <SD.h>
 
// установка переменных, используемых функциями библиотеки SD:
Sd2Card card;
SdVolume volume;
SdFile root;
 
// измените эту переменную  в зависимости от подключения модуля и использования шилдов;
// Ethernet shield: пин 4
const int chipSelect = 4;
 
void setup() {
  // Инициализация сериал порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ожидание подключения к Serial порту. Только для собственных USB портов
  }
 
 
  Serial.print("\nInitializing SD card...");
 
 
  // инициализация карты, и проверка работает ли модуль с данной картой
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }
 
  // Вывод типа карты
  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");
  }
 
  // Теперь мы попробуем открыть  'volume'/'partition' (том/раздел) - файловая система должна быть FAT16 или FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }
 
 
  // вывод типа и размера первого FAT-тома
  uint32_t volumesize;
  Serial.print("\nVolume type is FAT");
  Serial.println(volume.fatType(), DEC);
  Serial.println();
 
  volumesize = volume.blocksPerCluster();    // кластеры и коллекции блоков
  volumesize *= volume.clusterCount();       // получим много кластеров
  volumesize *= 512;                            // на SD карте блоки всегда по 512 байт
  Serial.print("Volume size (bytes): ");
  Serial.println(volumesize);
  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);
 
  // Вывод всех файлов с карты с датой и размером
  root.ls(LS_R | LS_DATE | LS_SIZE);
}
 
 
void loop(void) {
 
}

Пример 2: В примере иллюстрируется подключение модуля к контроллеру и запись данных в файл, который создается на карте памяти. (Примеры тестировались на контроллере Smart UNO)

Схема подключения:

Скетч для загрузки:

#include <SD.h>
File dataFile;  // файл для записи данных
char* DATA_FILE_NAME = "data.txt";  // имя файла
 
void setup()
{
  Serial.begin(9600);
 
  // инициализация карты
  Serial.print("Card-initializing begins...");
  if (!SD.begin(4)) {
    Serial.println("Card-initializing failed");
    return;
  }
  Serial.println("Card-initializing done");
}
 
void loop()
{
 
  //получение количества секунд со старта ардуино
  int seconds = millis() / 1000;
 
  //Открытие файла (если его нет, то он создастся)
  dataFile = SD.open(DATA_FILE_NAME, FILE_WRITE);
 
  //запись данных в файл
  dataFile.print(seconds);
  dataFile.println(" seconds left from the start");
 
  //закрытие файла     
  dataFile.close();
 
  //контрольный вывод в монитор порта
  Serial.print(seconds);
  Serial.println(" seconds left from the start");
 
  //задержка 3 секунды
  delay(3000);
 
}