/*
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
updated 2 Dec 2010
by Tom Igoe
This example code is in the public domain.
*/
#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(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
}
have you formatted the SD card?
I have e similar problem with the "official" shield and I have to format with some tool different from windows format utility.
pinMode(10, OUTPUT);
digitalWrite(10, HIGH); // davekw7x: If it's low, the Wiznet chip corrupts the SPI bus
My question is, does this mean that the ethernet and the SD reader can't be used at the same time because of some conflict on this SPI bus? I'm a newbee here and I don't even know what the SPI bus is. But I do need to run a simple web server and access the card at the same time. Is this possible? Does anyone know of a simple example of a web server that uses the SD card?
@dsmurl: I haven't used it yet, but according to the code, it should be possible. The ethernet client.write() and client.read() functions set pin 10 low, do the write or read, then set pin 10 high again. The SD read and write routines do the same with pin 4.
So it seems once you get the ethernet connection established and the SD file open, you should be able to set pin 10 HIGH and pin 4 HIGH, then read from and write to both. The read and write functions will take care of the SS pins.
With the SD reader on an ethernet shield, the init function is this:
SD.begin(4);
Edit: Actually, the SS pin control is very low level on both. It may be you could:
call Ethernet.begin() and set pin 10 HIGH
call SD.begin(), then set pin 4 HIGH
Then go to town!