UART no es infalible, por su propia naturaleza - estamos hablando de 1960, la tecnología aquí.
La raíz del problema es que UART solo sincroniza una vez por 10 bits, lo que permite un montón de tonterías para pasar entre los períodos de sincronización. A diferencia de, por ejemplo, PUEDE que las muestras de cada bit individual en múltiples ocasiones.
Cualquier doble de bits de error que se producen en el interior de los datos se corrompen una UART marco y pasar desapercibido. Errores de Bit de start/stop bits puede o no puede ser detectado en forma de errores de saturación.
Por lo tanto, no importa si usted utiliza los datos brutos o paquetes, siempre hay una probabilidad de que el bit voltea causada por EMI resultado inesperado de datos.
Existen numerosas formas de "tradicional UART charlatanería" para mejorar la situación sea muy ligeramente. Usted puede agregar bytes de sincronización, sincronización de bits, paridad, el doble de bits de parada. Usted puede agregar las sumas de comprobación de que el recuento de la suma de todos los bytes (y luego invertir - porque, por qué no) o usted puede contar el número de binario como una suma de comprobación. Todo esto es ampliamente utilizado, salvajemente científico y con una alta probabilidad de errores de falta. Pero esto era lo que la gente hizo de la década de 1960 hasta la década de 1990 y un montón de cosas extrañas como estas vidas en el día de hoy.
La manera más profesional a la seguridad de la transmisión a través de la UART es tener una suma de comprobación CRC de 16 bits en el final del paquete. Todo lo demás no es muy segura y tiene una alta probabilidad de errores de falta.
A continuación, en el nivel de hardware puede utilizar diferencial RS-422/RS-485 para mejorar drásticamente la robustez de la transmisión. Esta es una necesidad para la seguridad de la transmisión en largas distancias. Nivel TTL UART sólo deben ser utilizados para las comunicaciones a bordo. RS-232 no debe ser utilizado para ningún otro propósito, pero la compatibilidad hacia atrás con cosas viejas.
En general, el más cercano al hardware de su mecanismo de detección de errores, más eficaz es. En términos de eficacia, señales diferenciales agregar la mayoría, seguido por la comprobación de encuadre/saturación, etc errores. CRC16 añade algunos, y luego "tradicional UART charlatanería", añade un poco.