С каким объемом работает библиотека SD.h?
- Войдите на сайт для отправки комментариев
На сомом сайте http://arduino.cc/en/Reference/SD где лежит библиотека написано что работает она с файловыми системами FAT16 и FAT32 и стандартамикарт SD и SDHC. Но вот про объем никто ничего не написал.
Попробовал подключить карту 8ГБ. Скетч из примеров http://arduino.cc/en/Tutorial/CardInfo видит ее как 4ГБ.
Отсюда и возник вопрос - какой максимальный объем поддерживается?
Конечно устанавливать для логгирования карут 128ГБ нет планов, но и карту 2ГБ уже найти проблематично.
А так же может кто объяснит по простому, почему 10 цифровой контакт надо устанавликать как вывод?
// (10 on most Arduino boards, ) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);
есть куча утилит для работы с сд-картой, которые её могут отформатировать в совершенно любой размер.
там же комментарий написан по этому поводу- потому что этот пин (причем не обязательно №10, он зависит от того какая сд-карта используется) зарезервирован библиотекой в качестве выхода для сигнала CS (cable select)
есть куча утилит для работы с сд-картой, которые её могут отформатировать в совершенно любой размер.
Дело не в форматировании под какой либо объем. Вопросс именно такой - С каким объемом работает библиотека SD.h? Если кто в курсе ткните в описание или документацию.
По поводу пина 10
Там написано, что для корректной работы библиотеки он должен быть именно OUTPUT. А каокй пин будет соединятся к CS кардридера неважно. В примере это 4 пин. Отсюда и вопрос если у меня управляет 4 или 8 пин то почему библиотеке важно чтобы 10 был непременно OUTPUT? Может это както связано с родным Ethernet шилдом Arduino?
смотрите стандатрты юсб версия 1.1 больше 4 Гб данный формат не поддерживает.
вот коменты авторов либы SDfat lib на которой базируется стандартная ардуиновская SD либа.
Get the "TinyFAT" Arduino Software Library here:
You can find the latest version of the library at http://www.henningkarlsen.com/electronics
The library supports FAT16 formatted SD cards up to 2GB in size. 4GB FAT16 formatted SD cards might work, but is untested. Long filenames are not supported. Keep your filenames compliant with the old 8.3 standard. The SD card should be connected to the SPI-pins on your Arduino. Pin connections are available in the documentation in the download.
NOTE: This library worked well with a 1GB SD card that was formatted FAT16. This library will NOT work with larger cards that are formatted FAT32.
я бы не советовал использовать ничего, что превышает рекомендованные ограничения: имена файлов 8.3, fat16, 2Gb ( или fat32, 1Gb)
смотрите стандатрты юсб версия 1.1 больше 4 Гб данный формат не поддерживает.
Пробовал другую библиотеку https://github.com/greiman/SdFat
Пример который идет в комплекте к данной библиотеке показал размер правильно. Но заполнять на все 8ГБ я карту не пробовал, поэтому не могу сказать насколько корректно работает библиотека.
Пример тут - https://github.com/greiman/SdFat/blob/master/SdFat/examples/SdInfo/SdInfo.ino
вот коменты авторов либы SDfat lib на которой базируется стандартная ардуиновская SD либа.
я бы не советовал использовать ничего, что превышает рекомендованные ограничения: имена файлов 8.3, fat16, 2Gb ( или fat32, 1Gb)
Спасибо за идею по поводу на чем базируется Ардуиновская библиотека SD. SD библиотека из версии 1.5 базируется как раз на этой https://github.com/greiman/SdFat
Но версия в ардуино более старая , от 2009 года и понимает максимум 4ГБ.
А так же может кто объяснит по простому, почему 10 цифровой контакт надо устанавликать как вывод?
// (10 on most Arduino boards, ) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);
Потому что, что бы SPI начал работать как master, а не slave, необходимо аппаратный вывод CS настроить как выход.
Решил попробовать все карты которые были в наличии.
Тест проводился на Arduino UNO. Вналичии 3 карты
1. SANDISK 64GB
2. DNS 8GB
3. KINGSTON 4GB
Для начала использовал скетч из примеров для библиотеки SD
Из тестов видно, что карта SANDISK 64GB распозналась но на ней не найдена FAT16/FAT32. Это именно так потому как карта отформатирована в exFAT.
Карны DNS 8GB и KINGSTON 4GB определились как 4GB с небольшой лишь разницей в объеме.
Далее взял скетч из библиотеки SDFat. Ну и саму библиотеку конечно подключил :-)
В случае с библиотекой SDFat размер всех карт определен корректно. Но карта 64GB тоже не прошла инициализацию все по той же причине что отформатирована в exFAT.
На этом видимо вопроссы закрыты.
// or the SD library functions will not work.
pinMode(10, OUTPUT);
У меня подключен не 10, а 8-й пин. Строчку в примере "//pinMode(10, OUTPUT);" закомментировал, но все работает нормально, карточка определяется, лог пишется. Вот поэтому тоже задумался - Зачем эта строка?
У меня подключен не 10, а 8-й пин. Строчку в примере "//pinMode(10, OUTPUT);" закомментировал, но все работает нормально, карточка определяется, лог пишется. Вот поэтому тоже задумался - Зачем эта строка?
К стати у библиотеки с которая взята за основу стандартной в Arduino таких требований про 10 пин нет. Я думаю это применимо для родного шилда - http://arduino.cc/en/Main/ArduinoEthernetShield
А так как у меня SD и Ethernet отдельные модули то видимо и так нормально работать будет.
По поводу пина 10
Там написано, что для корректной работы библиотеки он должен быть именно OUTPUT. А каокй пин будет соединятся к CS кардридера неважно. В примере это 4 пин. Отсюда и вопрос если у меня управляет 4 или 8 пин то почему библиотеке важно чтобы 10 был непременно OUTPUT? Может это както связано с родным Ethernet шилдом Arduino?
Зачем фантазировать ? Повторю - там всё это разъясняется в комментах. В примере это 4й пин действительно потому что хардварно на этом шилде CS пин -4. У вас управляет 8й только потому что 10й тоже выставлен как OUTPUT. Смотрим комменты:
// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
Перевожу : На Ethernet шилде в качестве CS используется пин 4. Обратите внимание, что "хардваный" CS пин, даже если он не используется в качестве CS, должен быть установлен в OUTPUT (на большинстве ардуинок это пин 10, на меге пин 53), иначе функции библиотеки SD работать не будут.
У меня в примере используется пин4, я подключил пин8, строку //pinMode(10, OUTPUT); закомментировал, т.е. отключил. Все работает прекрасно. Карта иницилизируется, лог пишется. Может что-то еще должно делаться, но я не знаю чего. Все что мне нужно работает.