Análisis de datos UART delimitados por tiempo

Al intentar realizar ingeniería inversa y decodificar datos correctamente en una conexión UART, he llegado a las siguientes conclusiones sobre el formato de los datos que se reciben.

Los datos se envían en "paquetes". Cada paquete está delimitado solo por tiempo (espacios) entre transmisiones.Los paquetes son de longitud variable. La longitud se especifica por el tercer byte en la secuencia.Los datos sonno enmarcado utilizando caracteres especiales o señales fuera de banda, pero un paquete de datos válido puede ser (se supone que es) válido, en función del byte final, que es un valor de suma de comprobación de la trama.

Cuando se utiliza un analizador lógico, es fácil discernir paquetes. Sin embargo, alimentar los datos a través de UART a un programa hace imposible delimitar paquetes. Todos los datos recibidos son puestos en cola por el sistema operativo. Si bien se pueden agregar ciertos controladores para activar los eventos de datos recibidos, esto no garantiza que los datos disponibles en la cola uart del sistema operativo sean un paquete completo.

¿Existen algunas prácticas recomendadas para separar dichos datos?

Apéndice:

Mi solución actual (que tiene una gran sobrecarga y una gran tasa de error):

A partir del primer byte de la cola, intente analizar un marco. Si el tamaño especificado en el marco es mayor a 0x20 (no hay paquetes mayores a 32bytes - encabezado y suma de verificación incluidos) entonces el "byte de inicio" actual se considera inválido y descartado, y la recuperación continúa desde el siguiente byte, etc.)

La otra solución en la que estoy trabajando es usar un microcontrolador para analizar los datos y enmarcarlos adecuadamente, ya sea dentro o fuera de banda. Esta es una mejor solución, ya que dicho protocolo sensible al tiempo debería requerir un RTOS. Pero aún así, debe haber una manera de implementar esto en un sistema operativo normal.

Analizador Lógico: