SD y corte de corriente/extración

Buenos días,

Estoy aprendiendo a escribir con arduino en una micro SD, utilizo la librería SD. El código (simplificado) es:

#include <SD.h>
 
File logFile;
 
void setup(){
  if (!SD.begin(9)){
    Serial.println(F("Error al iniciar"));
    return;
  }
} 
 
void loop(){
  logFile = SD.open("archivo.txt", FILE_WRITE);
  
  if (logFile) {         
    logFile.println("texto a guardar");        
    logFile.close();  
  }

  delay(1000);
}

El código funciona pero en una de las pruebas al sacar la tarjeta para ver qué se había escrito, se cargó la tarjeta (he probado de todo con windows y linux y está muerta). Supongo que pasaría lo mismo si se va la corriente.

¿Hay alguna forma de evitarlo?

Saludos.

Hola, quizas el delay es muy corto, es casi como que continuamente estubiera escribiendo. No se te ocurrio poner un led, para como en la pc, indique que se esta escribiendo. El delay lo haria mas largo para que te de tiempo para sacarlo. Saludos

jomaiz:
El código (simplificado) es:

¿Y el completo? El "simplificado" no me dice mucho del problema.

jomaiz:
al sacar la tarjeta para ver qué se había escrito, se cargó la tarjeta (he probado de todo con windows y linux y está muerta). Supongo que pasaría lo mismo si se va la corriente.

¿Seguro que está dañada del todo? ¿No será más bien que la partición es la que se haya dañado?

En Windows, verifca en el Administrador de Discos; en Linux, verifica con la Utilidad de Discos o GParted.

El que quedara inservible apenas en el primer maltrato, debió ser ya cosas del destino. No hablo en sentido figurado, en efecto estoy diciendo que seguro la tarjeta ya estaba en las últimas, qué se yo...

jomaiz:
¿Hay alguna forma de evitarlo?

Según lo que había leído en no sé dónde, el momento más seguro para retirar/apagar una tarjeta SD, es cuando está en estado de inactiviadad; el cuál se llega a dar un segundo después de la última interacción.
Cuando en código haya transcurrido un segundo sin hacer nada con la tarjeta, ahí es dónde se puede retirar o apagar con seguridad.

La tarjeta está parar tirar, lo he intentado con Administrador de discos, Gparted y una herramienta de la power shell (no recuerdo el nombre).

Destino o no no tengo ganas de probar con más tarjetas, así que mandaré los datos de los sensores por red local a mi raspberry y allí los guardaré en disco o en BBDD.

Gracias de todas formas.

jomaiz:
lo he intentado con Administrador de discos, Gparted y una herramienta de la power shell (no recuerdo el nombre).

¿Y qué? ¿Es como si no hubiera nada, como espacio sin asignar, o una partición RAW (en el caso de Windows)?

Si está en RAW, hay programas que te la pueden recuperar, como Easeus (vale cualquiera en realidad, este es el que usé yo una vez).

Empresa mecanizados

En windows aparece como espacio no asinado. Si doy a "crear un volumen simple..." no hace nada. Si doy a formtear la unidad, dice que no se ha podido.

En linux sale también sin asignar, me pide crear una nueva tabla de particiones, le doy a crear se tira unos segundos y no hace nada.

Me gustaría resucitar la tarjeta, los datos me dan igual.

Ahora se me ocurre que intentaras el ejemplo de un sketch que formatea tarjetas SD como lo haría SD Card Formatter; solo que está disponible en SdFat y no en la libraría de la IDE.

jomaiz:
En windows aparece como espacio no asinado.

Rayos; si aún así tuviera asignada una letra, sería posible intentar reparar el sistema de archivos con chkdsk.

Lucario448:
Ahora se me ocurre que intentaras el ejemplo de un sketch que formatea tarjetas SD como lo haría SD Card Formatter

Ya he probado y nada, debe estar bien frita, ya descansa en la basura:

SD initialization failure!
Is the SD card inserted correctly?
Is chip select correct at the top of this program?
error: card.begin failed
SD error: 20,ff

Gracias por la ayuda.