No, no existe una práctica común estándar o incluso generalmente aceptada.
Si está realmente seguro de que todo lo que enviará a través de este enlace es un flujo de valores de 12 bits, puede poner 6 bits en cada byte y usar los 2 bits restantes para identificar si este byte contiene el valor alto o bajo. bits de la palabra de 12 bits. Eso deja dos códigos más para una pequeña expansión.
Sin embargo, eso no es lo que yo haría, y ciertamente no es lo que normalmente hago. No importa lo mucho que piense lo contrario ahora, es muy probable que tarde o temprano desee que pueda enviar otra cosa a través del enlace, aunque solo sea para la depuración. Ya que dice que el ancho de banda no es un problema, hágalo ahora mismo para que la expansión del protocolo sea fácil.
Lo que normalmente hago es enviar datos en paquetes que comienzan con un byte de opcode, que es seguido por cualquier dato que vaya con ese opcode. He hecho esto muchas veces. Para mayor claridad de la documentación, llamo a los paquetes del host a los micro comandos , y del micro al host respuestas , pero eso no significa que las respuestas deben ser solo una resultado de los comandos.
Este esquema es fácil de implementar en firmware. También es fácil para el anfitrión, pero eso no importa. Con la capacidad de procesamiento y la memoria infinitas de una PC, cualquier protocolo que usted prepare y sea manejable en el micro será fácil para el host. El punto es mantenerlo simple en el pequeño sistema de recursos limitados y hacer que el otro sistema se adapte según sea necesario.
Al recibir, uso una tabla de salto para el byte de opcode. Eso se envía a la rutina única para ese comando, que sabe cuántos bytes de flujo de entrada más leer y qué hacer con ellos. Cuando termina, las rutinas de comando vuelven a un punto de retorno común, que recupera el siguiente código de operación, se despacha a través de la tabla, que ejecuta la siguiente rutina de comando, etc.
Una vez que haya configurado este mecanismo y haya un programa de prueba en el host para leer y escribir este protocolo, es realmente sencillo agregar otro comando o respuesta. Siendo tan simple, comenzarás a utilizar este servicio de maneras que no habías imaginado al principio. Por ejemplo, puede crear un comando que establezca un bit de depuración en el firmware que haga que otro código haga algo especial. O te das cuenta de que hay algunas opciones que te gustaría controlar, tal vez leer de nuevo la memoria de datos, un comando especial que hace algo único para realizar pruebas, etc. Este tipo de cosas es realmente muy útil.
Para resolver el caso particular sobre el que has preguntado, tendrías una respuesta seguida de 2 bytes que contienen el número de 12 bits. En el micro, eso es tan simple como enviar el byte de opcode de respuesta seguido por los dos bytes de datos periódicamente. Mientras tanto, deja abierta la opción de enviar otras cosas sin desordenar el flujo de valores de 12 bits.