UART ist von Natur aus nicht ausfallsicher - wir sprechen hier von der Technologie der 1960er Jahre.
Die Ursache des Problems liegt darin, dass UART nur einmal pro 10 Bit synchronisiert wird, sodass zwischen diesen Synchronisierungsperioden viel Kauderwelsch übertragen werden kann. Im Gegensatz zu beispielsweise CAN, das jedes einzelne Bit mehrmals abtastet.
Jeder in den Daten auftretende Doppelbitfehler beschädigt einen UART-Frame und wird unentdeckt übergeben. Bitfehler in Start / Stopp-Bits können in Form von Überlauffehlern erkannt werden oder nicht.
Unabhängig davon, ob Sie Rohdaten oder Pakete verwenden, besteht daher immer die Wahrscheinlichkeit, dass durch EMI verursachte Bitflips zu unerwarteten Daten führen.
Es gibt zahlreiche Möglichkeiten der "traditionellen UART-Quacksalberei", um die Situation geringfügig zu verbessern. Sie können Synchronisationsbytes, Synchronisationsbits, Paritätsbits und Doppelstoppbits hinzufügen. Sie können Prüfsummen hinzufügen, die die Summe aller Bytes zählen (und diese dann invertieren - warum nicht), oder Sie können die Anzahl der binären als Prüfsumme zählen. All dies ist weit verbreitet, äußerst unwissenschaftlich und mit einer hohen Wahrscheinlichkeit fehlender Fehler. Aber das war es, was die Leute von 1960 bis 1990 taten und vieles mehr seltsame Dinge wie diese leben heute weiter.
Der professionellste Weg, um mit der sicheren Übertragung über UART umzugehen, ist eine 16-Bit-CRC-Prüfsumme am Ende des Pakets. Alles andere ist nicht sehr sicher und es besteht eine hohe Wahrscheinlichkeit, dass Fehler fehlen.
Auf Hardwareebene können Sie dann das Differential RS-422 / RS-485 verwenden, um die Robustheit des Getriebes drastisch zu verbessern. Dies ist ein Muss für eine sichere Übertragung über größere Entfernungen. UART auf TTL-Ebene sollte nur für die Kommunikation an Bord verwendet werden. RS-232 sollte nicht für andere Zwecke als zur Abwärtskompatibilität mit alten Sachen verwendet werden.
Insgesamt ist Ihr Fehlererkennungsmechanismus umso effektiver, je näher er an der Hardware liegt. In Bezug auf die Effektivität addieren sich die Differenzsignale am meisten, gefolgt von der Überprüfung auf Rahmen- / Überlauffehler usw. CRC16 fügt einige hinzu, und dann fügt "traditionelle UART-Quacksalberei" ein wenig hinzu.