Здравствуйте! Прошу помочь разобраться с подключением СД карты. подключил как указано в примерах из библиотеки. Работает только первый пример. остальные чаще всего пишут "фэилд, фэилд". если же инициализация происходит - не может создать текстовый файл. Созданный файл не открывается на компьютере. Пишет "поврежденный файл". на самой карте появляются какие-то файлы непонятного расширения, проименованные абракадаброй. никакой системы во всем этом безобрразии я не нашел. поменял карту те же пейзажи. подключил внешнее питание не помогло. ЧЕГО ЕЙ НАДО-ТО? зы справедливости ради должен признаться открывал файл sd.h в блокноте, но, ничего в нем не делал, и не сохранял. правда иконка поменялась на блокнотовскую. плиз хелп!!!
да любой скетч - пример из стандартной библиотеки кроме первого. Тот определяет карту, но иногда показывает, о наличии файлов (абракадаброй), иногда нет. Есть мысль что не совпадают библиотеки. Так в одном из примеров значится билиотека <wire.h>, в другом случае <spi.h>. Где истина? Код (C++): #include <SD.h> File myFile; void setup() { Serial.begin(9600); Serial.print("Initializing SD card..."); // On the Ethernet Shield, CS is pin 4. It's set as an output by default. // Note that even if it's not used as the CS pin, the hardware SS pin // (10 on most Arduino boards, 53 on the Mega) must be left as an output // or the SD library functions will not work. pinMode(10, OUTPUT); if (!SD.begin(10)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); // открываем файл. заметте, что только один файл может быть открыт за раз, // поэтому вы должны закрыть этот, чтобы открыть другой. myFile = SD.open("test.txt", FILE_WRITE); // если файл нормально открылся, запишем в него: if (myFile) { Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3."); // закрываем файл: myFile.close(); Serial.println("done."); } else { // а если он не открылся, то печатаем сообщение об ошибке: Serial.println("error opening test.txt"); } // откроем файл снова, для чтения: myFile = SD.open("test.txt"); if (myFile) { Serial.println("test.txt:"); // читаем из файла, пока не достигнем конца файла: while (myFile.available()) { Serial.write(myFile.read()); } // закрываем файл: myFile.close(); } else { // а если не открылся, то пишем об ошибке: Serial.println("error opening test.txt"); } } void loop() { // больше делать нечего, но тут мог бы быть ваш код } Код (C++): * SD card read/write This example shows how to read and write data to and from an SD card file The circuit: * SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 created Nov 2010 by David A. Mellis modified 9 Apr 2012 by Tom Igoe This example code is in the public domain. */ #include <SPI.h> #include <SD.h> File myFile; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.print("Initializing SD card..."); if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. myFile = SD.open("test.txt", FILE_WRITE); // if the file opened okay, write to it: if (myFile) { Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3."); // close the file: myFile.close(); Serial.println("done."); } else { // if the file didn't open, print an error: Serial.println("error opening test.txt"); } // re-open the file for reading: myFile = SD.open("test.txt"); if (myFile) { Serial.println("test.txt:"); // read from the file until there's nothing else in it: while (myFile.available()) { Serial.write(myFile.read()); } // close the file: myFile.close(); } else { // if the file didn't open, print an error: Serial.println("error opening test.txt"); } } void loop() { // nothing happens after setup }
вот в первом примере вы инициализируете карту на пине 10, а во втором на 4. как так? у вас карта где, на шилде? на ethernet шилде 10 пин - это чип ethernet, а 4 пин - sd-карта. кроме того после записи на карту можно попробовать небольшой delay, а перед закрытием сделать myFile.flush();
пины менял. конкретно второй пример, пишет "error opening test.txt" катру подключаю перемычками к пинам ардуино уно
прогресс есть, вроде как со второй попытки пишет "test.txt:" но когда карту вставляю в комп. там 5-6 файлов обозначенных абракадаброй и один "test.txt:". ни один из файлов не открывается.
сейчас уверенно инициализируется карта. пишет writing test.txt а потом печатает "я" в бесконенечной одной строке Код (C++): #include <SPI.h> #include <SD.h> File myFile; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.print("Initializing SD card..."); if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. myFile = SD.open("test.txt", FILE_WRITE); delay (3000); // if the file opened okay, write to it: if (myFile) { Serial.print("Writing to test.txt..."); myFile.println("123"); delay (2000); myFile.flush();// close the file: myFile.close(); Serial.println("done."); } else { // if the file didn't open, print an error: Serial.println("error opening test.txt"); } // re-open the file for reading: myFile = SD.open("test.txt"); if (myFile) { Serial.println("test.txt:"); // read from the file until there's nothing else in it: while (myFile.available()) { Serial.write(myFile.read()); } // close the file: myFile.close(); } else { // if the file didn't open, print an error: Serial.println("error opening test.txt"); } } void loop() { // nothing happens after setup }
1. при инициализации карты я ей даю время так: while (!SD.begin(4)) delay (1000); т.е. ждем пока она не инициализируется. 2. вы напрямую карту к выводам цепляете? питаете от 3.3V? сигнальные провода через делители напряжения или так же напрямую?
китайский модуль фотку не могу вставитьu. aliexpress.com/item/SD-Card-Reader-Module-for-Arduino-ARM-Read-and-Write/32323308889.html?spm=2114.30010708.3.1.tE40v3&ws_ab_test=searchweb201556_2,searchweb201644_1_505_506_503_504_301_502_10001_10002_10017_10010_10005_10011_10006_10003_10012_10004_10009_401_10007_10008,searchweb201560_1,searchweb1451318400_-1,searchweb1451318411_6448&btsid=1f583d51-5f39-4bfb-8565-4bfd75274657 такая. Подсоединяю к 5 вольтам, пробовал и 3,3 соответственно. на модуле есть и 5 и 3 в разъемы. я так понял делители на самом модуле установлены. я соеденяю толькло контакты модулей
чищу каждый раз. пробовал две карты микроsd через переходник. сейчас 8 Гб обычную. FAT32. Как работает коллайдер могу рассказать чуть чуть , но ЭТО страшнее. Тут я субнуб. вообще сериал работает с другими скетчами без проблем. сейчас при вставлении флешки предложил исправить ошибки. вот результат.... блин не могу изображение вставить две фразы много раз. -"первый кластер поврежден" -"неправильный штамп времени" --"неправильный штамп времени" -"неправильный штамп времени" --"неправильный штамп времени" -первый кластер поврежден" -..............................................
я подумал, раз "абра-кадабра" печатается... такое происходит при разных частотах сериалов... по поводу карты - у меня стоит sony micro sd на 4Гб, хотя к шилду рекомендовано не более 2Гб ( http://amperka.ru/product/arduino-ethernet-shield ) попробуйте другую карту, так как ваш скетч рабочий. если не побоитесь экспериментировать, можно переформатировать карту в FAT16.
Значится так! проблему победил, причем случайно. не помогало ничего . даже винду грохнул. Уже грешил на Висту. Потом вдруг заработало. стабильно. как надо. Без видимых причин. Хорошо что не разобрал макетку, При монтаже в стационарный корпус выяснилось... Я крайний раз пепрепутал провода и подал 5 в на выход 3,3 в. шилда. При возврате на шину 5 в (т.е. как надо) опять не работает , глючит и т.п. надо отметить , что когда я подключал 3,3 в ардуины к 3,3 в шилда - тоже не работало(т.е. кренка 3,3 в- не причем). Вот оно как! Спасибо Joy и другим за участие.