Go Down

Topic: DFRobot Ethernet + SD (SD with problems) (Read 3640 times) previous topic - next topic

xanok

Hi guy!
I bought this ethernet card with sd.
http://cgi.ebay.com/Arduino-Ethernet-Shield-Based-Wiznet-W5100-Ethernet-/110684922628?pt=LH_DefaultDomain_0&hash=item19c555e304
Ethernet works fine, but I can not make SD work.
Could someone help me, I already tried other libraries, but could make it work ... =/

Code:
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
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
}


Serial:
Code: [Select]
Initializing SD card...initialization failed!

marsangoa

HI,

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.

Bye

xanok

The SD is working. I put an DFRobot SD module and it worked on first time. But with Ethernet and SD I can not make it work =/

zoomkat

Quote
But with Ethernet and SD I can not make it work =/


I think "not supported" has been mentioned in the past with the SD holder in your picture of the ethernet shield. 
Google forum search: Use Google Search box in upper right side of this page.
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0

xanok

Yes, I saw that, I was hoping it was only the library.

dsmurl

I was having the same problem as you.

Check out this old post:

       http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295588871

Apparently there is something strange about this

         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?

- Thanks,
  Sam


SurferTim

#6
Oct 24, 2011, 12:04 pm Last Edit: Oct 24, 2011, 01:36 pm by SurferTim Reason: 1
@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!

fungus


Hi guy!
I bought this ethernet card with sd.
Ethernet works fine, but I can not make SD work.


You probably need to tell the Ethernet chip to shut up while talking to the SD card.

Put this in your setup():
Code: [Select]

pinMode(10, OUTPUT);
digitalWrite(10, HIGH);


Advanced Arduino

fungus


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?


It means that only one can be active at any given time. When you're talking to one you have to tell the other to be quiet.


I'm a newbee here and I don't even know what the SPI bus is.


https://secure.wikimedia.org/wikipedia/en/wiki/Serial_Peripheral_Interface_Bus


But I do need to run a simple web server and access the card at the same time.  Is this possible?


Yes.
Advanced Arduino

dsmurl

Rock and Roll!  Thanks for the link.  This is starting to make a little more since.

- Sam :)

Go Up