Frage:
Warum sind das Startbit und das Stoppbit notwendig?
Tom
2017-10-22 03:24:39 UTC
view on stackexchange narkive permalink

Ich lerne etwas über serielle Kommunikation und kann einfach nicht verstehen, warum das Startbit und das Stoppbit (die Stoppbits) erforderlich sind.

Ich meine, ich habe zwei Geräte, die über serielle Schnittstellen verbunden sind, und das Bit 1 wird durch + 15 V und das Bit 0 durch -15 V dargestellt.

Damit Gerät 1 die 4 Bits 0110 an Gerät 2 sendet, sollte Gerät 1 das sendenfolgende Spannungen: -15 V + 15 V + 15 V -15 V.

Was fehlt mir hier, weil es anscheinend ohne das Startbit und die Stoppbits funktionieren kann!

Sie haben vergessen, den Ruhezustand anzugeben.
Fünf antworten:
#1
+11
Tom Carpenter
2017-10-22 04:01:30 UTC
view on stackexchange narkive permalink

Das Szenario, über das Sie zu sprechen scheinen (mit Start- und Stoppbits), ist wahrscheinlich UART (von dem RS232 eine Art ist). UART steht für Universal Asynchronous Receive Transmit, dessen Hauptbestandteil Asynchronous ist. Es gibt keine Taktleitung, nur Daten.

In dieser Art von System haben Sie zwei Geräte (TX und RX), die nicht unbedingt eine gemeinsame Uhr haben. Beide Systeme könnten sich beispielsweise auf 9600 Baud einigen, aber ohne eine gemeinsame Uhr könnte eines 9601 Baud erzeugen, während das andere 9599 Baud erhält. Die Uhren sind nicht genau, was bedeutet, dass die beiden mit der Zeit nicht mehr richtig ausgerichtet sind.

Da die Kommunikation außerdem asynchron ist, kann sie gestartet werden, wann immer der Sender dies wünscht (ohne Berücksichtigung der Flusskontrolle). Der Sender und der Empfänger könnten s> zu unterschiedlichen Zeiten eingeschaltet werden, und der Empfänger kann nicht wissen, wann er mit dem Senden beginnt.

Die Schlüsselanforderung wird dann als Synchronisation bezeichnet. Das Protokoll muss eine Möglichkeit des Senders enthalten, dem Empfänger zu signalisieren, dass er gerade mit dem Senden begonnen hat. Außerdem muss es eine Möglichkeit geben, die Uhren an beiden Enden zu synchronisieren.

Im Fall von UART erfolgt diese Synchronisation in Form eines Übergangs von hoch nach niedrig auf der Datenleitung. Die Leitung wird im Leerlauf hoch und fällt dann zu niedrig, wenn die Übertragung beginnt. Dieser Übergang dient dazu, das Timing zwischen beiden Geräten zu synchronisieren. Der Empfänger weiß dann, dass er basierend auf seiner Bauduhr in genügend Datenzyklen taktet. Es gibt jedoch zwei Probleme mit diesem Schema:

  1. Der einzelne Übergang von hoch nach niedrig reicht nicht aus, um das Timing über einen langen Zeitraum zu synchronisieren. Denken Sie daran, dass die beiden Geräte leicht unterschiedliche interne Taktraten haben. Solange diese beiden Takte innerhalb eines bestimmten Prozentsatzes voneinander liegen, liefert der Übergang genügend Informationen, um die Geräte für höchstens einige Taktzyklen zu synchronisieren. Das bedeutet, dass Sie eine regelmäßige Neusynchronisierung benötigen.

  2. Wenn Ihre Leitung im Leerlauf hoch ist und das erste Datenbit, das Sie senden möchten, auch durch eine hohe Ebene dargestellt wird, haben Sie keinen Übergang. Wenn Ihre Leitung im Leerlauf niedrig ist und das erste Bit, das Sie senden möchten, niedrig ist, haben Sie das gleiche Problem. Das bedeutet, dass Sie eine Möglichkeit benötigen, das erste Bit zu unterscheiden.

  3. ol>

    Diese beiden Probleme werden im Fall von UART durch Verwendung von Start- und Stoppbits gelöst. Die gesendeten Daten werden in Pakete von wenigen Bits (z. B. 8 Bit) aufgeteilt. Vor jedem Paket steht ein Startbit von "niedrig", gefolgt von einem Stoppbit von "hoch". Das bedeutet, dass zwischen jeweils wenigen Bits ein bekannter Übergang von hoch nach niedrig bekannt ist - das Stoppbit des letzten Pakets und das Startbit des aktuellen Pakets. Sie können jetzt jedes Paket neu synchronisieren.


    Dies ist keineswegs die einzige Möglichkeit, das Problem zu lösen. Es gibt viele andere Schemata - die Manchester-Codierung ist ein Beispiel. In diesem Schema bedeutet ein Übergang von niedrig nach hoch eine logische 1, während ein Übergang von hoch nach niedrig eine logische 0 signalisiert. Dies bedeutet, dass jedes von Ihnen gesendete Bit Taktinformationen darin codiert, was bedeutet, dass Sie jedes gesendete Bit neu synchronisieren können.

    Sie könnten andere Signalisierungsmethoden verwenden, z. B. die Verwendung von ternären drei Spannungspegeln. Zum Beispiel könnten Sie + 5V für eine 2, 0V für eine 1 und -5V für eine 0 verwenden. Sie könnten eine Binärdatei über dieses System senden, indem Sie einen dieser Zustände verwenden, um Leerlauf anzuzeigen. In diesem Beispiel haben Sie jedoch einfach ein Start- und Stoppbit durch eine Zeitspanne bei einer dritten Spannung ersetzt. Sie werden die Notwendigkeit einer periodischen Resynchronisation nicht ändern, sodass Sie nichts wirklich sparen und die Schaltung nur noch komplizierter wird.

#2
+7
Trevor_G
2017-10-22 04:00:28 UTC
view on stackexchange narkive permalink

Sie sagen -15V + 15V + 15V -15V. Das ist 0110, Sie haben Recht, ein Empfänger könnte das richtig empfangen.

Aber was ist, wenn Sie 15V 15V 15V -15V senden, wie würden Sie wissen, was das ist? Da der Hörer als erstes die ersten -15 V hört, haben Sie keine Ahnung, wie viele 15-V-Signale zuvor eingegangen sind.

Der Hörer würde dasselbe hören, unabhängig davon, ob der Absender 1110, 1101, 1011 oder 0111 gesendet hat.

enter image description here

Ohne Zeitangabe sehen sie alle als Spannungssignal gleich aus.

Da bei asynchronen Signalen die Zeit wichtig ist, müssen Sie ein "LISTEN UP" -Signal senden. In RS232 ist dieses Abhörsignal ein Übergang von hoch nach niedrig auf der Leitung. Es teilt dem Empfänger mit, "Ich bin dabei, N Datenbits mit meiner Baudrate zu senden, beginnend JETZT!"

enter image description here

Beachten Sie, dass in diesem Beispiel 4-Bit-UART jedes Muster jetzt eine eindeutige Signatur hat.

Das Stoppbit stellt sicher, dass die Leitung am Ende der Übertragung in den Ruhezustand zurückkehrt, und gibt dem Empfänger ein Zeitfenster, um die gerade empfangenen Bytes zu verarbeiten, zurückzusetzen und sich darauf vorzubereiten, auf das nächste Startbit zu warten.

In der Abbildung unten hat der erste Trace kein Stoppbit. Da das letzte Bit der ersten Daten Null ist, ist die Leitung bereits niedrig, wenn das nächste Startbit eintrifft, und es gibt keinen Übergang zum Starten des UART. In der zweiten Kurve, die ein Stoppbit enthält, ist garantiert hoch vor niedrig.

enter image description here

Tatsächlich bieten die meisten UARTS die Möglichkeit, mehr als ein Stoppbit zu senden, um dieses Fenster für den Empfänger weiter zu öffnen. Dies war in den frühen Tagen der seriellen Übertragung wichtiger, als das RS232-Signal mechanische Motoren und Relais direkt ansteuerte, aber es kann noch heute verwendet werden.

Außerdem prüfen die meisten UARTS tatsächlich, ob das Stoppbit zum geeigneten Bitzeitpunkt hoch ist. Ist dies nicht der Fall, wird dem Empfänger ein Rahmenfehler gemeldet.

#3
+5
user287001
2017-10-22 04:03:31 UTC
view on stackexchange narkive permalink

Startbit ist ein Aufwecken am Ende des Ruhezustands.Stopbit stellt sicher, dass zu Beginn des neuen Bytes ein Übergang bekannt ist.Das System wurde zu einer Zeit entwickelt, als es nicht möglich war, sicherzustellen, dass die Motoren in mechanischen Datenübertragungsgeräten (= Ferndrucker) an beiden Enden synchron laufen.Start- und Stoppbits waren die Resynchronisierungsmethode.

Heutzutage können viel längere Bitsequenzen als ein Byte übertragen werden, ohne dass eine erneute Synchronisierung erforderlich ist.Aber schließlich driften alle Uhren auseinander und es ist eine Synchronisation erforderlich.Es wurden zahlreiche Codierungssysteme entwickelt, die die benötigten Synchronisationsdaten viel effektiver übertragen als start&stopbits, die + 25% zusätzliche Kapazität benötigten.

#4
+2
JonRB
2017-10-22 03:29:06 UTC
view on stackexchange narkive permalink

Für eine Nutzlast sicher ... vielleicht ... möglicherweise.Was aber, wenn Sie einen Datenstrom senden?Wie kann der Empfänger sicher sein, wann die letzte Nutzlast beendet wurde und die neue Nutzlast startet?

Der Ruhezustand eines RS232-Busses beträgt -12V.Woher weiß der Empfänger, dass er einen Strom von Nullen empfangen soll oder wann die Übertragung beginnen soll?

Eine solche serielle Kommunikation ist auch asynchron.Der Empfänger muss eine Kante sehen, um Aspekte der Übertragung zu bestimmen

* "Wie kann der Empfänger sicher sein, wann die letzte Nutzlast beendet wurde und die neue Nutzlast startet?" * Gibt es keine Einigung über die Größe der Nutzlast, zum Beispiel beträgt jede Nutzlast 8 Bit?
-1
@Tom, aber woher weiß der Empfänger, wo diese 8-Bit-Nutzlast beginnt?Die Zeit vergeht, wenn keine Daten zu senden sind.
@Tom Carpenter * "aber woher weiß der Empfänger, wo die Nutzlast beginnt" * Er wird wissen, wann sich die Spannung geändert hat (sorry, ich weiß nichts über Elektrizität, also weiß ich nicht, ob es so etwas gibtals * "spüren, dass sich die Spannung geändert hat" *).
Damit festgestellt werden kann, dass sich die Spannung geändert hat, muss sich die Spannung ändern.Betrachten Sie die Leitung als '1' im Leerlauf.Nehmen wir nun an, das erste Bit der 8-Bit-Nutzlast ist eine '1'.Wie erkennt der Empfänger, dass sich die Spannung von '1' auf '1' geändert hat (Hinweis: dies kann nicht).Um sicherzustellen, dass eine Spannungsänderung auftritt, verwendet UART am Ende eine 1 (Stoppbit) und am Anfang eine 0 (Startbit).Jetzt haben Sie einen garantierten 1-> 0-Übergang, wenn ein Paket gestartet wird.
@Tom muss noch synchronisiert werden.Die Uhr wird nicht in allen seriellen Kommunikationen übertragen (für einige Typen ist sie in der Übertragung codiert, Manchester-Codierung).
@Tom Carpenter Was ist, wenn der Leerlauf 10 V beträgt, kann jetzt erkannt werden, wann sich die Spannung ändert (entweder auf + 15 V oder -15 V).
@Tom, aber dann haben Sie kein binäres Signalisierungssystem mehr, was im Fall von UART nicht so ist, wie es entworfen wurde.Bedenken Sie auch, dass das Signal über eine Entfernung gedämpft wird, sodass der Sender möglicherweise nur +10 V empfängt, während der Sender möglicherweise +15 V sendet.
RS232 hat einen Spannungsbereich von + 3 V bis + 15 V für eine "0" und -3 V bis -15 V für eine "1".Jede Spannungsänderung innerhalb dieses Bereichs, die nicht kippt, wird nicht als Kante behandelt
Die tatsächliche binäre Schwelle beträgt 1,3 bis 1,5 V, genau wie bei TTL.
@Tony: Auf welchen Spezifikationsschwellenwert beziehen Sie sich?
Die V-te Spezifikation für alle RS232-Chips und TTL-Familien, normalerweise nicht als solche angegeben, aber ich weiß aus Erfahrung.Sie können dies auch von Avg of Vil, Vih ableiten
#5
+2
old_timer
2017-10-22 08:18:42 UTC
view on stackexchange narkive permalink

Sie verwechseln die Spannungspegel (RS-232, nehmen wir an) und das serielle Protokoll (sagen wir einfach uart, wie es aus einer Zeit stammt, bevor alle davon besessen waren, Dinge zu benennen).

Anhand Ihres Beispiels können Sie beispielsweise 0110 nicht von 001100 unterscheiden. Mit dem uart-Protokoll müssen Sie idealerweise die Mitte der Bitzelle abtasten, damit der Empfänger weiß, wo sich die Mitte befindet, sich auf verschiedenen Zeitquellen befindet und nicht genau gleich ist. Die erste Flanke aus dem Leerlauf gibt Ihnen eine Referenz, um in der Lage zu sein Um die Mitte der nächsten N Bits zu treffen, wie groß N ist, hängt es von der Genauigkeit jeder Seite ab, etwa 8 Datenbits. Sie können ziemlich schlampig sein und, wenn Sie möchten, an allen Kanten, die Sie finden, erneut synchronisieren (in Ihrem Beispiel) Wie würden Sie 00000000 oder 11111111 erhalten?)

Das Startbit gibt uns eine Kante, die sich von Leerlauf unterscheidet. Zu erkennen ist, wann die Nachricht beginnt, und eine Referenz zum Abtasten der Bits. Das Stoppbit stellt sicher, dass wir mindestens für ein oder zwei Bitzellen wieder in den Leerlauf zurückkehren. Wenn Sie mit Daten gesättigt sind, keine Lücken, kein Leerlauf außer dem Stoppbit, dann haben Sie ein anderes Problem, das das Uart-Protokoll nicht unbedingt löst (Parität hilft), wenn Sie in die Mitte kommen (jemand steckt dann etwas ein, während sich Daten bewegen oder aus einem anderen Grund) Die Start- und Stoppbits helfen dabei, die Daten ohne Parität zu rahmen. Möglicherweise können Sie immer noch herausfinden, wo Sie sich befinden. Mit Parität haben Sie eine noch bessere Chance, sind aber nicht perfekt.

Jetzt gibt es andere Protokolle. Viele andere Protokolle. Nachschlagen irig-106, anstelle eines Startbits haben Sie ein Synchronisationsmuster, dem Hunderte von Bits vor einem anderen Muster folgen können, keine Totperioden. Das irig-Dokument enthält ein schönes Diagramm mit verschiedenen Codierungen, wobei NRZ-L das ist, was wir von einem einfachen uart gewohnt sind (keine Rückkehr zum Nullpegel). Ein interessantes ist zweiphasig-l Ihr 0110 würde mit der doppelten Frequenz der Daten übertragen und wäre 01101001, im schlimmsten Fall können Sie nie mehr als zwei Halbbitzellen hintereinander auf derselben Ebene haben, viele Kanten, mit denen Bitsynchronisation durchgeführt werden soll.

Ein weiteres interessantes ist mil-std-1553, wo sie Bi-Phase-L verwenden (eine beliebte Codierung mit vielen verschiedenen Namen, nur Biphase oder Manchester usw.), aber es handelt sich nicht um kontinuierliche Daten, sondern um einen Burst von ein bis viele Wörter. Sie verwenden einen absichtlichen Zweiphasen-1-Fehler von drei Halbbitzellen und drei Halbbitzellen als Synchronisationsmuster und gehen dann in die in Zweiphasen-1 codierte Nachricht.

Kein Grund, warum Sie keine Spannungspegel für RS-232, RS-422 usw. mit einem anderen als dem uart-Protokoll verwenden könnten. Sie benötigen jedoch immer noch gelegentlich Kanten in den Daten, um die Uhren zu synchronisieren (wenn Sie die Uhr mit sich führen, ist dies eine andere Geschichte), und Sie müssen wissen, wo sich die Bitgruppen befinden, die Bytes oder Wörter bilden Sie müssen also ein Synchronisationsmuster oder ein Startbit oder ein anderes haben. oder machen Sie etwas wie spi oder i2c, um den Anfang zu markieren. Das klassische Ethernet verwendete eine lange Rechteckwelle mit einigen Bits, um das Ende und den Beginn des Pakets anzuzeigen. MDIO hat etwas Ähnliches.

Letztendlich können Sie kein zuverlässiges serielles Einzelsignalprotokoll haben, ohne zu wissen, wo sich Wort- / Nachrichtengrenzen im Bitstrom befinden. Sie können dies auch nicht tun, ohne zu wissen, wo / wann für jedes Bit abgetastet werden muss.Selbst wenn ein kontinuierlicher Bitstrom und Sie vielleicht denken, Sie wüssten, wann die Zeit Null war und Sie einfach bis 8 zählen und ein anderes Byte markieren können, haben Sie vielleicht Glück, müssen aber trotzdem mit der sendenden Uhr synchronisieren, da Ihre Uhr auf einer anderen basiertReferenz und wird relativ zur Senderuhr driften.Sie können also versuchen, dies durchzuziehen, solange Sie regelmäßig die gefundenen Kanten betrachten und sicherstellen, dass alle N Bits eine Kante vorhanden ist, basierend auf der Mathematik in Bezug auf die Genauigkeit der Uhren.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...