Ethernet Shield - SD Card not working

Hello guys
Long time reader, first time posting. Normally with some google searches and trial and error i can get somewhere, but not this time.

So, i bought a arduino mega (ebay clone) and ethernet shield (ebay clone) for a project i found on github. I have almost all the parts now and started trying them and found a problem right at the start with the sdcard part of this.

I then started testing code until i get the sdcard working only.
I have a 3d printer with a genuine arduino mega so that was the first test and no sdcard. I then tested with a arduino mini pro (ebay clone) that has icsp so i used the icsp pins and pin10 and pin4 from the mini to ethernet shield and still nothing.

All this with severall sketches from threads with ethernet shield problems from here.

In most threads someone mention that in a mega you put pin53 as output so i tried it also with and without in all tests.

Then i tested blink skecth using pins 4,10,53 HIGH and LOW to measure the voltage of them and they are working correctly. I dont know how to measure them with the sdcard sketch (should the pin4 that activates icsp to sdcard remais HIGH while it reads the card?)

I measured continuity from pin4 to the w5100 chip and it goes there, also tested continuity from icsp pins in mega to the upper pins in the ethernet shield. I resoldered the pins in ethernet shield also.

Also the ethernet part works, i didn tested it connected to a network but some sketches test the ethernet part and it works always i think.

I think i have to order a new shield but before i do i thought i can remove the metal part in the sdcard holder and test some pins to see if they go (where?) anywhere and are working.
I tested different sdcards also with different formats and with the sdformater created by a arduino forum user.

Anyone can shed some light in this?

If you reached here thank you for your patient. Any help welcome.
I am sorry for such a testement and for any grammar errors. Thanks

Are you disabling the w5100/w5200/w5500 before initializing the SD card?

  digitalWrite(10, HIGH);

  if(Serial.begin(4) == 0) {
    Serial.println("sd fail");
  }

Hi

Yes i am. I saw already many of your responses in the forum SurferTim.

I even tried to put pin4 low and pin10 HIGH in "void setup"
And with pin53 as pinMode(53, OUTPUT) with and without digitalWrite(53, HIGH); after.

I also tested the second code that puts them all in HIGH in the begining of "void setup".

/*
  SD card test 
   
 This example shows how use the utility libraries on which the'
 SD library is based in order to get info about your SD card.
 Very useful for testing a card when you're not sure whether its working or not.
   
 The circuit:
  * SD card attached to SPI bus as follows:
 ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
 ** CS - depends on your SD card shield or module. 
    Pin 4 used here for consistency with other Arduino examples

 
 created  28 Mar 2011
 by Limor Fried 
 modified 9 Apr 2012
 by Tom Igoe

 2015: included SPI.h and made SPI bus idle.
 */

#include <SPI.h>

// include the SD library:
#include <SD.h>

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 4;    

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  Serial.println("\nCardInfo sketch");
  
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  // Disable all slave selects on the SPI bus, and set 'SS' to output.
  // The Ethernet Shield uses pin 4 and 10.
  // The 'SS' is pin 10 for Uno and pin 53 for Mega.
  // But disable them all, even if SS is also pin 10.
  // The 'SS' needs to be output, for the internal SPI hardware to work properly.
  // Disable a SPI device means setting the chip select high.
  pinMode ( 53, OUTPUT);    // pin 10 on Uno, pin 53 on Mega
  digitalWrite( 53, HIGH);

  pinMode( 4, OUTPUT);       // SD chip select at pin 4
  digitalWrite( 4, LOW);

  pinMode( 10, OUTPUT);     // W5100 chip select at pin 10
  digitalWrite( 10, HIGH);

  // SPI bus is now idle and ready to be used.
  delay(1);    


  Serial.print("\nInitializing 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(53, OUTPUT);     // change this to 53 on a mega


  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card is inserted?");
    Serial.println("* Is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
    Serial.println("Wiring is correct and a card is present."); 
  }

  // print the type of card
  Serial.print("\nCard type: ");
  switch(card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }


  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("\nVolume type is FAT");
  Serial.println(volume.fatType(), DEC);
  Serial.println();
  
  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize *= 512;                            // SD card blocks are always 512 bytes
  Serial.print("Volume size (bytes): ");
  Serial.println(volumesize);
  Serial.print("Volume size (Kbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Mbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);

  
  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);
  
  // list all files in the card with date and size
  root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop(void) { 
}
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <utility/w5100.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEC };
IPAddress ip( 192,168,1,177);
EthernetServer server(80);

void setup()
{
  pinMode(4,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(53,OUTPUT);
  digitalWrite(4,HIGH);
  digitalWrite(10,HIGH);
  digitalWrite(53,HIGH);
  
  Serial.begin(9600);
  
  Serial.print(F("Starting SD.."));
  if(!SD.begin(4)) 
    Serial.println(F("failed"));
  else 
    Serial.println(F("ok"));
  
  Serial.println(F("1st dump after SD.begin"));
  dumpfile("a.txt"); 
    
  Ethernet.begin(mac, ip);
  delay(2000);
  server.begin();
  Serial.println(F("Ready"));
  
  Serial.println(F("2nd dump after initialize ethernet.begin"));
  dumpfile("a.txt"); 
  
  //initilize SD the second time, which shouldn't be required
  Serial.print(F("Starting SD.."));
  if(!SD.begin(4)) 
    Serial.println(F("failed"));
  else 
    Serial.println(F("ok"));
  
  Serial.println(F("3nd dump after re-Sd.begin"));  
  dumpfile("a.txt");
}
void loop()
{
}