- Arduino запись на sd карту
- Подключение sd карты к ардуино
- Описание модуля для SD карты памяти
- Платы Arduino для работы с SD
- Подключение SD и microSD к ардуино
- Как использовать SD-карту с Arduino?
- Комплектующие
- Когда нужна SD-карта
- Подключение Arduino к адаптеру карт
- Тестовая программа
- Запись в файлы на SD-карте
- Чтение из файла, хранящегося на SD-карте
- Модуль SD карты и Arduino
- Что необходимо знать при использовании SD карт с Arduino
- Форматирование SD карты
- Подключение модуля SD-card к Arduino
- Загрузка библиотеки и первый запуск SD карты
- Запись данных на SD карту через Arduino
- Считывание данных с SD карту через Arduino
- Рекурсивная запись/считывание информации из файлов
- Другие полезные функции
- Подключаем SD карту к DUE. Собираем 32-х битную плату управления на Ардуино DUE и RAMPS 1.4 (1.5).
- Подпишитесь на автора
Arduino запись на sd карту
Подключение 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:
Как использовать SD-карту с Arduino?
Отвечаем на вопрос читателя о том, как можно использовать модуль SD-карты для проектов Arduino с большим объемом данных, которые требуют больше памяти.
Комплектующие
Для того, чтобы платы Ардуино работали с SD-картами нам нужны следующие комплектующие проекта:
- Arduino UNO
- Адаптер SD-карты
- Провода-перемычка
Когда нужна SD-карта
Некоторые проекты могут собирать большое количество данных, таких как данные датчиков, считываемые в течение месяца, которые вы хотите хранить постоянно. Этот большой объем данных, вероятно, не поместится в EEPROM. Кроме того, вы не сможете удобным образом перенести информацию на компьютер таким способом.
Тем не менее, если вы храните данные на SD-карте, вы можете легко переносить созданные файлы и работать с ними на любом компьютере с устройством для чтения SD-карт.
Эта статья покажет как подключить и использовать стандартный модуль SD-карты с Arduino. Весь код и тестовые программы можно найти в виде zip-файла в конце этой статьи.
Подключение Arduino к адаптеру карт
Эти модули обычно используют последовательный периферийный интерфейс (SPI) для связи с микроконтроллером. Поэтому он будет занимать три вывода GPIO на Arduino. Кроме того, вам необходимо подключить линию выбора микросхемы, чтобы включить SD-карту и линии питания для питания адаптера.
Схема подключения Arduino к адаптеру SD-карты
Зеленая (MISO) и желтая (MOSI) линии соединяются с контактами 12 и 11 Arduino. Clock (тактовый сигнал, синий) должен быть привязан к контакту 13. Обратитесь к документации Arduino, если вы не уверены, какие контакты необходимо использовать на Arduino.
Тестовая программа
После выполнения необходимых подключений пришло время подключить SD-карту. В коротком тестовом скетче отображает файлы, присутствующие на карте. Код можно взять ниже или в zip-файле в конце этой статьи как — sd_info.
Как видите, большая часть кода обрабатывает вывод консоли. Всего несколько строк необходимо для подключения к устройству и инициализации файловой системы для чтения и записи файлов. В этом примере, однако, печатаются только некоторые основные свойства карты, такие как размер, тип и сохраненные файлы.
Запись в файлы на SD-карте
Теперь, когда мы знаем, что карта и модуль работают, пришло время записать некоторые значения в файл. Пример SD_write (найденный в архиве) записывает две строки в файл журнала, который хранится на SD-карте.
Часть кода инициализации почти такая же, как в первой программе. Однако вместо открытия тома сама карта SD должна быть инициализирована. После инициализации файл должен быть открыт.
При открытии файла для записи файл создается автоматически, если он не существует. Курсор всегда находится в конце файла. Поэтому, если вы не перемещаете его при открытии файла, вы просто добавляете в него новый текст. Поскольку содержимое хранится на SD-карте, вы можете использовать свой компьютер для чтения содержимого файла.
Чтение из файла, хранящегося на SD-карте
Вы также можете использовать библиотеку SD-карты для чтения файла. Однако по сравнению со стандартными функциями C доступные методы довольно ограничены. Я обнаружил, что в библиотеке SD-карт часто возникают проблемы с поиском файлов в папках. В следующем примере (в папке SD_read в zip-файле) показано, как можно прочитать значение из файла, который содержит показания датчика.
Код должен быть понятным. Единственная реальная разница между этим примером и примером записи заключается в том, что файл читается побайтно. Таким образом, вам нужно перебрать количество байтов, которые вы хотите прочитать из файла. Результат должен выглядеть примерно так:
Адаптеры/модули 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() перед созданием папки для проверки.
Несколько полезных функций для работы с файлами:
При выполнении проектов на 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 МОДУЛЬ
На плате имеется стабилизатор на 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
вот что у меня получилось:
как видно, работа с sd библиотекой очень простая.
Надеюсь кому нибудь будет полезна информация этой статьи.
Жду вашей критики, предложений и пожеланий. Спасибо.
Подключаем SD карту к DUE. Собираем 32-х битную плату управления на Ардуино DUE и RAMPS 1.4 (1.5).
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Собирая плату управления на Aрдуино DUE и RAMPS 1.5 столкнулся с трудностями при подключения SD карты. И не нашёл инструкции, как правильно подключить SD карту к DUE. Вроде всё просто, да есть несколько узких моментов, без решения которых, SD карта работает нестабильно. Пришлось слегка по напрягаться, чтобы всё заработало.
Итак — Aрдуино DUE — базово работает на уровне питания 3,3 вольта, что отличает её от Ардуино MEGA2560, которая работает на базовых уровнях логики 5 вольт. SD карты — работают на уровнях 3,3 вольта. И стандартная панель управления имеет стабилизатор питания для уменьшения питания с 5 вольт до 3,3 вольт и схему согласования логических уровней 3,3 вольта и 5 вольт — схема согласования логических уровней может быть выполнена на резистивных делителях, либо на специализированных микросхеме, либо на транзисторах.
То есть, если подключить стандартный ардуиновский адаптер к DUE, можем получить в лучшем случает нестабильную работу или вообще пожечь порты на процессоре. И ладно если это произойдёт в момент отладки, накладно , но потери только на плату управления. А если будут происходить периодические сбои при работе — то это будет не работа, а сплошная нервотрёпка и срыв сроков печати.
Поэтому нужен либо специальный адаптер — с переключением уровней на 3,3 и 5 вольт, либо специальный на 3,3 вольта. Но на 3,3 вольта адаптеров не нужно — идет просто слот для карты. Адаптера на 3,3 вольта в наличии не было и был куплен просто слот для карты. Конечно, была сперва попытка подцепить обычный адаптер на 5 вольт, но попытка была неудачной и дальше решил не рисковать ни DUE, ни SD-картой. Я подключал к RAMPS 1.5 — в плане подключений ничем не отличается от RAMPS 1.4.
Плата RAMPS — перепаивается для работы с DUE — об этом есть несколько статей , повторятся не буду.
Шлейф подпаивается как показано рисунке, только не к карте , а к контактам слота , отвечающим за подсоединение к номеру контакта карты. Единственно, что следует учесть — D49, подпаивается к внутреннему выключателю в слоте , который включается и замыкает D49 на землю, когда вставлена карта.
По идее, карта должна работать от напряжения 3,3 вольта, которое тоже есть на колодке. И она работает, но не стабильно. Карта при работе потребляет достаточно много тока и ‘подсаживает’ линию — и происходит сброс данных — карта слетает и на экране появляется надпись ‘карта изъята’. Я замерял напряжение- на пин подходит 2,28 вольта(это после перепайки под DUE, а изначально там 5 вольт), а при старте карты напряжение падает до 2,22 вольта. Выход простой — на 5 вольт ставим понижающий стабилизатор до 3,3 вольт и электролитический конденсатор 22 — 500 мкф *6,3-10 вольт. И прошивка начинает видеть карту. Проверял на MK4DUE и на Repetier-Firmware — всё работает. Также пытался подцепить карту на SPI разъем , который находится на плате DUE рядом с процессором, как было написано в одной из статей по данной тематике. Но у меня карта не прочиталась.
Всё запустилось . НО . — карта грузилась 10 секунд в MK4DUE и 2-3 секунды в Repetier-Firmware , а самое главное файлы не выбирались энкодером, а скакали хаотично при вращении ручки энкодера. То есть, чтобы выбрать какой либо файл — надо было сыграть в ‘угадайку’ — тот ли выбрал файл или не тот. И решить эту заморочку не мог длительное время. Спасибо форумчанину — Сергею из Арзамаса (ник Чиффа) — подсказал, как решить данную проблему. У меня просто не совпадало форматирование карты и прописанный формат в прошивке. Переформатировал карту на FAT32 — 64кб ( а было FAT32 — 32кб ) и всё заработало, и при том довольно шустро.
Вот так у меня выглядит макетная сборка — стабилизатор использовал из незадейственного адаптера для карты, только дополнительно припаял конденсатор. Хотя может с нормальным форматированием все будет работать и без дополнительного конденсатора. Но конденсатор добавляет стабильности и уверенности. Макетную сборку со слотом для SD карты после отладки пересоберу на нормальной печатной плате , по позже. Если не куплю промышленный вариант.
На фото прошивка MK4DUE.
Тут же взял данную SD карту и попробовал как она работает, с таким форматированием, на Меге2560 и Марлине — как оказалось на Меге тоже скорость увеличилась раза в три -четыре. А самое главное и печать лучше стала — ушли некоторые артефакты при печати.