Transferencia de archivos C# y CCS

Necesito enviar/recibir archivos desde/hacia SerialPort y MSP430F5438A , haciendo clic en un botón de exploración en la interfaz de C#, seleccionando un archivo (como texto, bloc de notas, etc.) y, en caso de recibir, guardar el archivo que se envió desde CCS a PC!

Realmente no pude encontrar nada relacionado en Google o en otro lugar. ¿Alguien puede al menos orientarme?

Debe buscar protocolos de transferencia de módem como ZModem, etc.
¿Módem @Majenko? estoy usando UART!
¿Y? ¿A qué crees que se conecta un módem? El hecho de que hayan sido diseñados para usarse con conexiones seriales con módems no impide que sean invaluables para conexiones seriales sin módems.
@Majenko, lo siento, pero no entiendo qué intentas decir...
Lo que digo es que, en lo que respecta a la computadora y el microcontrolador, no hay diferencia entre un módem y una conexión UART, simplemente no necesita marcarlo. Hay muchos protocolos de transferencia de archivos ya diseñados para operar a través de enlaces seriales asíncronos como módems, UART, etc., y se conocen colectivamente como protocolos de transferencia de módem porque para eso se usaron por primera vez.
@Majenko Ahora entiendo, honestamente... Sé lo que significa UART y puedo transferir cadenas/caracteres entre la computadora y el microcontrolador, pero no tengo idea de "cómo" implementar la elección, apertura, envío, recepción y guardado de un archivo procedimiento. ¡Creo que una pista, enlace, ... ayudaría!
Bueno, ese lado de la cosa (el lado C#) con el que no podemos ayudarte. Somos ingenieros electrónicos, no programadores. Pregunte en StackOverflow.com por eso. Solo podemos ayudarlo con la transferencia de datos a través de la conexión UART y su implementación en el microcontrolador.
Si va a seguir la ruta del protocolo de módem, no comience con su propia aplicación C#, sino que comience con el programa de terminal serial de otra persona que lo haya creado, haga que su código integrado funcione probando contra eso, y luego cuando eso sea bien conocido desarrolle su código C#. El punto es que siempre es mejor ejecutar código no probado contra código probado, en lugar de otro código no probado. También puede usar un paquete de puerto serie virtual para probar su C# con una compilación de su código MSP C creado para ejecutarse en su PC.

Respuestas (1)

Leería el archivo en algún tipo de búfer en su interfaz de usuario, lo dividiría en paquetes pequeños y lo enviaría.

Por ejemplo, en mi interfaz de usuario, permito que el usuario cargue una nueva imagen de firmware en mi dispositivo. Así que envío ese archivo de firmware a través del UART una línea a la vez. Mi MSP430 lee esa línea en un búfer, que tiene una longitud de X caracteres, la valida, la 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 ramifica en su código de cargador de arranque.

Solo necesita decidir cómo va a fragmentar los datos y dimensionar sus búferes 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. http://en.wikipedia.org/wiki/SREC_(formato_de_archivo)

Pero para una aplicación genérica quizás debería definir un protocolo de peso ligero. Como cada línea comenzará con un cierto 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 puede descartar todo el archivo si falta un fragmento. También podría incluir una suma de verificació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 arbitrarios, archivos, etc. También puede usarlo para monitorear puertos serie.

En primer lugar, "en mi interfaz de usuario, permito que el usuario cargue una nueva imagen de firmware en mi dispositivo". eso es exactamente lo que quiero saber cómo hacer. ¿Y qué es eso de la longitud de la carga útil?
Longitud de carga útil para esa línea en particular. Por lo tanto, registraría una línea del archivo FW, una línea a la vez, un carácter a la vez. Cuando el MSP430 recibe su primer carácter y coincide con el carácter de inicio, preparará el almacenamiento para el siguiente carácter, y así sucesivamente. Cuando finalmente haya leído ese cuarto carácter, la longitud de la carga útil, le indicará cuánto espacio debe asignar para esa línea de datos en particular. Siempre puede hacer que cada paquete tenga 30 caracteres o algo si lo desea, o puede hacer que la longitud del paquete sea variable. Simplemente lo ayuda a validar el paquete y asignar espacio.
Tiene razón, estos procedimientos deben realizarse después de crear la interfaz de usuario, de modo que, por ejemplo, se debe hacer clic en un botón de exploración para abrir un archivo desde la PC y luego implementar estos procedimientos. construir la interfaz de usuario en C# ¡eso es lo que realmente quiero saber!
Entonces estoy de acuerdo con el comentario hecho en el OP. La pregunta sobre cómo crear un diálogo de exploración de archivos sería más adecuada para el desbordamiento de pila. Pero esto es lo que creo que estás buscando: msdn.microsoft.com/en-us/library/…
Aquí hay una publicación sobre el desbordamiento de pila en el tema stackoverflow.com/questions/4999734/…