Hi all, I'm doing a 'simple' test to check my SD setup stability. I'm just reading and writing repeatedly forever and printing the results to the Serial port. At the beginning it works, but at random times the read/write test fail. Resetting the Arduino does not fix the problem, only formatting the SD in the computer.
Sample code:
// Global libs
#include <Arduino.h>
#include <SPI.h>
#include <SD.h>
// Arduino Mega
#define SD_CS_PIN 53
#define SD_SCK_PIN 52
#define SD_MOSI_PIN 51
#define SD_MISO_PIN 50
#define BAUD_RATE 115200
// globals
String TEST_FILE = "TEST.TXT";
String NOT_TEST_FILE = "NOT_TEST.TXT";
void setup() {
// Serial
Serial.begin(BAUD_RATE);
while (!Serial) {
Serial.println("Waiting for Serial!");
delay(1000);
}
// Init SD
while (true) {
Serial.print("Initializing SD card...");
if (!SD.begin(SPI_QUARTER_SPEED, SD_CS_PIN)) {
Serial.println("Card failed, or not present");
delay(1000);
} else {
Serial.println("card initialized.");
break;
}
}
}
void loop() {
// SD.exists tests
if (SD.exists(TEST_FILE)){
Serial.println("TEST.TXT File exist.");
} else {
Serial.println("TEXT.TXT File do not exist.");
}
if (SD.exists(NOT_TEST_FILE)){
Serial.println("NOT_TEST.TXT File exist.");
} else {
Serial.println("NOT_TEST.TXT File do not exist.");
}
// SD.read test
File RIO = SD.open(TEST_FILE, FILE_READ);
char c = '0';
if (RIO) {
Serial.print("Read: ");
while(RIO.available()){
c = RIO.read();
Serial.print(c);
}
Serial.println();
} else {
Serial.println("Reading failed!!!");
}
RIO.close();
// SD.print test
File WIO = SD.open(TEST_FILE, FILE_WRITE);
if (WIO) {
WIO.print("GATITOS");
// delay(5);
Serial.println("Writing succeed!!!");
} else {
Serial.println("Writing failed!!!");
}
WIO.close();
delay(1000);
}
A typical output is like this:
---- Opened the serial port /dev/tty.usbmodem14101 ----
Initializing SD card...
card initialized.
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Read: GATITOSGATITOSGATITOS
Writing succeed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Read: GATITOSGATITOSGATITOSGATITOS
Writing succeed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Read: GATITOSGATITOSGATITOSGATITOSGATITOS
Writing succeed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Read: GATITOSGATITOSGATITOSGATITOSGATITOSGATITOS
Writing succeed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Read: GATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOS
Writing succeed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Read: GATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOS
Writing succeed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
//
// SOME TIME LATER ...
//
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Read: GATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOSGATITOS
Writing succeed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Reading failed!!!
Writing failed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Reading failed!!!
Writing failed!!!
TEST.TXT File exist.
NOT_TEST.TXT File do not exist.
Reading failed!!!
Writing failed!!!
TEST.TXT File exist.
Hardware:
- Arduino mega (elego)
- 4GB micro SD (Cloudisk)
- Micro SD Card Adapter (HW-125)
I have several SDs and Adapters and the problem persist with different of them.
What am I doing wrong?
Thank you in advance...