Problema SD.begin per datalogger

Hai ragione avevi detto che è il pin 10 :smiley: , non conosco quella scheda, se lo confermi tu va benissimo.
Ho confuso il tuo post con un conflitto eth e sd ... sorry

Mi sono picchiato molto con la sd su letture e scritture quindi ti passo qualche pezzo che puoi testare
Io farei così:
innanzi tutto metterei il pin 10 in HIGH nel setup e Inizializzerei la scheda con altre istruzioni le quali non mi hanno mai dato problemi

#include <SPI.h>
#include <SD.h>

#define DEBUG_SD 1  // 0 per non stampare i debug
unsigned long previousMillis_f = 0;    
byte err_sd=1;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

void setup() 
{
  delay(1000);
  Serial.begin(9600);//debug
  
  pinMode(10, OUTPUT); 
  digitalWrite(10, 1);
  sd_init();
}

creati una funzione di inizializzazione della SD contenente le istruzioni separata dal setup, perchè avrai la possibilità di richiamarla quando ti serve. Ad esempio quando arduino è in running ed estrai la SD al suo reinserimento la SD non risponde più e sei costretto a resettare per tornare ad avviare il setup e inizializzare.

void sd_init() 
{   
  err_sd=0;
  if (!card.init(SPI_FULL_SPEED, 10)) err_sd=1; // <<<<<< pin 10 nel tuo caso
  if (!volume.init(&card)) err_sd=1;
  if (!root.openRoot(&volume)) err_sd=1;
  
  #if DEBUG_SD 
  if (err_sd==0) 
  Serial.println("inizializzazione SD completata.");//debug  
  else //debug
  Serial.println("inizializzazione SD fallita.");//debug
  #endif
}

Qui puoi ottenere 3 tipi di errore sulla sd uno dei 3 è proprio la presenza della SD nello slot non mi ricodo quale però

ora non ti resta che aggiungere nel loop un po' di controlli con un millis() ogni tot (ad esempio 500 ms) se la scheda è presente
esempio:

void loop() 
{
   if(millis() - previousMillis_f > 500)  {   
        previousMillis_f = millis();
        verify_sd(); 
  }     
 } 


void verify_sd() 
{  
  if (!volume.init(&card)) 
  { 
    #if DEBUG_SD 
     Serial.print("ERRORE SD Card. Ripristino in corso ...");
    #endif
     digitalWrite(5,1); //led errore acceso
     err_sd=1;
     file.close(); 
     root.close(); 
     sd_init();  // qui tento l'inizializzazione, perchè se l'hai estratta dovrà essere ripristinato (ti evita il reset)
   } 
     else
     { 
      
       digitalWrite(5,0); //led errore spento
       err_sd=0;
     } 
}

istruzione per leggere il file

if(file.open(&root, "miofile.ini", O_READ))  
  {

istruzione per scrivere su file

file.open(&root, "miofile.ini", O_TRUNC | O_WRITE);

hai una variabile di controllo err_sd pubblica, quindi la puoi usare per bloccare i processi se ti serve in caso di errore
Questi sono i passi che avevo fatto e funzionanti, spero di non aver dimenticato nulla

ciao