Fare rieseguire l'inizializzazione di una scheda sd

Buongiorno.
Qualche volta l'inizializzazione della scheda sd non va a buon fine e lo sketch si ferma.
C'è un modo per reiterare l'operazione ed evitare che si blocchi?
È la scheda sd di una Ethernet Shield.
Grazie ciao.

Ho trovato questo metodo, mi sembra funzionare bene, ho aggiunto un While() nel void setup() che reinizializza la micro sd della scheda ethernet fino a quando non dà più errore, con un delay di 3 secondi per dare un po' di pausa al ciclo. Una variabile (_sd) fa uscire dal While quando = 1.

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#define REQ_BUF_SZ   60

byte mac[] = { 0xAA, 0xAA, 0x00, 0x00, 0xAA, 0xAA };  
IPAddress ip(192, 168, 1, 100);                                     
EthernetServer server(80);  
File webFile;               
char HTTP_req[REQ_BUF_SZ] = {0}; 
char req_index = 0;              
boolean _Sd = 0;                        //variabile di micro sd pronta o no

void setup()
{
  pinMode(50, OUTPUT);             // NB 10 nel arduino uno e 50 nel mega
  digitalWrite(50, HIGH);             // "spegne" la scheda ethernet  NB 10 nel arduino uno e 50 nel mega
  pinMode(4, OUTPUT);               // Pin della SDcard settato come output
  digitalWrite(4, 1);                    // "spegne" la SD card

  Serial.begin(9600);       

  Serial.println("Preparazione micro SD...");
  if (!SD.begin(4)) {                      // Se lamicro SD non risponde...
    Serial.println("ERRORE - micro SD non pronta!");
    _Sd = 0;                                  // Setta la variabile di micro sd pronta a 0
  }
  else {                                         // altrimenti...
  Serial.println("Micro SD pronta");
  _Sd = 1;                                     // Setta la variabile di micro sd pronta a 1
  }
  while (!_Sd) {                             // finché _sd diverso da 1...
    Serial.println("...Preparazione SD card...");
      pinMode(50, OUTPUT);           // NB 10 nel arduino uno e 50 nel mega
  digitalWrite(50, HIGH);               // "spegne" la scheda ethernet NB 10 nel arduino uno e 50 nel mega
    pinMode(4, OUTPUT);               // Pin della SDcard settato come output
  digitalWrite(4, HIGH);                // "spegne" la SD card
  delay(3000);                             // pausa 3 secondi
  if (!SD.begin(4)) {                     // Se lamicro SD non risponde...
    Serial.println("ERRORE - micro SD non inizializzata!");
    _Sd = 0;                                 // Setta la variabile di micro sd pronta a 0
  }
  else{                                        // altrimenti...
  Serial.println("Micro SD inizializzata correttamente.");
  _Sd = 1;                                   // Setta la variabile di micro sd pronta a 1
  }
  delay(1000);                            // pausa 1 secondo
  }
  if (!SD.exists("index.htm")) {      // Cerca il file index.html nella micro sd
    Serial.println("ERRORE: non trovato il file index.htm!");
    return;                                    // "esce" se index file non trovato
  }
  Serial.println("Trovato il file index.htm");

  Ethernet.begin(mac, ip);            // inizializza Ethernet
  server.begin();           
}

Grazie per la condivisione.
Mi pare però strano che l'inizializzazione a volte va e a volte no. Giusto il tuo codice, però (non sono esperto) non vorrei ci fossero dei problemi hardware, magari i contatti non a posto ?