UART no es a prueba de fallas por su propia naturaleza: aquí estamos hablando de la tecnología de la década de 1960.
La raíz del problema es que UART solo se sincroniza una vez cada 10 bits, lo que permite que pase un montón de galimatías entre esos períodos de sincronización. A diferencia de, por ejemplo, CAN, que muestrea cada bit individual varias veces.
Cualquier error de doble bit que ocurra dentro de los datos dañará una trama UART y pasará sin ser detectado. Los errores de bit en los bits de inicio / parada pueden o no detectarse en forma de errores de desbordamiento.
Por lo tanto, no importa si usa paquetes o datos sin procesar, siempre existe la probabilidad de que los cambios de bits causados por EMI den como resultado datos inesperados.
Existen numerosas formas de "charlatanería tradicional UART" para mejorar la situación muy ligeramente. Puede agregar bytes de sincronización, bits de sincronización, paridad, bits de doble parada. Podría agregar sumas de verificación que cuenten la suma de todos los bytes (y luego invertirla, porque por qué no) o podría contar la cantidad de binarios como una suma de verificación. Todo esto es ampliamente utilizado, muy poco científico y con una alta probabilidad de errores faltantes. Pero esto fue lo que hizo la gente desde 1960 hasta 1990 y muchas cosas extrañas como estas viven en la actualidad.
La forma más profesional de lidiar con una transmisión segura a través de UART es tener una suma de verificación CRC de 16 bits al final del paquete. Todo lo demás no es muy seguro y tiene una alta probabilidad de faltar errores.
Luego, en el nivel de hardware, puede usar el diferencial RS-422 / RS-485 para mejorar drásticamente la robustez de la transmisión. Esto es imprescindible para una transmisión segura a largas distancias. El nivel TTL UART solo debe usarse para la comunicación a bordo. RS-232 no debe usarse para ningún otro propósito, sino compatibilidad con versiones anteriores.
En general, cuanto más cerca del hardware esté su mecanismo de detección de errores, más efectivo será. En términos de efectividad, las señales diferenciales son las que más agregan, seguidas de la verificación de errores de encuadre / desbordamiento, etc. CRC16 agrega algo, y luego la "charlatanería tradicional UART" agrega un poco.