Problemas de lectura SD

Buenas de nuevo, tengo otro quebradero de cabeza...mi problema consiste en que guardo en la sd unos datos que luego represento vía web. Los guarda y los representa, pero en el momento de leer de la sd para representarlo, lo representa y despues mi programa ya no detecta ese fichero, pero no lo borra, solo no lo detecta. A traves de flags he conseguido ver que es en este metodo de leer la SD, que os dejare a continuacion, en el que deja de detectarlo, pero no se porque, ya que cierro el fichero correctamente =(

String leerSD(String nFichero){
  Serial.println("Leyendo " + nFichero);
  reconocerMediciones(false);
  File fichero = SD.open(nFichero);
  String leido;
  if (fichero) {
    leido = "";
    while (fichero.available()) {
      leido += fichero.readStringUntil("\n");
    }
    //Serial.println(leido);
    fichero.close();
    /*while(!fichero.close(){
      Serial.println("Error");
    }*/
    //delay(20);

  } else {
    Serial.println("Error al abrir el fichero");
  }
    reconocerMediciones(false);
    return leido;  
}

el metodo reconocerMediciones deja de mostrarlo antes del return y no se porque!!!!!!

os dejo reconocerMediciones por si acaso..

void reconocerMediciones(boolean asignarNombre){
  contador_mediciones = 0;
  File archivo;
  File root = SD.open("/");
  do{
    archivo = (root.openNextFile());
    String nombre = String(archivo.name());
    nombre.toLowerCase();
    Serial.println(nombre);
    if (!archivo.isDirectory() && nombre.substring(nombre.length() - 4) == ".txt"){
        medicionesSD[contador_mediciones] = nombre;
        contador_mediciones++;
    }
  }while(archivo);
  archivo.close();
  root.close();
}

Por favor ayuda y gracias por adelantado!!

Pudiera tratarse de problema de memoria RAM. Veo que haces uso profusamente de los strings y son bastante "tragones" de memoria, añadido a que los objetos File también tragan un pico. Busca por el foro y verás una función sencilla para mostrar la cantidad de memoria disponible en un determinado momento, y comprueba a ver si baja a niveles alarmantes.

Tienes que contarnos, con lujo de detalle, cuál es el propósito de estos algoritmos. El uso intensivo del objeto String no se recomienda por cuestiones de fiabilidad.
Aquí te dejo una versión más confiable y menos "hambrienta de memoria" del método reconocerMediciones:

void reconocerMediciones(boolean asignarNombre) { // El parámetro requerido no se usa
  contador_mediciones = 0;
  File root = SD.open("/");
  if (!root) return;
  File archivo;
  while ((archivo = root.openNextFile())) {
    const char* nombre = archivo.name();
    Serial.println(nombre);
    if (!archivo.isDirectory() && strstr(nombre, ".TXT")) {
        //medicionesSD[contador_mediciones] = nombre; // Sin el objeto String, esto habría que hacerlo diferente
        contador_mediciones++;
    }
 archivo.close();
  }
  root.close();
}

PD: si la intención de este último es para almacenar una lista de nombres de archivo, puede que prefieras almacenarla en uno; la memoria RAM es muy escasa como para almacenar una lista grande...