С каким объемом работает библиотека SD.h?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

На сомом сайте 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);

 

Maverik
Offline
Зарегистрирован: 12.09.2012

Цитата:
но и карту 2ГБ уже найти проблематично.

есть куча утилит для работы с сд-картой, которые её могут отформатировать в совершенно любой размер.

Цитата:
А так же может кто объяснит по простому, почему 10 цифровой контакт надо устанавликать как вывод?

там же комментарий написан по этому поводу- потому что этот пин (причем не обязательно №10, он зависит от того какая сд-карта используется) зарезервирован библиотекой в качестве выхода для сигнала CS (cable select)

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Maverik пишет:

есть куча утилит для работы с сд-картой, которые её могут отформатировать в совершенно любой размер.

Цитата:
А так же может кто объяснит по простому, почему 10 цифровой контакт надо устанавликать как вывод?

Дело не в форматировании под какой либо объем. Вопросс именно такой - С каким объемом работает библиотека SD.h? Если кто в курсе ткните в описание или документацию.

Maverik пишет:

Цитата:
там же комментарий написан по этому поводу- потому что этот пин (причем не обязательно №10, он зависит от того какая сд-карта используется) зарезервирован библиотекой в качестве выхода для сигнала CS (cable select)

По поводу пина 10

Там написано, что для корректной работы библиотеки он должен быть именно OUTPUT. А каокй пин будет соединятся к CS кардридера неважно. В примере это 4 пин. Отсюда и вопрос если у меня управляет 4 или 8 пин то почему библиотеке важно чтобы 10 был непременно OUTPUT? Может это както связано с родным Ethernet шилдом Arduino?

 
vov4ik
Offline
Зарегистрирован: 10.09.2013

смотрите стандатрты юсб версия 1.1 больше 4 Гб данный формат не поддерживает.

Maverik
Offline
Зарегистрирован: 12.09.2012

вот коменты авторов либы SDfat lib на которой базируется стандартная ардуиновская SD либа.

Цитата:
If you have things working OK and need to minimize the size of the library loaded on the Arduino with your application you can:

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.

http://arduino-info.wikispaces.com/SD-Cards

я бы не советовал использовать ничего, что превышает рекомендованные ограничения:  имена файлов 8.3,  fat16, 2Gb ( или fat32, 1Gb)

 

 

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

vov4ik пишет:

смотрите стандатрты юсб версия 1.1 больше 4 Гб данный формат не поддерживает.

Пробовал другую библиотеку https://github.com/greiman/SdFat

Пример который идет в комплекте к данной библиотеке показал размер правильно. Но заполнять на все 8ГБ я карту не пробовал, поэтому не могу сказать насколько корректно работает библиотека.

Пример тут - https://github.com/greiman/SdFat/blob/master/SdFat/examples/SdInfo/SdInfo.ino

 

 

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Maverik пишет:

вот коменты авторов либы SDfat lib на которой базируется стандартная ардуиновская SD либа.

я бы не советовал использовать ничего, что превышает рекомендованные ограничения:  имена файлов 8.3,  fat16, 2Gb ( или fat32, 1Gb)

Спасибо за идею по поводу на чем базируется Ардуиновская библиотека SD. SD библиотека из версии 1.5 базируется как раз на этой https://github.com/greiman/SdFat

Но версия в ардуино более старая , от 2009 года и понимает максимум 4ГБ. 

maksim
Offline
Зарегистрирован: 12.02.2012

Andrey12 пишет:

А так же может кто объяснит по простому, почему 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 настроить как выход.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Решил попробовать все карты которые были в наличии.

Тест проводился на Arduino UNO. Вналичии 3 карты

1. SANDISK 64GB
2. DNS 8GB
3. KINGSTON 4GB

Для начала использовал скетч из примеров для библиотеки SD

SANDISK 64GB
Initializing SD card...Wiring is correct and a card is present.
Card type: SDHC
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card

DNS 8GB
Initializing SD card...Wiring is correct and a card is present.
Card type: SDHC
Volume type is FAT32
Volume size (bytes): 4018143232
Volume size (Kbytes): 3923968
Volume size (Mbytes): 3832

KINGSTON 4GB
Initializing SD card...Wiring is correct and a card is present.
Card type: SDHC
Volume type is FAT32
Volume size (bytes): 3896508416
Volume size (Kbytes): 3805184
Volume size (Mbytes): 3716

Из тестов видно, что карта SANDISK 64GB распозналась но на ней не найдена FAT16/FAT32. Это именно так потому как карта отформатирована в exFAT.
Карны DNS 8GB и KINGSTON 4GB определились как 4GB с небольшой лишь разницей в объеме.

Далее взял скетч из библиотеки SDFat. Ну и саму библиотеку конечно подключил :-)

SANDISK 64GB
init time: 7 ms
Card type: SDXC
Manufacturer ID: 0X3
OEM ID: SD
Product: SU64G
Version: 8.0
Serial number: 0XC1FA49F0
Manufacturing date: 12/2012
cardSize: 63864.57 MB (MB = 1,000,000 bytes)
flashEraseSize: 128 blocks
eraseSingleBlock: true
OCR: 0XC0FF8000
SD Partition Table
part,boot,type,start,length
1,0X0,0X7,32768,124702720
2,0X0,0X0,0,0
3,0X0,0X0,0,0
4,0X0,0X0,0,0

vol.init failed


DNS 8GB
init time: 207 ms
Card type: SDHC
Manufacturer ID: 0X3
OEM ID: SD
Product: FFFFF
Version: 1.0
Serial number: 0X77250000
Manufacturing date: 11/2012
cardSize: 8321.50 MB (MB = 1,000,000 bytes)
flashEraseSize: 128 blocks
eraseSingleBlock: true
OCR: 0XC0FF8000
SD Partition Table
part,boot,type,start,length
1,0X0,0XB,8192,16244736
2,0X0,0X0,0,0
3,0X0,0X0,0,0
4,0X0,0X0,0,0
Volume is FAT32
blocksPerCluster: 64
clusterCount: 253696
freeClusters: 253640
freeSpace: 8311.28 MB (MB = 1,000,000 bytes)
fatStartBlock: 12418
fatCount: 2
blocksPerFat: 1983
rootDirStart: 2
dataStartBlock: 16384


KINGSTON 4GB
init time: 56 ms
Card type: SDHC
Manufacturer ID: 0X2
OEM ID: TM
Product: SA04G
Version: 1.1
Serial number: 0X8BDC4423
Manufacturing date: 4/2014
cardSize: 3904.90 MB (MB = 1,000,000 bytes)
flashEraseSize: 128 blocks
eraseSingleBlock: true
OCR: 0XC0FF8000
SD Partition Table
part,boot,type,start,length
1,0X0,0XB,8192,7618560
2,0X0,0X0,0,0
3,0X0,0X0,0,0
4,0X0,0X0,0,0
Volume is FAT32
blocksPerCluster: 64
clusterCount: 118912
freeClusters: 118911
freeSpace: 3896.48 MB (MB = 1,000,000 bytes)
fatStartBlock: 14524
fatCount: 2
blocksPerFat: 930
rootDirStart: 2
dataStartBlock: 16384

В случае с библиотекой SDFat размер всех карт определен корректно. Но карта 64GB тоже не прошла инициализацию все по той же причине что отформатирована в exFAT.

На этом видимо вопроссы закрыты.

Joiner
Offline
Зарегистрирован: 04.09.2014

Andrey12 пишет:
// (10 on most Arduino boards, ) must be left as an output
// or the SD library functions will not work. 
  pinMode(10, OUTPUT);

 

У меня подключен не 10, а 8-й пин. Строчку в примере "//pinMode(10, OUTPUT);" закомментировал, но все работает нормально, карточка определяется, лог пишется. Вот поэтому тоже задумался - Зачем эта строка?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Joiner пишет:

У меня подключен не 10, а 8-й пин. Строчку в примере "//pinMode(10, OUTPUT);" закомментировал, но все работает нормально, карточка определяется, лог пишется. Вот поэтому тоже задумался - Зачем эта строка?

К стати у библиотеки с которая взята за основу стандартной в Arduino таких требований про 10 пин нет. Я думаю это применимо для родного шилда - http://arduino.cc/en/Main/ArduinoEthernetShield

А так как у меня SD и Ethernet отдельные модули то видимо и так нормально работать будет.

 

 

Maverik
Offline
Зарегистрирован: 12.09.2012

Andrey12 пишет:

Maverik пишет:
там же комментарий написан по этому поводу- потому что этот пин (причем не обязательно №10, он зависит от того какая сд-карта используется) зарезервирован библиотекой в качестве выхода для сигнала CS (cable select)

По поводу пина 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 работать не будут. 

Joiner
Offline
Зарегистрирован: 04.09.2014

У меня в примере используется пин4, я подключил пин8, строку //pinMode(10, OUTPUT); закомментировал, т.е. отключил. Все работает прекрасно. Карта иницилизируется, лог пишется. Может что-то еще должно делаться, но я не знаю чего. Все что мне нужно работает.