Go Down

Topic: Strange SD card behavior (Read 1 time) previous topic - next topic

darkknight11

Hello guys,
I'm having a strange problem with my SD card writing/reading and I don't know how to fix it.
I have 2GB SD card installed in my module and I'm running the SD library sample files.
If I run the "CardInfo" sample it correctly displays the data about my card, so the wiring must be correct. Further more if I run the "DumpFile" sample it displays my "Lorem Ipsum"  .txt file in the serial monitor successfully and without a problem. But strange thing start to happen when I run the "ReadWrite" sample or "Datalogger" sample. The console gets flooded with strange characters and and file becomes corrupted and gigantic in size. Like about 1,6GB in a matter of seconds. Or the write to the card fails (says it passed with success) but there is nothing in the file.

I hope someone could help me with that.

marco_c

Posting code usually helps. Someone else may be able to try running it to see if the same problems happen.
Arduino libraries http://arduinocode.codeplex.com
Parola for Arduino http://parola.codeplex.com

darkknight11

Code: [Select]

/*
  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 <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 Leonardo only
  }


  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(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
}



It's the sample that comes with Arduino IDE and I haven't changed it.

marco_c

So I would assume that the software would be ok, given it is a standard example.
Couple of things to try:
1. If you have set up the SD card reader on a breadboard circuit, are all the electrical connections ok?
2. Can you try a different SD card?
3. Can you reformat the SD card you are using?
4. Can you try a different SD card library?

I use SDFat as the bugs in SD get in my way, but they should have no effect in your case. SDFat is faster as well. 
Arduino libraries http://arduinocode.codeplex.com
Parola for Arduino http://parola.codeplex.com

darkknight11

Thank you for your reply :)

There is another strange behavior I noticed just now using the SDFat library. If I run the benchmark sample it failes to write on the SDCard but it still creates the file. Corrupted of course. While the sample that displays the information about the card work without an error.

There is a possibility that this is a card issue, but I have 16MB and 128MB cards that arent working at all.

I formatted the card several times using the offical software drom SD website.

Can you post a sample of code using the SDFat that works for you? So I can try to run it and see the results.

One more thing I read something about the length of the cables between sdCard module and arduino. Mine are quite long about 10cm, could that be the problem maybe?

marco_c

Any of the samples with the SDFat library work for me. In most of my code, I am generally reading from the card rather than writing.

I would not have thought that 10cm was excessive length. I built my reader onto a prototype shield with jumpers to be able to select the ENABLE I/O line as it often clashes.

Have you tried formatting the card with the SDFat library formatter?
Arduino libraries http://arduinocode.codeplex.com
Parola for Arduino http://parola.codeplex.com

darkknight11

Huston, we have liftoff!

I managed to find another SD card with 1GB capacity and it looks like it is working normally.

S***** card -.-'

I'd like to thank you for your help!

marco_c

As always the obvious things are the best to get a problem resolved.

Good to hear.
Arduino libraries http://arduinocode.codeplex.com
Parola for Arduino http://parola.codeplex.com

Go Up