SD-карта не видится с библиотекой SD.h

Tomade
Offline
Зарегистрирован: 22.12.2016

Для домашних экспериментов потребовался дата логгер.  Купил Ардуино уно и 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 и скетча даталоггера на русском языке (я не нашёл)? Если кто знает, дайте, пожалуйста, ссылку.

valera678
Offline
Зарегистрирован: 04.11.2016

Попробуйте карту объемом не более 2 гб

Tomade
Offline
Зарегистрирован: 22.12.2016

Как написал в первом сообщении, использовал разные карты, начиая с объёма 256 Mb. А именно: 256, 512 Mb, 4, 8 и 16 Gb. C библиотекой SD.h они или не определяются, или (в одном случае) в них не пишутся файлы.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Проверьте разводку контактов на шилде. Насколько я помню, CD.h ориентирована на Ethernet Shield, аозможно, разводка отличается. Например, контакт выбора устройства. Или софтверный SPI.

Tomade
Offline
Зарегистрирован: 22.12.2016

Программа 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"?

Tomade
Offline
Зарегистрирован: 22.12.2016

Решил проблему следующим образом:

- строчку  #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-карты определяются и на них файлы создаются. 

ellpigy
ellpigy аватар
Offline
Зарегистрирован: 08.05.2016

У меня такая же почти проблема, только флешка определяется с библиотекой SD, а файл записывать не хочет, начал код по порядку писать, строчка за строчкой. Сначала все нормально, но потом до определенного момента опять перестает записывать. Методом научного тыка пробывал любые варианты, закоментил везде Serial, все нормально стало. В чем причина так и не понял ибо не кулхацкер.