SD-карта не видится с библиотекой SD.h
- Войдите на сайт для отправки комментариев
Для домашних экспериментов потребовался дата логгер. Купил Ардуино уно и Data Logging Shield V 1.0 (со встроенными часами на DS1307Z и преобразователем уровня до 3,3 В.).
С часами всё нормально, а вот с SD-картами проблема: при запуске программы CardInfo или карта не определяется, или не определяется FAT. Перебрал разные SD-карты - от 256 Mb до 16 Gb разных классов. Лишь одну карту (16 Gb) CardInfo обнаружила вместе с FAT, но и то скетч даталоггера не смог создать файлы.
Попробовал использовать примеры не с библиотекой SD.h, а с библиотекой SdFat.h - и все SD-карты программа SdInfo определила правильно!
К сожалению, если описание библиотеки SD.h и примеров даталоггеров можно найти на русском языке, то этого не скажешь о SdFat.h и примерах скетчей на основе этой библиотеки. А я и не программист, и с английским не очень дружу.
В связи с этим два вопроса:
- в чём вероятная причина неработоспособности моего шильда даталоггера с библиотекой SD.h - в плате Ардуино, в шильде или в библиотеке SD.h?
- есть ли в Сети описание SdFat.h и скетча даталоггера на русском языке (я не нашёл)? Если кто знает, дайте, пожалуйста, ссылку.
Попробуйте карту объемом не более 2 гб
Как написал в первом сообщении, использовал разные карты, начиая с объёма 256 Mb. А именно: 256, 512 Mb, 4, 8 и 16 Gb. C библиотекой SD.h они или не определяются, или (в одном случае) в них не пишутся файлы.
Проверьте разводку контактов на шилде. Насколько я помню, CD.h ориентирована на Ethernet Shield, аозможно, разводка отличается. Например, контакт выбора устройства. Или софтверный SPI.
Программа CardInfo из библиотеки SD.h показывает следующее.
Для SD-карты Kingston 512 Mb:
Initializing SD card...Wiring is correct and a card is present.
Card type: SD1
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card
Для SDHC-карты 16 Gb:
Initializing SD card...Wiring is correct and a card is present.
Card type: SDHC
Volume type is FAT32
Volume size (bytes): 3157262336
Volume size (Kbytes): 3083264
Volume size (Mbytes): 3011
При запуске программы Datalogger из библиотеки SD.h карты - ни та, ни другая - вообще не видятся:
Initializing SD card...Card failed, or not present
error opening datalog.txt
В то же время программа dataLogger из библиотеки SdFfat.h и карту видит, и файлы открывает:
FreeStack: 918
Type any character to start
Logging to: logger00.csv
Type any character to stop
millis,sens0,sens1,sens2
5000,483,457,375
6000,368,382,341
...
Отсюда следует, что, во-первых, chipSelect = 10 выбран правильно, а во-вторых - что же получается? Примеры из библиотеки SdFfat.h работают, а из библиотеки SD.h - не работают. Библиотека корявая или не хочет работать с конкретным сочетанием "плата Ардуино+шильд даталоггера"?
----
А что такое "софтверный SPI"?
Решил проблему следующим образом:
- строчку #include <SD.h> заменил на #include <SdFat.h>
- добавил строчку SdFat sd;
- в тексте программы сочетание "SD" заменил на "sd". Например:
File dataFile = SD.open("datalog.txt", FILE_WRITE); заменил на
File dataFile = sd.open("datalog.txt", FILE_WRITE);
Теперь все SD-карты определяются и на них файлы создаются.
У меня такая же почти проблема, только флешка определяется с библиотекой SD, а файл записывать не хочет, начал код по порядку писать, строчка за строчкой. Сначала все нормально, но потом до определенного момента опять перестает записывать. Методом научного тыка пробывал любые варианты, закоментил везде Serial, все нормально стало. В чем причина так и не понял ибо не кулхацкер.