[SOLUCIONADO] Transferir un archivo a la SD

Lucario448:
Sería crear un programa especializado para PC. Yo siempre he tenido en mente crear un tipo explorador de archivos de Arduino (así que puede tanto enviar como recibir), de interfaz gráfica por supuesto.

Pues no estaría nada mal que lo hicieras porque buena falta hace :wink:

Lucario448:
Si la velocidad de transferencia no es importante, adelante; caso contrario, considerarlo.

La velocidad de transferencia no es importante para lo que yo quiero.

Al final el Teraterm tiene la opción de mandar también archivos binarios y transformando un poco el código he conseguido lo que quería. He podido transferir tanto archivos de texto (sin necesidad de delimitador de EOF) como un JPG de más de 3megas (la velocidad de transferencia ha sido de unos 16kb/sg y ha tardado unos 3 minutos pero lo ha copiado impecablemente). Le he tenido que poner un retardo a la hora de leer/escribir los datos porque si lo hacía directo se quedaba colgado. Así es como ha quedado de simple:

/******Dump_Binario_SD*****************/
//Copia cualquier archivo del disco duro a la tarjeta SD
//Con el programa cargado, abrir un terminal serie (yo he usado el Teraterm), 
//seleccionar el COM del Arduino, 
//configurar el envio y recepción como CR+LF y con la opción Send File
// marcar como Binary, enviar el archivo.
/***************************/
#include "SD.h"
#include "SPI.h"

File miArchivo;
unsigned long ultimoLeido = 0;
long contaje = 0;
bool leido = 0;

void setup() {
  Serial.begin(9600);
  if (!SD.begin(8))  // Inicializa mi tarjeta SD
  {
    Serial.println("Error inicializando SD!");
    return;
  }
}

void loop() {
  if (!leido) {
    miArchivo = SD.open("42.jpg", O_CREAT | O_WRITE);   //Poner el nombre y extensión del archivo que queramos crear
   while (millis() - ultimoLeido < 1000 ||  contaje == 0) //probar a cambiar el valor de ultimoLeido (retardo) si no funciona
    {
      while (Serial.available() > 0)
      {
        miArchivo.write(Serial.read());
        ultimoLeido = millis();
        contaje++;
     }
    }
    miArchivo.close();
    leido = 1;
 Serial.print ("Archivo copiado correctamente");
  }
}

Durante el fín de semana haré distintas pruebas e intentaré provocar que se cuelgue o ver sus limitaciones y si funciona correctamente lo daré por solucionado.