Казалось бы, простая вещь — работа с SD, microSD картами. Есть стандартная библиотека, есть руководства, бери и делай. Саму плату можно приобрести на ebay примерно за $0,99. На плате расположен регулятор напряжения, поэтому она может запитываться от 3,3 В и от 5 В, поддерживает  Micro SD card, Micro SDHC, интерфейс стандартный — SPI.

arduino-micro-sd

Однако как только ваш проект перерастает стадию «помигать светодиодом», когда к одной Ардуине уже подключено несколько не самых простых устройств, вот тут и выходят на свет проблемы второго уровня.

Итак, я не собираюсь в 100500 раз пересказывать простые руководства по подключению и работе с microSD картами. Вместо этого ставлю и решаю сразу два вопроса из реальной жизни:

  1. Стандартные hardware SPI пины MOSI, MISO, SCK уже заняты другим модулем.
  2. Возможностей стандартной библиотеки SD не хватает, например, нам нужны длинные имена файлов.

И если первую проблему можно попытаться решить редактированием файла arduino/libraries/SD/src/utility/Sd2PinMap.h , то вторая так просто не решается.

Для решения вышеозначенных проблем познакомимся с библиотекой Arduino FAT16/FAT32 Library, документация находится в каталоге html. Работать с ней так же просто как и со стандартной SD. Из всего что там есть нам понадобится только каталог SdFat.

Карт-ридер и библиотека SdFat использовалась мной для записи отладочной информации.

Вся конфигурация задается в файле SdFat/SdFatConfig.h. Параметр SD_SPI_CONFIGURATION определяет SPI доступ к SD карте:

  • Если SD_SPI_CONFIGUTATION 0 , только класс SdFat определен и SdFat использует быструю кастомную реализацию SPI.
  • Если SD_SPI_CONFIGURATION 1 , только класс SdFat определен и SdFat использует стандартную либу Arduino SPI.h
  • Если SD_SPI_CONFIGURATION 2 , только класс SdFat определен и SdFat использует программные SPI пины.
  • Если SD_SPI_CONFIGURATION 3 , три класса определены SdFat, SdFatLibSpi, SdFatSoftSpi :
    • SdFat использует быструю кастомную реализацию SPI.
    • SdFatLibSpi использует стандартную либу Arduino.
    • SdFatSoftSpi это шаблон класса использующего Software SPI. Параметры шаблона определяют софтовые SPI пины.
    • Смотри пример examples/ThreeCards/ThreeCards.ino для одновременного использования всех трех классов.
Читать ещё :   Как прошить Arduino Pro Mini

Подключаем плату к Ардуино UNO (пины Ардуино могут быть любыми другими):

  • CS   -> 4 пин Arduino
  • MOSI -> 5
  • MISO -> 6
  • SCK  -> 7

Как можно догадаться мы будем работать с программными SPI пинами и поэтому в файле SdFatConfig.h параметр SD_SPI_CONFIGURATION установим в значение 3. Пример скетча:

Далее инициализируем устройство, создаем файл, открываем, пишем, закрываем.

Чтобы добавить данные в конец существующего файла, его надо открыть так:

Вот и всё.

Дополнительные возможности библиотеки SdFat :

  • Поддержка длинных имен USE_LONG_FILE_NAMES, включена по умолчанию.
  • Проверка контрольной суммы USE_SD_CRC
  • Транзакции ENABLE_SPI_TRANSACTION