Подключение sd card к arduino: схема и необходимая библиотека

Подключаем SD-карту к нашему Ардуино

В большинстве проектов с Ардуино необходимо устанавливать вспомогательное хранилище для медиафайлов, будь это видео или аудио. Если возникает необходимость хранить и обрабатывать информацию, а стоковой флеш-памяти плат вам не хватает, то есть несколько решений.

Можно докупить специальную плату, обеспечивающую быстрый доступ к данным, но и стоящую не малых денег. Если же у вас нет желания тратиться, то расширить стоковую память платы можно и с arduino card SD, дабы не было проблем с записью и стиранием стоковых утилит с чипов. Однако далеко не все новички знают, как правильно подключать флешку к чипу и что для этого нужно. Давайте разберёмся во всех нюансах и узнаем, какие подводные камни такого решения вас поджидают.

Что необходимо знать при подключении SD card к Arduino

Прежде чем подсоединять что-либо, следует изучить нюансы, которые будут подстерегать вас на каждом шагу. Первое, с чем вам придётся столкнуться, это вольтаж карт памяти, ведь они рассчитаны на 3.3 В, что является стандартом.

Неудобство заключается в том, что для записи данных необходима и соответствующая сила тока, вплоть до 100 мА, если речь о действительно больших массивах информации. Соответственно, необходимо обеспечить всю систему хорошим источником питания, но основная проблема заключается в том, что карты крайне привередливы. Если вы будете пользоваться резисторами и длинными проводниками, то скорость записи и чтения может упасть в разы ниже средних показателей, поэтому следует обзавестись небольшими коннекторами и убрать, по возможности, всё сопротивление из цепочки для питания логики.

Чтобы не сжечь всю плату, достаточно прикупить преобразователи переменного и постоянного тока, лучше всего подойдут приборы под HEF4050 и 74FHC125 базу.

Далее, учтите, что система предоставляет несколько режимов записи данных. У вас в распоряжении:

  1. SPI. Универсален, и подойдёт для любого микроконтроллера, а подключение требует всего четыре пина.
  2. SDIO. Хороший выбор, если необходима высокая скорость передачи информации, но с arduino microsd реализуется крайне тяжело.

Учитывайте и формат карты, он не влияет ровным счётом ни на что, кроме размера вашей конечной поделки. Если необходимо серьёзно урезать габариты, то хорошим выбором станет microSD.

Сама по себе флешка – это небольшой чип со специально выделенными секторами, а соответственно, структур, обязательных к использованию, вы здесь не найдёте. Такой подход удобен для быстрого форматирования и сохранения данных в подходящей файловой системе.

Большинство устройств на сегодняшний день пользуются форматами NTFS, FAT32 и FAT16. Но чем сложнее система, тем больше памяти для работы arduino SD придётся выделить, что чревато последствиями в виде подлагиваний и плохой скорости отклика.

Схема подключения SD card к Arduino

Предварительно отформатировав карту памяти, приступайте к её подключению.

Платы расширений облегчат задачу, ведь они позволят урегулировать напряжение до необходимых нам 3.3 В, а контроллеры уровня преобразуют питание логики в подходящие для флешки.

Плата расширений потребуется под микроконтроллеры до 5 В, учитывайте это при её выборе. Главное достоинство Ардуино – простота, и подключение вспомогательных модулей не стало исключением. Лучшим выбором станет именно структура запуска через hardware SPI пины, дабы не усложнять новичкам жизнь. Нам потребуются 13, 12 и 11 цифровые пины, а также четвёртые, чтобы наладить «chipslave select» цепь. Под это, зачастую, берётся 10 пин, но если вы знаете, что делаете, можете выбрать и более подходящий.

Распиновка подключения Arduino Uno к SD

Обратите внимание на то, что в зависимости от форм-фактора и типа платы Ардуино, точки подключения могут варьироваться. Например, для меги необходимо соединить цепь с 50, 51, 52 и 53 слотом.

Модуль SD card Arduino Uno Arduino Mega
VCC 3.3V или 5V (проверьте описание платы) 3.3V или 5V (проверьте описание платы)
CS 4 53
MOSI 11 51
CLK 13 52
MISO 12 50
GND GND GND

В последующие разы вы можете поэкспериментировать с последними пинами на обеих картах, но поначалу лучше выбрать именно те, что указаны выше. Так вы сможете отработать код, избавившись от нежелательных поломок и осечек, что значительно упростит задачу в будущем. Оставшиеся 5 В и GND подсоединяйте к соответствующим портам, здесь никаких особых инструкций нет.

Еще один вариант наглядной схемы:

В конце процедуры необходимо замкнуть CD в заземление, так система не сможет инициализировать карту памяти. Но, в случае необходимости, всегда можно применить резисторы в 10 кОм и вспомогательные порты, однако мы не будем останавливаться на этом пине, так как сейчас он нам не нужен.

Загрузка библиотек и запуск SD card на Arduino

Чтобы подсоединиться к SD карте и свободно передавать на неё данные, потребуется написать немало кода, однако здесь нам поможет встроенная библиотека SD.

Открыв подменю «образцов», найдите заготовку «cardinfo», именно её мы не будем использовать в качестве прописной функции при загрузке информации. Скетч пригодится лишь для проверки, опознаётся ли дополнительная память на устройстве. Проверяйте chipSelect, учитывая, что подключение идёт через 10 пин.

Если всё прошло удачно, то на экран выведется информация о типе файловой системы и объёме вашей SD-карты. Если же производитель подсунул вам не лучший продукт, могут возникнуть ошибки. Здесь проще купить новую флешку, чем бороться с ошибками файловой системы, изначально заложенными в девайс.

Когда вы получите отклик от системы, можете начинать подгружать библиотеки и нужные вам файлы. SD-карта полностью работает и подключена, однако не забудьте протестировать несколько типов файловых систем, дабы подобрать оптимальный вариант по скорости и потреблению ресурсов. В каждом конкретном случае эти параметры будут разными, поэтому не бойтесь экспериментировать.

Заключение

SD-карта – необходимый элемент любой системы, в которой вы собираетесь использовать медиафайлы. Это будет хорошим решением как для приборов под «умный дом», так и для самодельных плееров. Однако не забывайте, что качество конечного продукта приравнивается к качеству его худшего компонента, и не стоит экономить на SD-картах.

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

Если в вашем проекте необходимо обеспечить загрузку аудио, видео, графики, записи любых данных, возникает вопрос внешней памяти.

В большинстве микроконтроллеров встроенная память очень ограничена. Например, даже чип на Arduino Mega (Atmega2560) предоставляет всего лишь 4 Кбайта EEPROM для хранения данных. Конечно, флеш памяти побольше – 256 кбайт, но при ее использовании возникают проблемы с записью. Самое банальное – можно нечаянно перезаписать саму программу, загруженную на плату.

При загрузке графических или музыкальных файлов вам наверняка понадобится минимум 1 мегабайт хранилища. А если загружается больше информации? В этом случае можно использовать те же средства, что и в современных видеокамерах, сматфонах, mp3 плеерах: карта памяти!

Карты памяти часто называют SD или microSD картами и они позволяют хранить гигабайты информации. Продаются карты памяти в любом магазине электроники, так что проблем с покупкой не будет. Кроме того, на большинстве компьютеров есть кард-ридеры, так что с передачей полученной информации проблем не будет.

Что необходимо знать при использовании SD карт с Arduino

Первое. Карты рассчитаны на 3.3 В. При записи данных сила тока может достигать больших значений: до 100 мА и даже больше! Это говорит о том, что надо обеспечить качественное питание 3.3 В для карты. Кроме того, надо иметь источник питания 3.3 В для питания логики. SD карты очень чувствительны – использование резисторов и длинных проводников при подключении приводят к значительному падению скорости передачи данных. Так что используйте максимально короткие коннекторы и избегайте резисторов в цепи питания логики. Вместо этого можно использовать преобразователи уровня на базе чипов HEF4050, 74LVX245 или 74AHC125.

Второе. Есть два режима: SPI и SDIO. SDIO отрабатывает быстрее, но реализовать его при работе с Arduino сложно. SPI режим гораздо проще наладить при работе с любым микроконтроллером. Для подключения в режиме SPI понадобится всего четыре пина (более детально мы рассмотрим этот вопрос дальше).

SD карты выпускаются в двух форм-факторах: microSD и SD. Подключение, программа, структура и т.п. Для них одинакова. Единственное отличие – размер. Micro SD карты значительно меньше по габаритам.

Третье. SD карты представляют из себя чип с отдельными секторами. То есть, определенной структуры, которую вы обязаны использовать нет. Это значит, что карту можно отформатировать под файловую систему Linux, GFAT (DOS) или Mac. На ней вообще может отсутствовать файловая система! При этом 99% компьютеров, камер, MP-3 плееров, GPS-навигаторов для использования требуют формат файловой системы FAT16 или FAT32. Загвоздка заключается в том, что в микроконтроллерах вроде Arduino выделяется относительно большой процент памяти при работе со сложными файловыми системами.

Форматирование SD карты

В принципе, вы можете использовать SD карту без файловой системы, но это не очень удобно. Для работы с Arduino лучше использовать формат FAT16 или FAT32. В основном это связано с наличием соответствующих библиотек. Некоторые поддерживают один формат, некоторые – другой. Библиотека Arduino SD поддерживает оба формата.

При покупке новой SE карты высока вероятность, что она уже будет форматирована под файловую систему FAT. Проблемы все равно могут появиться. Неизвестно, как именно ее форматировал производитель. Если карта старая, ее желательно тоже проверить. Библиотека Arduino SD, которую мы будем использовать поддерживает оба формата: FAT16 и FAT32. Если у вас небольшая карта, например, 8-32 мегабайта, она может быть форматирована под FAT12, которая не поддерживается. Придется ее форматнуть под 16 или 32. В общем, рекомендуем в любом случае отформатировать карту перед ее использованием.

Для форматирования можно использовать например эту программу: SD Card Formatter

На странице загрузки есть инструкция по использованию программы. Проблем у вас возникнуть не должно.

Ссылки для заказа оборудования, которое использовалось в проекте из Китая

Подключение модуля SD-card к Arduino

После предварительной подготовки SD карты, можем приступить к подключению платы расширения microSD и Arduino. Плата расширения значительно облегчает подключение. На ней установлен регулятор, который преобразовывает напряжение 3.3 – 6 В в 3.3 В (I2C). Есть регулятор уровня, который преобразует питание логики из 3.3-5 В в 3.3 В. Это значит, что плату расширения можно использовать с микроконтроллерами 3.3 В и 5 В.

В нашем примере использован микроконтроллер Arduino. Если вы используете другой микроконтроллер, схема подключения и код могут отличаться.

Лучше всего подключать 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). Но для первого раза рекомендуем подключать именно так для корректной отработки кода, который будет приведен ниже.

  • Подключите пин 5V к пину 5V на Arduino
  • Подключите пин GND к пину GND на Arduino
  • Подключите Пин CLK к пину 13 или 52
  • Подключите DO к пину 12 или 50
  • Подключите DI к пину 11 или 51
  • Подключите CS к пину 10 или 53

Есть еще один коннектор – CD – это пин для инициализации SD карты. Он замыкается на землю, когда карта установлена. Если вы хотите его задействовать, подключите подтягивающий резистор (около 10 кОм) и дальше к другому пину. В данном примере рассматривать эту опцию мы не будем.

Все! Мы готовы отжигать!

Загрузка библиотеки и первый запуск SD карты

Передача данных на SD карту – это большой кусок кода, но к счастью для нас есть интегрированная в Arduino IDE библиотека под названием SD (название в точку, не правда ли? :)). Найти эту библиотеку можно в подменю Examples. В подменю Examples выберите скетч CardInfo.

С помощью этого скетча вы не сможете передавать данные, а просто получите ответ, опознана ли подключенная SD-карта. Очень полезный скетч, если необходимо узнать, поддерживается ли работа именно с вашей картой. Перед работой с новой картой обязательно проводите эту проверку!

В начале скетча проверьте переменную chipSelect. В данным примере мы подключаемся к 10 пину, соответственно переменная принимает значение 10.

Теперь устанавливаем SD карту в плату расширения и загружаем скетч.

Откройте окно серийного монитора в Arduino IDE, наберите какой-то символ и нажмите Send. Скорее всего у вас отобразится нечто подобное:

Обратите внимание, выдалась информация, что тип файловой системы – FAT16, размер карты (около 2 Гб, что в данном случае соответствует действительности) и т.п.

Если вам попалась плохая карта (в первую очередь, это карты от неизвестных производителей), отобразится примерно следующее:

В данном примере карта отвечает на запросы, но некорректно. Обратите внимание, рядом с Product ID выводится “N/A”, отсутствуют Manufacturer ID и OEM ID. Кроме того, карта возвращает ошибки SD errors. В общем, карта неработоспособна. Можно попробовать ее форматировать. Если после форматирования ошибки не исчезли, использовать ее не получится.

Попробуйте извлечь SD карту и вновь запустить программу. В окне серийного монитора появится следующее:

Это ошибки появляются, если не получилось даже инициализировать карту. Первая возможная причина: карта повреждена. Вторая: неправильное подключение модуля SD карты к Arduino.

Запись данных на SD карту через Arduino

В приведенном скетче продемонстрированы базовые возможности для записи данных на карту. По сути это основа для работы с модулем SD карты.

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

// на Ethernet шилде CS соответствует 4 пину. По умолчанию он установлен в режим output

// обратите внимание, что если он не используется в качестве CS пина, SS пин на оборудовании

// (10 на большинстве плат Arduino, 53 на Arduino Mega) надо оставить в режиме output.

// иначе функции библиотеки SD library не будут работать.

// открываем файл. Обратите внимание, что открывать несколько файлов параллельно нельзя.

// перед открытием нового файла, старый надо закрыть

myFile = SD.open(“test.txt”, FILE_WRITE);

// если удалось открыть файл, записываем в него:

Serial.print(“Writing to test.txt. “);

myFile.println(“testing 1, 2, 3.”);

// если файл не открылся, выводим сообщение об ошибке:

Serial.println(“error opening test.txt”);

// после setup ничего не происходит

Запустив скетч на выполнение, вы увидите следующее:

После отработки скетча, можете открыть сформированный файл на персональном компьютере. Каждая строка соответствует одному циклу работы программы. То есть, данные добавляются, а не переписываются.

Стоит отметить несколько вещей:

  • Можно одновременно открывать несколько файлов и записывать в тот, который вы выберете.
  • Для записи строк, переменных и т.п. Используются функции print и println()
  • Вы должны закрыть (close()) файл(ы) после завершения, чтобы данные точно записались!
  • Вы можете открывать файлы из подпапок. Например, если вы хотите открыть файл, который находится по адрес /MyFiles/example.txt, вы можете вызвать SD.open(“/myfiles/example.txt”) и все отлично отработает.

Библиотека SD card не поддерживает ‘длинные названия’, так что имена файлов должны быть короткими! Например, IMAGE.JPG – отличное название, datalog.txt – тоже подходит. А вот что-то вроде “My GPS log file.text” не подойдет! Также учтите, названия не чувствительны к регистру. То есть, datalog.txt – это то же самое, что и DataLog.Txt или DATALOG.TXT

Считывание данных с SD карту через Arduino

Теперь разберемся как можно считывать информацию из файла, который хранится на карте. Процесс очень похож на запись. Будем использовать функцию SD.open() с указанием имени файла. Можно вызвать функцию available() (которая сообщит вам, есть ли на карте информация для считывания) и read() из файла, которая вернет следующий байт.

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

// на Ethernet шилде CS соответствует 4 пину. По умолчанию он установлен в режим output

// обратите внимание, что если он не используется в качестве CS пина, SS пин на оборудовании

// (10 на большинстве плат Arduino, 53 на Arduino Mega) надо оставить в режиме output.

// иначе функции библиотеки SD library не будут работать.

// открываем файл для считывания данных:

// считываем все данные из файла:

// если файл не открылся, отображаем сообщение об ошибке:

Serial.println(“error opening test.txt”);

// после setup ничего не происходит

Некоторые важные примечания:

  • Вы можете держать одновременно открытыми несколько файлов и считывать информацию из нужного вам.
  • Read() возвращает байт за единицу времени. Функция не считывает всю строку!
  • В конце надо использовать функцию close() для закрытия файлов, чтобы сократить объем используемой RAM памяти.

Рекурсивная запись/считывание информации из файлов

В этой части мы рассмотрим пример более “продвинутого” использования SD карты. Например, подождем, пока не будут прочитаны все файлы с SD карты или будет воспроизводить с бесконечным повтором музыкальный файл. В последних версиях библиотеки SD library вы можете перемещаться по папкам и вызывать следующий доступный файл с помощью функции openNextFile(). Файлы открываются не в алфавитном порядке, а в соответствии со временем их создания!

Запустите пример скетча SD→listfiles.

Там вы обнаружите подпапку ANIM (в ней находятся файлы с анимацией). Числа после названия файла характеризуют размер файла в байтах. Очень полезная программа, если вы хотите проверить какие именно файлы вызываются с вашей карты.

Стоит отметить несколько вещей:

Другие полезные функции

Есть и другие полезные функции для работы с SD картой. Некоторые из них мы приведем ниже:

  • Если вы хотите проверить наличие файла на носителе, используйте функцию SD.exists(“имя_файла.txt”), которая вернет значение true или false.
  • Удалить файл можно с помощью функции SD.remove(“имя_файла.txt”). Но будьте аккуратны! Файл удалиться полностью. Никакой “корзины” или резервной копии для восстановления не останется.
  • Создать подпапку можно с помощью функции SD.mkdir(“/имя_новой_папки”). Очень удобно для структуризации ваших данных на начальном уровне. Если папка с таким именем уже существует, ничего не произойдет. Не забывайте, что вы можете воспользоваться функцией SD.exists() перед созданием папки для проверки.

Несколько полезных функций для работы с файлами:

Модуль Micro SD Card Reader

Товары

Обзор модулей SD и micro-SD карт к Arduino

Большинство микроконтроллеров обладает очень небольшой внутренней памятью для хранения данных. Arduino – не исключение. Например, Mega имеет всего 4 Кб памяти EEPROM, а Uno и того меньше – всего 1 Кб. А есть проекты на Arduino, которым необходимо работать с большими объемами данных, или хранить в памяти картинки или музыку. Конечно памяти Arduino для этого не хватит. Самый доступный и эффективный вариант увеличения памяти данных для проектов Arduino – использование SD-карты..

Существует множество плат для удобного подключения SD и micro-SD карт к Arduino (рис. 1).

SD-карту необходимо отформатировать в формате FAT16 или FAT32. Можно использовать средства операционной системы или программу SDCardFormatter.

Подключение к плате Arduino

SD-карта взаимодействует с платой Arduino gпо протоколу SPI. Используются 4 контакта,, для Uno это 13-SCK, 12-MISO, 11-MOSI, для пина выбора CS обычно используют 10, 4 но можно любой.

В Arduino IDE есть встроенная библиотека для работы с SD-картами, которая так и называется – SD. Загрузим на плату Arduino пример CardInfo (Файл → Примеры → SD → CardInfo). В последовательный порт выводится информация о файловой системе, емкости SD-карты и список файлов на SD-карте (рис. 4).

Arduino-библиотека SD содержит различные функции, с помощью которыми можно управлять данными.

Пример использования модуля Micro SD Card Reader

Создадим проект сохранения на SD-карте показаний, которые мы будем получать с датчика BME280. Данные должны быть привязаны к времени, для этого будем использовать RTC DS3231.

Подключение sd карты к ардуино

SD и microSD карты могут существенно расширить возможности проектов ардуино, работающих с большими объемами данных: регистраторов данных, метеостанций, систем умного дома. Платы arduino оснащены сравнительно небольшой внутренней памятью, всего до 4 килобайт, включая и флэш-память, и EEPROM. Этой памяти не хватит для записи больших объемов данных, тем более, если плата будет постоянно выключаться или выключаться. Подключение SD карты ардуино в качестве внешнего накопителя позволяет многократно увеличить место для хранения любой информации. Съемные накопители SD стоят дешево, легко подключаются и удобны в использовании. О правильном подключении SD карты к Arduino и пойдет речь в статье.

Описание модуля для SD карты памяти

Работа с памятью SD в ардуино не представляет особых трудностей. Самым простым способом является подключение готового модуля и использование стандартной библиотеки. С этого варианта мы и начнем.

Использование готового модуля обладает различными преимуществами. Это довольно простое и удобное средство для работы с большим объемом данных. Он не требует особых навыков в подключении, все разъемы подписаны прямо на плате. За удобство приходится платить, но стоимость модуля относительно не велика, его легко можно найти по доступным ценам в российских и зарубежных интернет-магазинах.

Универсальный модуль представляет собой обыкновенную плату, на которой помещены слот для карты, резисторы и регулятор напряжений. Он обладает следующими техническими характеристиками:

  • Диапазон рабочих напряжений 4,5-5 В;
  • Поддержка SD карты до 2 Гб;
  • Ток 80 мА;
  • Файловая система FAT 16.

Модуль SD-карты реализует такие функции как хранение, чтение и запись информации на карту, которая требуется для нормального функционирования прибора на базе микроконтроллера.

Естественно, у недорогих модулей карт памяти есть и недостатки. Например, самые дешевые и распространенные модели поддерживают только карты до 4Гб и почти все модули позволяют хранить на SD карте файлы объемом до двух гигабайт – это ограничение используемой в большинстве моделей файловой системы FAT.

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

Платы Arduino для работы с SD

Для работы с SD card существует несколько различных плат:

  • Arduino Ethernet – эта плата оснащена специальным модулем для вывода данных. Для выхода CS используется контакт 4. Для правильной работы нужно применять команду SD.begin(4).
  • Adafruit Micro-SD – это отладочная плата, которая используется при работе с Micro-SD картами.
  • Sparkfun SD – закрепляется сверху Ардуино, для выхода CS использует 8 контакт. В новой версии платы есть соединение с 3.3 В и встроен шестиразрядный инвертор.

Подключение SD и microSD к ардуино

Существует два вида карт – microSD и SD. Они одинаковы по подключению, структуре и программе, различаются же только размером. Перед работой советуется отформатировать карту SD. Обычно новые карты уже отформатированы и готовы к работе, но если используется старая карта, то лучше провести форматирование в файловой системе Arduino. Для проведения процедуры на компьютере должна быть установлена библиотека SD, желательно FAT16. Для форматирования на Windows нужно щелкнуть на иконке карты и нажать “Format”.

Для подключения карты используется 6 контактов, взаимодействие производится по интерфейсу SPI. Она выглядит на плате как разъем на лицевой поверхности с шестью штырями. Чтобы подключить карту, нужны сам контроллер, модуль карты и 6 проводов. Помимо SPI существует режим SDIO, но он сложен в реализации и слабо совместим с Ардуино. SPI легко налаживается для работы со всеми микроконтроллерами, поэтому советуется использовать именно его.

Подключение цифровых выводов производится так: для платы Arduino Nano или Uno контакт MOSI подключается к D11, MISO к D12,SCK к D13, CS к 4, VCC на +5 В,.GND к GND. На плате имеются разъемы для подключения к 3,3 и 5 вольтам. Питание самой карты составляет 3,3 вольт, поэтому проще применять микроконтроллер с таким же питанием, в ином случае нужен преобразователей уровней напряжения. На самых распространенных платах ардуино такой выход есть.

При подключении SD карты нужно учитывать соответствие SPI контактов для разных тип плат Arduino:

Плата Пин MOSI Пин MISO Пин SCK
Arduino Nano, Uno 11 12 13
Arduino Mega2560 51 50 52

Библиотека ардуино для работы с SD и microSD

Для удобства работы с внешними накопителями данных в среде Arduino IDE доступны уже готовые библиотеки. Ничего дополнительно скачивать или устанавливать в большинстве случаев не понадобится.

Для подключения библиотеки в скетче нужно использовать инструкцию include:

Библиотека SPI нужна для правильной работы устройств, подключаемых по SPI.

Библиотечные функции нужно для считывания и записи данных на карту. Библиотека может поддерживать SD и SDHC карты.

Имена записываются в формате 8.3, то есть 8 знаков для названия, 3 для расширения. Путь к файлу записывается с помощью слэшей «/».

Встроенные примеры библиотеки SD

В Arduino IDE встроены готовые примеры для быстрого изучение функций бибилотеки:

  • Card Info – это извлечение информации, хранящейся в SD карте. С ее помощью можно узнать, в какую файловую систему отформатирована карта, наличие свободного места, какие данные записаны.
  • Yun Datalogger – позволяет записывать лог-данные с трех сенсоров на карту.
  • Datalogger – регистрирует и созраняет данные, полученные с датчика на карту.
  • Dump File – считывание данные с карты, передает их в серийный порт.
  • Files – создает и удаляет данные. Существует функция file.write(), которая помещает записанные данные в буфер. Перемещение информации на карту происходит при вызове функций flush() или close(), поэтому важно закрывать его после каждого открытия файла, иначе данные будут потеряны.
  • Read Write – записывает и считывает файлы с карты.

Функции библиотеки SD

Ардуино-библиотека SD содержит различные функции, с помощью которыми можно управлять данными. Функции класса SD:

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

В ответ на все эти функции должно прийти одно из значений – true, в случае удачного завершения операции и false при неудаче.

Создание, редактирование и удаление файлов.

Для работы с файлами в ардуино существует класс File. В него входят функции, которые предназначены для записи и чтения информации с карты:

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

Для корректной работы платы нужно проследить, чтобы был сконфигурирован SS выход.

Скетч примера работы с SD библиотекой ардуино

Ниже приведен скетч, демонстрирующий пример работы с модулем карты памяти.

Создание файла и выбор названия для arduino SD card

Создание файла – одна из самых распространенных задач, возникающих при работе с SD картами в ардуино. Как мы убедились в предыдущем скетче, для создания файла достаточно просто открыт его. Если мы захотим проверить, есть ли такой файл, можно использовать функцию exists():

Функция возвращает TRUE, если файл существует.

Популярной практикой при создании проектов – регистраторов данных является разбивка больших файлов на более мелкие, которые удобнее обновлять и открывать на компьютере. Например, вместо одного очень большого файла datalog.csv на SD карте можно иметь несколько маленьких, добавляя к концу номер по порядку: datalog01.csv, datalog02.csv и т.д.
Вот пример скетча, который поможет вам выполнить эту работу:

Заключение

Как мы с вами убедились, подключить SD карту памяти к Ардуино и использовать ее в проекте не очень сложно. Для этого есть готовые библиотеки в Arduino IDE и самые разнообразные варианты модулей. Приобрести карту памяти можно в любом магазине электроники, они стоят недорого, при этом позволяют существенно расширить потенциал платы Ардуино. С использованием карт памяти можно собирать и сохранять для последующего анализа большие объемы данных. С помощью нашей статьи мы сможете наделить памятью свои исследовательские проекты, создать системы голосового оповещения для умного дома, создать простой wav-проигрыватель и многое другое.

Источники:

http://arduino-diy.com/arduino-SD-karta

http://3d-diy.ru/wiki/arduino-moduli/module-micro-sd-card-reader/

http://arduinomaster.ru/datchiki-arduino/podklyuchenie-sd-karty-k-arduino/

http://arduinoplus.ru/prepodavatel-kursov-programmirovania-i-robototehniki/

Ссылка на основную публикацию