[SOLUCIONADO] Transferir un archivo a la SD

jlsogorb:
¿Como copiar un archivo cualquiera (de texto o no de texto) desde el PC a la tarjeta SD?

Similar a como lo hiciste en Teraterm, excepto que con los archivos binarios hay un problema: el contenido es arbitrario. Con esto quiero decir que no hay forma directa de delimitar el final del archivo; lo que en texto se usa como EOF, en binario podría ser parte del contenido pero no necesariamente siendo el último byte.

Hay dos formas de delimitar un archivo binario:

  • Por timeout del puerto serial.
  • Conociendo de antemano la longitud (en bytes) del archivo.

jlsogorb:
Si alguien sabe alguna forma más elegante de hacerlo, sería más cómodo..

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.

PD: para archivos relativamente grandes puede que prefieras un lector de SD USB al Arduino; recuerda que son 9600 bits por segundo y 11 bits por byte (8 de datos + 2 de inicio + 1 de parada); por lo tanto 9600/11 = 873 bytes por segundo. ¡Un documento Word con solo texto podría tomar hasta medio minuto en transferirse!.

Podrías pisar el acelerador más a fondo hasta los 115200 bps, lo cual te llevaría a 10 KB/s. Una mejora sustanciosa, pero podría tornarse desesperante con archivos a partir de 1 MB.

Si el convertidor USB/Serial no fuera un cuello de botella, estarías limitado a 40 KB/s de todas maneras. Esto se debe principalmente a tres motivos:

  • Una tarjeta SD operando en SPI no es lo más veloz.
  • Sobrecargo del programa (proceso de traspasar bytes entre buffers). Aquí optimizar el código es crucial
  • La frecuencia de reloj del micro es de 16 MHz.

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