Взаимодействие между микроконтроллером и SD-картой памяти осуществляется по шине SPI, объединяющей в себе контакты 11, 12 и 13 (на большинстве плат Ардуино), либо 50, 51 и 52 (на Arduino Mega). Помимо перечисленных, еще один контакт должен использоваться для активизации SD-карты. Для этого может использоваться как аппаратный контакт SS - вывод 10 (на большинстве плат Ардуино) или контакт 53 (на Arduino Mega), так и любой другой контакт, указанный в качестве параметра метода SD.begin(). Обратите внимание, что для корректной работы библиотеки SD, аппаратный контакт SS должен быть всегда сконфигурирован как выход, даже в тех случаях, когда он не используется. Указывая этот контакт функции SD.begin(), будьте внимательны, поскольку на разных платах расширения в качестве линии SS могут использовать различные контакты.
На странице библиотеки SD перечислены не все ее функции, поскольку некоторые из них относятся к функциям вспомогательных классов.
Форматирование/подготовка карты памяти
(Примечание: здесь и далее под SD-картой памяти подразумеваются карты формата SD или SDHC стандартных размеров - как SD, так и microSD).
Чаще всего SD-карты продаются отформатированными и готовы к работе сразу после покупки. Если же вы используете карту памяти от фотоаппарата или компьютера, то, вероятнее всего, она не будет работать с библиотекой SD. В этом случае карту необходимо отформатировать в файловую систему, поддерживаемую Arduino.
Слишком частое форматирование SD-карты не желательно, т.к. это уменьшает срок ее службы.
Для форматирования карты вам понадобится компьютер с установленным SD-кардридером. Библиотека SD поддерживает работу с двумя файловыми системами - FAT16 и FAT32, однако, по возможности рекомендуется использовать систему FAT16. Процесс форматирования карты памяти довольно прост и заключается в следующем.
На Windows : щелкните правой кнопкой на значке вашей SD-карты, после чего из контекстного меню выберите пункт "Форматировать...". Убедитесь, что в качестве файловой системы выбрана система FAT.
На Mac OSX: При форматировании устройства, OSX размещает на нем ряд скрытых системных файлов. Чтобы этого избежать используйте алгоритм:
1. Вставьте SD-карту в картридер.
2. Если Вы не знаете как найти номер устройства с SD-картой, то:
2b. Откройте программу Disk Utility (расположенную в меню Applications > Utilities).
2c. Выделите устройство SD-карты (верхний значок), а не том SD-карты (нижний значок)
2d. Перейдите на вкладку Erase.
2e. Выберите *Volume Format: MS-DOS (FAT)* Щелкните Erase... > Щелкните Erase
Название раздела SD-карты изменится в форму устройства UNIX, например, "disk5s1". Этот номер будет изменени на "Untitled". Сейчас мы отформатировали карту в формат MS-DOS FAT 32. Далее можно переформатировать в формат FAT 16.
Если у вас есть номер устройства SD-карта, вам необходим путь к SD-карте устройства.
3. Обычно для Mac путь к устройствам "/dev". Введите в терминальном окне "cd /dev" и нажмите клавишу Enter для перехода в каталог "dev". Введите "ls" и нажмите клавишу Enter. В списке вы увидите номер устройства SD-карты.
Форматирование SD-карты в FAT 16:
4. В программе Disk Utility, выберите устройство SD Card и щелкните на Unmount сверху, но не вынемайте ее. Иконка SD-карты исчезнет с рабочего стола.
5. Перейдите в окно терминала. Будьте внимательны и введите следующую команду. Убедитесь, что вы вводите правильный номер устройства и путь, так как вы можете очень легко стереть ваш жесткий диск в Unix.
newfs_msdos -F 16 (путь до каталога с устройствами)/(номер устройства SD Card)
например, newfs_msdos -F 16 /dev/disk5s1
и нажмите клавишу Enter
На Linux : вставьте SD-карту памяти и откройте терминал. В командной строке наберите "df" и нажмите Enter. Команда выведет системное имя устройства, соответствующее вашей SD-карте - оно будет выглядеть примерно так: "/dev/sdb1". Отмонтируйте SD-карту памяти, не вынимая ее из кардридера. Далее, наберите в терминале "sudo mkdosfs -F 16 /dev/sdb1", где вместо "/dev/sdb1" необходимо указать системное имя вашего устройства. Извлеките и снова подключите SD-карту для проверки ее работоспособности.
Имена файлов
Файловые системы FAT предъявляют определенные требования к именам файлов. Одно из таких требований - использование формата имени 8.3, согласно которому имена файлов должны выглядеть так: "NAME001.EXT", где "NAME001" - строка из 8 (или менее) символов, а "EXT" - расширение файла из 3 символов. В качестве расширений обычно используют сокращения ".TXT" или ".LOG". Что касается имени файла - оно может быть короче 8 символов (например, "mydata.txt" или "time.log"). Подробнее о стандарте 8.3 см. здесь.
Открытие/закрытие файлов
Функция file.write() физически не записывает данные на карту памяти, она лишь помещает их в определенный буфер, который сбрасывается на карту только при вызове функции flush() или close(). Поэтому, после каждого открытия файла не забывайте закрывать его, в противном случае ваши данные могут быть утеряны.
Начиная с версии 1.0, в Арудино реализована возможность одновременного открытия нескольких файлов.
Различные платы расширения
Arduino Ethernet Shield
Плата расширения Ethernet поставляется со встроенным разъемом для SD-карт памяти и при подключении располагается над Ардиуно. В качестве контакта CS для активизации SD-карты используется контакт 4, поскольку традиционный 10 контакт задействован Ethernet-модулем. Поэтому, для работы с SD-картой необходимо использовать команду SD.begin(4).
Отладочная плата Adafruit Micro-SD
Данная плата предназначена для работы с Micro-SD картами памяти. Прежде, чем начать с ней работать, необходимо соединить ее выводы с платой Ардуино несколькими проводниками. Для этого подключите контакт GND к земле, 5V к 5V, CLK - к контакту 13 Ардуино, DO - к контакту 12, DI - к контакту 11, и CS - к контакту 10. Если контакт 10 на Ардуино уже занят - можно использовать любой другой свободный контакт, указав его функции SD.begin().
Плата расширения Sparkfun SD
Плата расширения Sparkfun также крепится поверх Ардуино, но в качестве контакта CS SD-карты использует контакт 8. Поэтому, в данном случае для работы с картой памяти необходимо использовать команду SD.begin(8). Примечание: существует новая версия платы расширения Sparkfun, которая внешне выглядит так же. Основное отличие состоит в том, что на старых версиях платы отсутствует соединение с шиной 3.3В и нет встроенного 6-разрядного инвертора.
Библиотека SD
Справочник
Материалы взяты с официального сайта проекта Arduino и представлены по лицензии Creative Commons Attribution-ShareAlike 3.0 License.
Источник: http://www.arduino.cc/en/Reference/SDCardNotes |