Da die asynchrone serielle Kommunikation auch heutzutage unter elektronischen Geräten weit verbreitet ist, sind viele von uns meiner Meinung nach von Zeit zu Zeit auf eine solche Frage gestoßen. Stellen Sie sich ein elektronisches Gerät D
und einen Computer vor, PC
die mit einer seriellen Leitung (RS-232 oder ähnlich) verbunden sind und Informationen kontinuierlich austauschen müssen . Dh PC
sendet jeweils einen Befehlsrahmen X ms
und D
antwortet jeweils mit Statusbericht / Telemetrie-Rahmen Y ms
(Der Bericht kann als Antwort auf Anforderungen oder unabhängig gesendet werden - spielt hier keine Rolle). Die Kommunikationsrahmen können beliebige Binärdaten enthalten . Angenommen, die Kommunikationsrahmen sind Pakete fester Länge.
Das Problem:
Da das Protokoll fortlaufend ist, verliert die empfangende Seite möglicherweise die Synchronisation oder "verbindet" sich einfach mitten in einem laufenden gesendeten Frame, sodass sie einfach nicht weiß, wo der Start des Frames (SOF) ist. Wenn die Daten aufgrund ihrer Position relativ zum SOF eine andere Bedeutung haben, werden die empfangenen Daten möglicherweise für immer verfälscht.
Die gewünschte Lösung
Zuverlässiges Begrenzungs- / Synchronisationsschema zur Erkennung der SOF mit kurzer Wiederherstellungszeit (dh die Neusynchronisation sollte nicht länger als 1 Frame dauern).
Mir sind die vorhandenen Techniken bekannt (und ich verwende einige):
1) Header / Checksumme - SOF als vordefinierter Bytewert. Prüfsumme am Ende des Frames.
- Vorteile: Einfach.
- Nachteile: Nicht zuverlässig. Unbekannte Wiederherstellungszeit.
2) Bytefüllung:
- Vorteile: Zuverlässige, schnelle Wiederherstellung, kann mit jeder Hardware verwendet werden
- Nachteile: Nicht so geeignet für rahmenbasierte Kommunikation mit fester Größe
3) 9. Bitmarkierung - stellen Sie jedem Byte ein zusätzliches Bit voran, während SOF mit 1
und die Datenbytes mit gekennzeichnet sind 0
:
- Vorteile: Zuverlässige, schnelle Wiederherstellung
- Nachteile: Benötigt Hardware-Unterstützung. Wird von den meisten
PC
Hard- und Softwarekomponenten nicht direkt unterstützt .
4) Markierung des achten Bits - Art der Emulation des oben genannten, wobei das achte anstelle des neunten Bits verwendet wird, wodurch für jedes Datenwort nur 7 Bit übrig bleiben.
- Vorteile: Zuverlässige, schnelle Wiederherstellung, kann mit jeder Hardware verwendet werden.
- Nachteile: Erfordert ein Kodierungs- / Dekodierungsschema von / zur herkömmlichen 8-Bit-Darstellung bis / von 7-Bit-Darstellung. Etwas verschwenderisch.
5) Timeout-basiert - Nehmen Sie an, dass das SOF das erste Byte ist, das nach einer definierten Leerlaufzeit kommt.
- Vorteile: Kein Datenaufwand, einfach.
- Nachteile: Nicht so zuverlässig. Funktioniert nicht gut mit schlechten Zeitgebungssystemen wie beispielsweise Windows-PCs. Möglicher Overhead des Durchsatzes.
Frage: Welche anderen möglichen Techniken / Lösungen gibt es, um das Problem anzugehen? Können Sie auf die Nachteile in der obigen Liste verweisen, die leicht umgangen werden können, um sie zu entfernen? Wie entwerfen (oder würden) Sie Ihr Systemprotokoll?