SD-CARD МОДУЛЬ


При выполнении проектов на Arduino большое внимание уделяется отведенной памяти. Arduino не очень щедра на этот ресурс.

ATmega 8
Память программ (FLASH) 8 Кбайт
ОЗУ(RAM) 1 Кбайт
Энергонезависимая память (EEPROM) 512 байт

ATmega168
Память программ (FLASH) 16 Кбайт
ОЗУ(RAM) 1 Кбайт
Энергонезависимая память (EEPROM) 512 байт

Atmega328
Память программ (FLASH) 32 Кбайт
ОЗУ(RAM) 2 Кбайт
Энергонезависимая память (EEPROM) 512 байт

Но есть проекты когда требуется большой банк данных и энергонезависимой памяти (EEPROM) в 512 байт не хватает.
В моем проекте требуется запись огромного количества данных и я столкнулся с такой проблемой как нехватка памяти.
Немного поискав в интернете нашел самое простое и оптимальное решение : использовать SD-CARD. Это не дорогой, но в тоже время действенный метод расширить память на нужный вам размер.
Secure Digital Memory Card.
В настоящее время именно этот формат карт широко распространен на рынке электронных технологий. вспомните любое устройство и в нем обязательно будет присутствовать SD карта.


но как же подключить это маленькое » чудо » к Arduino? это оказалось не очень сложным решением.
SD карты имеют SPI интерфейс. Давно знакомый нам и полюбившийся.
Выводы SD карты имеют следующие обозначения:

А это значит , что карту можно подключать напрямую к Arduino с небольшим дополнением:входы карты рассчитаны на 3,3 вольта. хотя сколько я не работал с картой, мне это не мешало.
Многие умельцы делают разные shield для работы с SD картами:


на нижнем фото представлен тот самый преобразователь уровней(резисторный делитель). Выглядит не очень эстетично, но зато работает.
Я же подумал зачем заморачиваться и приобрел готовый shield:SD-CARD МОДУЛЬ


Размеры:
длина  - 46 мм
ширина - 30 мм

На плате имеется стабилизатор на 3,3 В. питать данный модуль можно от 5 В Arduin’ы. так же на плате имеется гребенка 8*2. нижний ряд дублирует верхний.
с описанием модуля закончили, теперь перейдем к работе с ним.
В Arduino IDE есть готовая библиотека SD для работы с SD картами.

В библиотеке примеров Arduino уже имеется четыре тестовые программы для SD карт:
CardInfo — вывод характеристик карты;
Datalogger — пример простого журнала датчиков;
DumpFile — чтение файла и вывод его в последовательный порт;
Files — создание и удаление файла;
ListFiles — вывод списка файлов;
ReadWrite — запись/чтение файла;
Подробное описание можно найти по ссылке.

В библиотеке предусмотрены 2 класса :
SD class — доступ к карте и управление каталогами и файлами;
File class — чтение и запись отдельных файлов;

Пройдемся по функциям:

SD class:
-> begin(CS) — инициализирует библиотеку. chipSelect по умолчанию является 10 пин и он обязательно должен быть задан как выход, иначе библиотека не будет работать;

-> exists(filename) — проверяет существование файла или каталога;

-> mkdir() — создание каталога (замечу, что исключительно каталога )

-> open() — открывает файл на карте для записи. Возможен вариант SD.open(filepath, mode)- где mode FILE_READ запись с начала или FILE_WRITE -чтение и запись, начиная с конца файла;

-> remove() — удаление файл;

-> rmdir() — удаление каталога;

все эти функции возвращают false если не функция выполнилась или true если выполнилась.

File class:
-> available() — проверка, есть ли доступные байты для записи. Возвращает их количество;

-> close() — закрытие файла;

-> flush() — сохранение файла;

-> peek() — считывание байта из файла без продвижения к следующему;

-> position() — получение позиции, куда будет записываться или читаться файл;

-> print() — запись в файл данных. возможен такой вариант: file.print(data, BASE) — где BASE в какой системе исчислений писать;

-> println() — запись в фал с переносом каретки;

-> seek() — проверка существования положения в файле;

-> size() — получение размера файла в байтах;

-> read() — возвращение бит из файла с переходом к следующему;

-> write() или write(data,buf) — запись данных в файл;

теперь рассмотрим пример:

/*
  SD card read/write



 */

#include <SD.h>

File myFile; // создаем объект класса File

void setup()
{
 // открываем serial порт
  Serial.begin(9600);



  Serial.print("Initializing SD card...");

   pinMode(10, OUTPUT);
 //задаем 10 пин на выход, для корректной  работы библиотеки

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // Открываем файл. обратите внимание, что только один файл может быть открыт ,
   // Так что вы должны закрыть этот перед открытием другого.
  myFile = SD.open("test.txt", FILE_WRITE);

  // если файл открыт , написать в него:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
	// close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // если файл не открылся, печатаем ошибку:
    Serial.println("error opening test.txt");
  }

  // повторно открываем файл для чтения:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // читаем из файла, пока не закончатся биты для чтения:
    while (myFile.available()) {
    	Serial.write(myFile.read());
    }
    // закрываем файл:
    myFile.close();
  } else {
  	// если файл не открылся, печатаем ошибку:
    Serial.println("error opening test.txt");
  }
}

void loop()
{
	// здесь ничего не происходит
}

Теперь узнав как это все работает, напишем что нибудь свое. Мне стала интересна скорость записи и чтения. Переработаем немного
пример который мы разобрали выше:

#include <SD.h>

File myFile;
unsigned int time, dt1, dt2, i;
const byte CSPin = 10;
byte x;

const unsigned short len = 1024;

void setup(){
    Serial.begin(9600);
    Serial.print("Initializing SD card...\n");
    pinMode(CSPin, OUTPUT);

    if( !SD.begin(CSPin)) {
        Serial.println("initialization failed!");
        return;
    }

    Serial.println("initialization done.");

    SD.remove("test.txt");

    Serial.print("Write data. ");
    Serial.print(len);
    Serial.println(" bytes...");
    time = millis();
    myFile = SD.open("test.txt", FILE_WRITE);
    if (myFile) {
        for( i=0; i

данные могут отличаться , в зависимости от типа кары sd
вот что у меня получилось :

Байт	 Запись, мс	 Чтение, мс
 1	     25	             2
 256	     35	             11
 1024	     66	             39

как видно, работа с sd библиотекой очень простая.

Надеюсь кому нибудь будет полезна информация этой статьи.
Жду вашей критики, предложений и пожеланий. Спасибо.

ДА ПРИБУДЕТ С ТОБОЙ СИЛА!!!


0 комментариев на «“SD-CARD МОДУЛЬ”»

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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака телеприсутствие управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение