SD карта не корретктная работа с компьютером

Тема в разделе "Arduino & Shields", создана пользователем РоманИ, 19 фев 2016.

  1. РоманИ

    РоманИ Нерд

    Здравствуйте! Прошу помочь разобраться с подключением СД карты. подключил как указано в примерах из библиотеки. Работает только первый пример. остальные чаще всего пишут "фэилд, фэилд". если же инициализация происходит - не может создать текстовый файл. Созданный файл не открывается на компьютере. Пишет "поврежденный файл". на самой карте появляются какие-то файлы непонятного расширения, проименованные абракадаброй. никакой системы во всем этом безобрразии я не нашел. поменял карту те же пейзажи. подключил внешнее питание не помогло. ЧЕГО ЕЙ НАДО-ТО? :mad:

    зы справедливости ради должен признаться открывал файл sd.h в блокноте, но, ничего в нем не делал, и не сохранял. правда иконка поменялась на блокнотовскую.

    плиз хелп!!!
     
  2. Joy

    Joy Нерд

    пример кода?
     
  3. РоманИ

    РоманИ Нерд

    да любой скетч - пример из стандартной библиотеки кроме первого. Тот определяет карту, но иногда показывает, о наличии файлов (абракадаброй), иногда нет. Есть мысль что не совпадают библиотеки. Так в одном из примеров значится билиотека <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
    }

     
     
  4. Joy

    Joy Нерд

    вот в первом примере вы инициализируете карту на пине 10, а во втором на 4. как так?
    у вас карта где, на шилде? на ethernet шилде 10 пин - это чип ethernet, а 4 пин - sd-карта.
    кроме того после записи на карту можно попробовать небольшой delay, а перед закрытием сделать myFile.flush();
     
  5. РоманИ

    РоманИ Нерд

    пины менял. конкретно второй пример, пишет "error opening test.txt"
    катру подключаю перемычками к пинам ардуино уно
     
  6. РоманИ

    РоманИ Нерд

    прогресс есть, вроде как со второй попытки пишет "test.txt:" но когда карту вставляю в комп. там 5-6 файлов обозначенных абракадаброй и один "test.txt:". ни один из файлов не открывается.
     
  7. РоманИ

    РоманИ Нерд

    сейчас уверенно инициализируется карта. пишет 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
    }
     
     
  8. Joy

    Joy Нерд

    1. при инициализации карты я ей даю время так:
    while (!SD.begin(4)) delay (1000);
    т.е. ждем пока она не инициализируется.

    2. вы напрямую карту к выводам цепляете? питаете от 3.3V? сигнальные провода через делители напряжения или так же напрямую?
     
  9. РоманИ

    РоманИ Нерд

    китайский модуль фотку не могу вставить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 в разъемы. я так понял делители на самом модуле установлены. я соеденяю толькло контакты модулей
     
  10. Joy

    Joy Нерд

    ну тогда только вариант проверить соответствие скоростей Serial.begin() и консоли мониторинга порта :confused:
     
  11. Joy

    Joy Нерд

    несколько раз прогнал ваш скетч:
    [​IMG]
    может с картой что-то не то? какой объем, файловая система?
     

    Вложения:

  12. Joy

    Joy Нерд

    ... и очистите карту после предыдущих неудачных попыток...
     
  13. РоманИ

    РоманИ Нерд

    чищу каждый раз. пробовал две карты микроsd через переходник. сейчас 8 Гб обычную. FAT32.
    Как работает коллайдер могу рассказать чуть чуть , но ЭТО страшнее. Тут я субнуб. вообще сериал работает с другими скетчами без проблем.:confused:

    сейчас при вставлении флешки предложил исправить ошибки. вот результат.... блин не могу изображение вставить
    две фразы много раз. -"первый кластер поврежден"
    -"неправильный штамп времени"
    --"неправильный штамп времени"
    -"неправильный штамп времени"
    --"неправильный штамп времени"
    -первый кластер поврежден"
    -..............................................
     
  14. РоманИ

    РоманИ Нерд

    может модуль SD бракованный?
     
  15. Onkel

    Onkel Гуру

    kingmax часто встречаются бракованные - с виндой работают, под другими нет.
     
  16. Joy

    Joy Нерд

    я подумал, раз "абра-кадабра" печатается... такое происходит при разных частотах сериалов...
    по поводу карты - у меня стоит sony micro sd на 4Гб, хотя к шилду рекомендовано не более 2Гб ( http://amperka.ru/product/arduino-ethernet-shield )
    попробуйте другую карту, так как ваш скетч рабочий.
    если не побоитесь экспериментировать, можно переформатировать карту в FAT16.
     
  17. РоманИ

    РоманИ Нерд

    Значится так! проблему победил, причем случайно. не помогало ничего . даже винду грохнул. Уже грешил на Висту. Потом вдруг заработало. стабильно. как надо. Без видимых причин.

    Хорошо что не разобрал макетку, При монтаже в стационарный корпус выяснилось... Я крайний раз пепрепутал провода и подал 5 в на выход 3,3 в. шилда.

    При возврате на шину 5 в (т.е. как надо) опять не работает , глючит и т.п. :cool: надо отметить , что когда я подключал 3,3 в ардуины к 3,3 в шилда - тоже не работало(т.е. кренка 3,3 в- не причем). Вот оно как!
    Спасибо Joy и другим за участие.