L'UART n'est pas à sécurité intrinsèque par sa nature même - nous parlons ici de la technologie des années 60.
La racine du problème est que l'UART ne se synchronise qu'une fois par 10 bits, ce qui permet à beaucoup de charabia de passer entre ces périodes de synchronisation. Contrairement à CAN par exemple, qui échantillonne chaque bit individuel plusieurs fois.
Toute erreur double bit se produisant à l'intérieur des données corrompra une trame UART et passera sans être détectée. Les erreurs de bits dans les bits de démarrage / d'arrêt peuvent ou non être détectées sous la forme d'erreurs de dépassement.
Par conséquent, peu importe si vous utilisez des données brutes ou des paquets, il y a toujours une probabilité que les retournements de bits causés par EMI entraînent des données inattendues.
Il existe de nombreuses façons de "charlatanisme UART traditionnel" pour améliorer légèrement la situation. Vous pouvez ajouter des octets de synchronisation, des bits de synchronisation, la parité, des bits d'arrêt double. Vous pouvez ajouter des sommes de contrôle qui comptent la somme de tous les octets (puis l'inverser - parce que pourquoi pas) ou vous pouvez compter le nombre de binaires comme une somme de contrôle. Tout cela est largement utilisé, très peu scientifique et avec une forte probabilité d'erreurs manquantes. Mais c'est ce que les gens ont fait des années 1960 aux années 1990 et beaucoup de choses étranges comme celles-ci continuent aujourd'hui.
La manière la plus professionnelle de gérer une transmission sûre sur UART est d'avoir une somme de contrôle CRC 16 bits à la fin du paquet. Tout le reste n'est pas très sûr et a une forte probabilité d'erreurs manquantes.
Ensuite, au niveau matériel, vous pouvez utiliser le différentiel RS-422 / RS-485 pour améliorer considérablement la robustesse de la transmission. C'est un must pour une transmission sûre sur de plus longues distances. L'UART de niveau TTL ne doit être utilisé que pour la communication à bord. RS-232 ne doit pas être utilisé à d'autres fins que la rétrocompatibilité avec des éléments anciens.
Dans l'ensemble, plus le mécanisme de détection d'erreur est proche du matériel, plus il est efficace. En termes d'efficacité, les signaux différentiels ajoutent le plus, suivi de la vérification des erreurs de cadrage / dépassement, etc. CRC16 en ajoute, puis le "charlatanisme UART traditionnel" en ajoute un peu.