Leería el archivo en algún tipo de búfer en tu interfaz de usuario, lo cortaré en paquetes pequeños y lo enviaré.
Por ejemplo, en mi IU, permito al usuario cargar una nueva imagen de firmware en mi dispositivo. Así que envío ese archivo de firmware a través de UART una línea a la vez. Mi MSP430 lee esa línea en un búfer, que tiene X caracteres de longitud, lo valida, lo almacena en una ubicación en una memoria flash externa y luego recibe la siguiente línea. Una vez que ha recibido todos los datos, el MSP430 se bifurca en su código del cargador de arranque.
Solo tiene que decidir cómo va a dividir los datos y dimensionar sus buffers en consecuencia.
No necesito definir ningún protocolo serial especial porque mis archivos ya están formateados de una manera particular y puedo enviar el archivo una línea a la vez y analizarlo en el otro extremo.
enlace
Pero para una aplicación genérica tal vez debería definir un protocolo de peso ligero. Al igual que cada línea, comenzará con un determinado carácter, un número de secuencia, una longitud de carga útil y tal vez un byte final. Algo a lo largo de estas líneas:
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | Bytes 4 to (p+4) | Byte 5+p |
|----------------------|-----------------|-------------------------------------|----------------|------------------|--------------------|
| Arbitrary Start Byte | Sequence | Total number of packets - up to 255 | Payload Length | The data | Arbitrary End Byte |
| 0x0A | Number x | Of X | p < 256 | | 0xFF |
Luego puedes descartar todo el archivo si falta un fragmento. También puede incluir una suma de comprobación básica para verificar que la línea no se corrompió cuando estaba en el cable.
El analizador para este tipo de cosas sería relativamente sencillo de escribir en ambos lados.
EDITAR: Para propósitos de prueba, recomiendo usar realterm. Es un programa de terminal binario flexible que le permitirá enviar datos, archivos, etc. de forma arbitraria. También puede usarlo para controlar puertos serie.