8 Stimmen

Startbit vs. Startbyte

Ich weiß, dass bei vielen asynchronen Kommunikationsvorgängen das Paket mit einem Startbit beginnt.

Aber ein Startbit ist nur eine 1 oder 0. Wie unterscheidet man ein Startbit vom Endbit des letzten Pakets?

Ex. Wenn ich mein Startbit auf 0 und mein Endbit auf 1 setze. und ich empfange 0 (Datenstrom A) 1 0 (Datenstrom B) 1, was hindert mich daran anzunehmen, dass es einen Datenstrom C gibt, der den gleichen Inhalt wie "(Datenstrom A) 1 0 (Datenstrom B)" hat?

Ist es nicht praktischer, ein Start-BYTE zu haben und dann den Datenstrom auf diese Bitkombination zu überprüfen? Dadurch wird die Möglichkeit einer Verwechslung zwischen dem Start- und dem Endbit verringert.

9voto

Adam Liss Punkte 46031

Gute Frage! Die meisten asynchronen Kommunikationen spezifizieren auch eine stoppen Bit, das das Komplement des Startbits ist, um sicherzustellen, dass jedes neue Symbol mit einem Stopp-zu-Start-Übergang beginnt.

Beispiel: Übertragen wir die Zeichen ABC die ASCII 65, 66 und 67 sind:

A = 65 = 0x41 = 0100 0001
B = 66 = 0x42 = 0100 0010
C = 67 = 0x43 = 0100 0011

Nehmen wir außerdem (willkürlich) an, dass das Startbit 0 und das Stoppbit ist 1 , und die Daten werden von MSB zu LSB übertragen. Der Sender befindet sich im Stoppzustand ( 1 ), wenn keine Daten übertragen werden. Der Empfänger könnte dies also sehen:

Data:   ....1111 0010000011 111 0010000101 0010000111 11111....
         (quiet) ^   A    $     ^    B   $ ^    C   $ (quiet)

Mit Entschuldigung für die ASCII-Grafiken, die Daten bestehen aus einer Reihe von Stopps ( 1 ) Bits, während der Kanal im Leerlauf ist. Wenn der Sender bereit ist, ein Zeichen zu senden, sendet er ein Start ( 0 ) Bit (markiert mit ^ ), gefolgt von dem Zeichencode, und endet mit einem Stopp ( 1 ) Bit (markiert mit $ ). Es werden weiterhin Stoppbits gesendet, bis das nächste Zeichen übertragen wird, beginnend mit einem weiteren Startbit.

Der Grund für die Verwendung von Start Bits anstelle von Bytes ist Effizienz. Das obige Schema benötigt 10 Bits (1 Start + 8 Daten + 1 stoppen ), um 8 Bit Daten zu übertragen, was zu einer Overhead von (10 - 8) / 8 = 1/4 = 25%. Wenn wir Start und Stopp verwenden Bytes müssten wir für jedes Datenbyte 3 Byte übertragen, was einen Overhead von (3 - 1)/1 = 2 = 200 % bedeuten würde. Wären die Start-, Daten- und Stopp-Bytes jeweils 8 Bits, müssten wir für jedes Zeichen 24 statt 10 Bits übertragen, so dass es fast 2 1/2 mal so lange dauern würde, die Daten zu senden!

1voto

orcmid Punkte 2568

Man kann ein Startbyte immer als Hinweis auf den Beginn einer Nachricht definieren (und die ASCII-Codes SOH, STX und ETX waren für solche Zwecke gedacht). Die Standardhardware und -protokolle für die Verbindung zu Datenübertragungsgeräten (RS232C und später) arbeiten jedoch auf einer niedrigeren Ebene, und es ist im Allgemeinen weder möglich noch wünschenswert, diese Anordnung zu ändern (insbesondere durch Software).

Leistungsstarke synchrone Datenübertragungssysteme, wie sie in lokalen Netzen und Weitverkehrsübertragungssystemen verwendet werden, verwenden aufwendige Rahmenmarkierungen. Die Rahmenmarkierung ist ein bestimmtes Muster von Bits, das im Datenstrom der Nachricht nie vorkommt. In der Regel gibt es eine spezielle Umschreibregel, die jedes Auftreten eines ähnlichen Bitmusters in den Daten "umgeht", so dass die Übertragungsgeräte es nicht als Rahmenmarkierung erkennen. Diese versteckten Muster werden vom Empfänger rekonstruiert, so dass der Sender und der Empfänger dies nicht beachten müssen. Diese Vorkehrungen machen spezialisierte Hardware noch wichtiger, wie z. B. die typische Netzwerkschnittstellenkarte (heutzutage Motherboard-Chip) in Personalcomputern.

HINTERGRUND ZUR ASYNCHRONEN SERIELLEN KOMMUNIKATION

Es ist sinnvoll, asynchrone serielle Übertragungen als asynchron zwischen Zeichen-/Datenrahmen und synchron innerhalb der Spanne des Zeichenrahmens (einschließlich der Startbits und des anfänglichen Stopp-/Füllbits) zu betrachten.

Bei diesem Schema gibt es ein konstantes Füllsignal zwischen den Frames, das in der Regel mindestens ein Datenbit breit ist, obwohl einige Anordnungen ein 1,5-Bit- oder Zwei-Bit-Stop/Fill-Signal erfordern. Das Stopp-"Bit" verwendet denselben Signalpegel und kann als Mindestfüllperiode betrachtet werden, bevor ein weiteres Startbit eintrifft.

Wenn ein Rahmen eintrifft, muss er mit der vorher festgelegten Anzahl von Bits synchronisiert werden, die er voraussichtlich tragen wird. Der Übergang vom Füllsignal zu einem Signal mit entgegengesetztem Pegel erfolgt durch das Startbit, das immer entgegengesetzt zum Stopp-/Füllpegel liegt. Die Abtastung der Bits kann so getaktet werden, dass sie in der Mitte der aufeinanderfolgenden Bit-Eingangsperioden erfolgt.

Wenn die Rahmen mit maximaler Geschwindigkeit gesendet werden, wäre es technisch gesehen nicht notwendig, ein Stop-/Fill-Bit zu senden, da sofort mit dem Startbit des nächsten Rahmens fortgefahren wird. Das Zählen von mindestens einem Füllbit vor dem Übergang zum Startbit trägt jedoch dazu bei, dass Sender und Empfänger synchronisiert bleiben.

Wenn man sich die asynchronen Datenströme so vorstellt, als würden sie durch das Drücken von Tasten auf einer Tastatur kodiert, wird deutlich, wie wichtig es ist, beliebige Füllungen zwischen den Zeichenrahmen zuzulassen. Sobald bekannt ist, welcher Rahmen als nächster gesendet werden soll, kann er sofort mit seinem Startbit mit der vereinbarten Bitrate eingefügt werden, nachdem mindestens ein Bit des vorangegangenen Stopp-/Füllbits vorhanden war.

Es ist auch nützlich zu wissen, dass es bei typischen asynchronen Übertragungen mit niedriger Geschwindigkeit nur zwei Arten von Bits/Pegeln gibt, so dass die einzige Möglichkeit, das Vorhandensein von Daten im Gegensatz zu einer Füllung zu unterscheiden, ein Markierungsschema wie dieses ist, bei dem der Anfang des Rahmens eindeutig erkennbar ist und das Ende des Rahmens vorherbestimmt ist (es sei denn, es gibt eine ausgefeiltere Rahmenstruktur mit variabler Länge, die im Allgemeinen bei asynchroner serieller Kommunikation nicht verwendet wird). Es ist tatsächlich ziemlich schwierig für einen Empfänger, die Bitrate eines Senders ohne eine zusätzliche Vereinbarung herauszufinden, wie z.B. die Suche nach einer erkennbaren Datenfolge, aus der man die Bitrate abschätzen kann, die sie korrekt ankommen lassen würde, wenn sie in falscher Form ankommt.

Auch wenn Hochgeschwindigkeitsmodems heute komplexe analoge Signale übertragen, die nicht in Form von zwei einfachen Signalpegeln beschrieben werden, ist die digitale RS232C-Kommunikation (und spätere Modi) zwischen einem Computer-UART und der Datenkopplung des Modems ziemlich genau so wie beschrieben.

Hochgeschwindigkeitsmodems verfügen außerdem über zusätzliche Funktionen zur Synchronisierung mit einem entfernten Endpunkt, wie Sie am Signalton während des Verbindungsaufbaus erkennen können. Außerdem gibt es im seriellen Kabel zum Computer separate Signalleitungen, die für die Synchronisation zwischen Computer und Modem verwendet werden, damit der Sender nicht schneller neue Datenrahmen sendet, als der Empfänger (entweder Computer oder Modem) sie annehmen kann. Ein einmal begonnener Rahmen wird jedoch immer mit der vereinbarten synchronen Geschwindigkeit gestartet.

Wikipedia hat eine gute Beschreibung von asynchrone serielle Kommunikation was serielle Computeranschlüsse verwenden.

Es gibt eine weit verbreitete Übervereinfachung, die besagt, dass das Stoppbit die Länge der Daten bestimmt. Das ist aber nicht der Fall. Das Stoppbit sieht nur wie ein Pegel für ein weiteres Datenbit aus. Das Stoppbit und der Zeitraum bis zum nächsten Startbit werden erkannt, wenn man die Bitrate kennt, mit der die Daten und die Start-/Stoppbits im Rahmen übertragen werden, und weiß, wie viele Bits ein Rahmen enthält. Andernfalls gibt es keine Möglichkeit, ein Stoppbit von einem anderen Bit mit dieser Polarität als Teil des Datenrahmens zu unterscheiden.

0voto

Robert Gamble Punkte 101657

Normalerweise funktionieren Start- und Stoppbits folgendermaßen:

  1. Es wird ein Startbit gesendet, zum Beispiel 1. Dies zeigt dem Empfänger an, dass eine bestimmte Anzahl von Datenbits, z. B. 8, übertragen werden soll.
  2. Es werden 8 Bits an Daten gesendet.
  3. Es wird ein Stoppbit gesendet, also 0. Dies zeigt an, dass die 8 Bits der Daten gesendet worden sind.

Sollen mehr Daten gesendet werden, muss jedes Byte mit einem Startbit eingeleitet und mit einem Stopbit abgeschlossen werden. Sender und Empfänger müssen sich darauf einigen, wie viele Datenbits für jedes Startbit gesendet werden, damit der Empfänger in der Lage ist, das Stoppbit von den Daten zu unterscheiden. Manchmal besteht das Startbit aus mehreren Bits oder sogar einem Byte, aber die Idee ist die gleiche. Der Empfänger erkennt das Ende des Datenrahmens, wenn er das Stoppbit sieht, nachdem er die vorgegebene Anzahl von Datenbits empfangen hat. Manchmal wird ein Paritätsbit vor dem Stoppbit gesendet, um einen einfachen Mechanismus zur Fehlererkennung zu bieten.

0voto

Szere Dyeri Punkte 14396

Das ist alles protokollabhängig. Sie können sagen, dass Sie nach dem Startsymbol N Symbole erwarten oder dass Sie lesen, bis Sie auf das Stoppsymbol stoßen.

Wobei Symbol eine beliebige n-Bit-Folge sein kann (einschließlich Bit und Byte).

Ihr Beispiel mit den Bits trifft genau auf ein Protokoll zu, das Bytes anstelle von Bits verwendet.

Angenommen, Sie senden 00000000 Stream A 11111111 00000000 Stream B 11111111. In diesem Fall können Sie es immer noch mit Stream C = Stream A 11111111 00000000 Stream B verwechseln.

Normalerweise wird ein Startbit verwendet, da eine Änderung des Spannungspegels ein Ereignis auslösen kann (siehe Flankenauslösung in Badelatschen .) Andererseits wird ein Startsymbol mit mehreren Bits nicht nur zum Auslösen eines Ereignisses, sondern auch zur Synchronisierung der Uhren zweier Systeme verwendet. Ein Beispiel dafür wäre ein PAL-Signal.

-2voto

EvilTeach Punkte 27313

Die Start- und Stopp-Bits stammen noch aus der Zeit der Fernschreiber . Sie waren im Wesentlichen Impulse, die Zeit brauchten, um die mechanische Hardware einzustellen. Die Zeilen einer Dos-Textdatei wurden mit CR LF beendet, was den Wagen buchstäblich dazu veranlasste, zu Spalte 1 zurückzukehren und die Walze um eine Zeile vorzurücken. Ich denke, das liegt an der Reihenfolge, denn es dauert länger, bis das CR auftritt, und das LF kann praktisch parallel erfolgen.

Sie zu erkennen ist etwas schwieriger. Man muss den Bitstrom sozusagen im Vorbeigehen beobachten. Mit der Zeit sollten Sie in der Lage sein, es zu erkennen, da die Daten normalerweise ASCII mit den Start-/Stop-Bits sind. Normalerweise ist das kein Problem, denn es wird von der UART die die COM Hafen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X