Frage:
Warum brauchen wir Start / Stopp-Bit für die asynchrone Übertragung?
amjad
2020-06-10 20:03:11 UTC
view on stackexchange narkive permalink

Ich habe ein Buch gelesen, in dem

steht

Asynchrone Übertragung wird so genannt, weil das Timing eines Signals unwichtig ist.Stattdessen werden Informationen nach vereinbarten Mustern empfangen und übersetzt.Um den Empfänger auf das Eintreffen einer neuen Gruppe aufmerksam zu machen, wird daher am Anfang jedes Bytes ein zusätzliches Bit hinzugefügt.Dieses Bit, normalerweise eine 0, wird als Startbit bezeichnet.Um den Empfänger wissen zu lassen, dass das Byte fertig ist, werden 1 oder mehr zusätzliche Bits an das Ende des Bytes angehängt.Diese Bits, normalerweise 1s, werden Stoppbits genannt.

Wie das folgende Bild zeigt:

enter image description here

Ich habe keine Ahnung, warum wir ein Start / Stopp-Bit brauchen.Ist das nicht ein Byte, das aus 8 Bits besteht? Der Empfänger muss nur zählen, wie viele Bits er bisher empfangen hat. Wenn die Zahl 8 ist, hat er ein Byte und wiederholt den Vorgang.Warum brauchen wir also ein Start / Stopp-Bit?

Wie zählen Sie Bits, wenn Sie nicht wissen, wann Sie mit dem Zählen beginnen sollen?Denken Sie daran, dass Nachrichten nicht fortlaufend sind und sporadisch auftreten können. Sowohl HI als auch LO, Ihre beiden einzigen Zustände, werden bereits zur Darstellung von Daten verwendet.Es gibt keinen dritten Zustand, der das Fehlen einer Nachricht darstellt.
asynchron, kein Takt, Sie benötigen mindestens eine Flanke und eine vereinbarte (oder wenn möglich erkannte) Rate, damit Sie für diese 8-Bit-Geben (Nehmen) (Parität, Länge usw.) eine Abtastung der mittleren Bitzellen durchführen können.Und das reicht nicht aus, um zu wissen, wo Sie sich befinden, abhängig von der Situation, in der Sie möglicherweise einige Rahmenfehler haben müssen, bis Sie glauben, synchronisiert zu sein.
Selbst wenn Sie eine Uhr hätten, von der Sie nicht wissen, wo die Grenzen liegen, könnten Sie so etwas wie spi haben, wo Sie eine Uhr und ein Auswahlsignal haben, damit Sie sehen können, wo Sie abtasten und wie Sie aufteilen, was Sie abtasten, damit Sie es wiederherstellen könnenauf der anderen Seite.
"Das Timing eines Signals ist unwichtig" - wissen Sie, dass es einen Witz gibt, wenn ich einen gehört habe.
Fünf antworten:
Andy aka
2020-06-10 20:05:50 UTC
view on stackexchange narkive permalink

Wenn Sie kein Null-Startbit hätten, das das Timing für den Empfänger ausgelöst hätte, wie würden Sie wissen, was zu tun ist, wenn ein serielles Byte mit einer führenden 1-Ziffer im Datenstrom einhergeht?Was passiert, wenn das nächste Bit ebenfalls 1 ist und das Bit danach - was ist, wenn alle Bits 1 sind?Dann würden Sie das gesamte Byte verpassen, da sich nichts ändern würde (da kein Startbit von 0 vorhanden ist).

Regelmäßige 8 High-Bits mit führendem Null-Startbit: -

enter image description here

Fehlendes Startbit: -

enter image description here

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/109283/discussion-on-answer-by-andy-aka-why-we-need-start-stop-bit-for-asynchron-tra).
Cort Ammon
2020-06-12 01:33:31 UTC
view on stackexchange narkive permalink

Eine weitere Überlegung neben der akzeptierten Antwort ist das Timing.Sie werden eine Drift zwischen der Sender- und der Empfängeruhr haben, so dass der Empfänger die Uhr auf die eine oder andere Weise "wiederherstellen" muss.Es gibt ausgefallene Schemata wie 10 / 8B, die dazu Leerlaufsignale verwenden, aber der einfache Ansatz in UARTs besteht darin, ein "Startbit" zu haben, dessen Vorhandensein die ansteigende Flanke des Signals signalisiert.Dadurch kann der Empfänger seine Uhr neu synchronisieren, um das bevorstehende Byte zu empfangen.

Diese Start- und Stoppmuster müssen häufig genug auftreten, um sicherzustellen, dass die Ausrichtung während des Empfangs nicht zu weit driftet.Dies führt dazu, dass Start- und Stoppbits in jedem Byte erscheinen.Dies ist eine einfache Regel, auch wenn sie auf andere Weise nicht "ideal" ist.

Ein guter Punkt, den ich zu verstehen versuchte.
Tanner Swett
2020-06-11 23:25:34 UTC
view on stackexchange narkive permalink

Ich habe keine Ahnung, warum wir ein Start / Stopp-Bit brauchen. Ist das nicht ein Byte, das aus 8 Bits besteht? Der Empfänger muss nur zählen, wie viele Bits er bisher empfangen hat. Wenn die Zahl 8 ist, hat er ein Byte und wiederholt den Vorgang. Warum brauchen wir also ein Start / Stopp-Bit?

Der Empfänger kann die empfangenen Bits nicht zählen, da der Empfänger nicht weiß, ob er Bits empfängt oder nicht!

Stellen wir uns vor, dass Sender und Empfänger über Ton kommunizieren, und stellen wir uns vor, dass eine 0 durch eine Sekunde Stille und eine 1 durch eine Sekunde Ton dargestellt wird. In Ihrem Buch ist der "Leerlaufzustand" - was der Absender sendet, wenn er keine tatsächlichen Daten zum Senden hat - 1, was Ton bedeutet.

Nehmen wir nun an, Sie sind der Empfänger und der Absender verwendet kein Startbit. Sie hören acht Sekunden ununterbrochenen Ton. Haben Sie gerade das Byte "11111111" gehört oder ist der Absender nur im Leerlauf? Sie haben keine Möglichkeit zu wissen, weil für Sie alles gleich klingt.

Angenommen, Sie hören eine Sekunde Stille, dann sechs Sekunden Ton und dann eine Sekunde Stille. Haben Sie gerade das Byte "01111110" gehört? Oder war es vielleicht das Byte "11110111", gefolgt vom Byte "11101111"? Auch hier haben Sie keine Möglichkeit zu wissen.

Hier kommt das Startbit ins Spiel. Wann immer der Absender ein Byte senden möchte, sendet er zuerst eine 0 (eine Sekunde Stille), dann sendet er das Datenbyte.

Jetzt ist Ihre Arbeit als Empfänger viel einfacher! Wenn Sie neun Sekunden lang hören, wissen Sie, dass der Absender nur im Leerlauf ist. Wenn Sie andererseits eine Sekunde Stille gefolgt von acht Sekunden Ton hören, wissen Sie, dass der Absender gerade das Byte "11111111" gesendet hat.

Natürlich verwenden die meisten Maschinenkommunikationssysteme keinen Ton. Sie verbrauchen stattdessen Strom. Aber elektrische Signale funktionieren genauso wie Schall. Der Empfänger wird immer etwas empfangen, unabhängig davon, ob wir dies möchten oder nicht. Wir müssen dem Empfänger also eine Möglichkeit geben, zu wissen, ob er echte Daten oder nur Leerlaufgeräusche empfängt.

Um diese spezielle Frage aus Ihrem Kommentar zu beantworten:

nur eine Frage: Wenn wir keinen "Leerlauf" -Wert haben. Wenn also keine Daten gesendet werden müssen, empfängt der Empfänger nichts, sodass er alle 8 Bits als Byte zählen kann, ohne Stopp / Start zu benötigen Bit?

Es ist physikalisch unmöglich, keinen Leerlaufwert zu haben. Wenn Sie ein Elektrokabel haben, ist es möglich, eine positive Spannung oder eine negative Spannung oder eine Spannung von 0 zu senden, aber es ist physikalisch unmöglich, keine Spannung zu senden. Das bedeutet, dass der Empfänger immer eine gewisse Spannung empfängt, egal was wir tun. Wir müssen dem Empfänger also eine Möglichkeit geben, zu wissen, ob die Spannung, die er empfängt, sinnvoll ist oder nicht.

auspicious99
2020-06-10 21:54:43 UTC
view on stackexchange narkive permalink

Vielleicht liegt die Verwirrung daran, dass wir als Menschen, wenn wir ein Diagramm wie in Ihrer Frage sehen, genau sehen, wo sich alle Bits befinden, welches auf welches folgt usw. Stellen Sie sich jedoch vor, Sie sind der Empfänger und alles, was Sie haben zu arbeiten ist ein eingehender Signalfluss (zum Beispiel 2 Pegel, ein Pegel (z. B. hoch), um ein 1-Bit darzustellen, ein anderer Pegel (z. B. niedrig), um ein 0-Bit darzustellen), als analoges elektrisches Signal, das entweder ist stetig oder von einem Wert zum anderen wechselnd. Beachten Sie erneut, dass der Empfänger kein Mensch ist, der das 1. Bit, das 2. Bit usw. mit einer globalen Ansicht sieht.

Angenommen, der "Leerlauf" -Wert entspricht dem 1-Bit-Wert (hoch). Dann wissen Sie nicht, wann die Bits ankommen, es sei denn, wir haben den Übergang von 1 zu 0. Wenn das erste Bit 1 ist, woher wissen Sie dann, wann es beginnt?

Dann möchten Sie für Stoppbits, dass es dem Startbit entgegengesetzt ist (also möchten Sie, dass es Werte von 1 ist), damit es das Ende eines Bytes markiert und Sie wissen, wann das nächste Byte wann beginnt wieder geht es von hoch nach niedrig.

Sie könnten auch argumentieren, dass es sich anstelle einer globalen Ansicht um eine nicht kausale Ansicht handelt.Es ist nicht nur nicht kausal, sondern die Diagramme werden auch gezeichnet, * nachdem * jemand oder etwas bereits herausgefunden hat, wo alles beginnt und endet, und sie beschriftet.Sie könnten genauso gut sagen: "Warum brauchen wir all diese Arbeit, um diese Gleichung zu lösen? Die Antwort ist hier am Ende! Verwenden Sie das einfach!"
@auspicious99 Vielen Dank für Ihre Antwort.Nur eine Frage: Wenn wir keinen "Leerlauf" -Wert haben. Wenn also keine Daten gesendet werden müssen, empfängt der Empfänger nichts, sodass er alle 8 Bits als Byte zählen kann, ohne ein Stopp / Start-Bit zu benötigen.
@amjad Um Verwirrung zu vermeiden, wurde jedem gesendeten Byte das Start- und Stoppbit hinzugefügt, sodass jedes Mal 10 Bits gesendet werden.Einige nennen es immer noch eine Baudrate.Der Empfänger erwartet 10 Bits pro Datenbyte.Denken Sie daran, dass die Start- und Stoppbits dazu beitragen, den Empfänger mit den Daten synchron zu halten.8-Bit-Daten können alle Einsen oder alle Nullen sein.Ohne Übergang von 0 nach 1 oder 1 nach 0 kann die Bytegrenze nicht erkannt werden.
Beachten Sie, dass in diesem Fall das Stoppbit nicht wirklich "das Ende eines Bytes markiert", es markiert nichts, das Ende des Bytes ist aus dem Timing bekannt.Das Stoppbit dient dazu, die Leitung in den Ruhezustand zurückzusetzen, damit das nächste Startbit jederzeit erkannt werden kann.
@vsz danke für deine Antwort.Aber brauchen wir wirklich ein Stoppbit, um die Leitung in den Ruhezustand zurückzusetzen?Mir wurde gesagt, dass der Kanal im Leerlauf immer noch 1s an den Empfänger sendet
Aber woher weiß der Kanal, dass er im Leerlauf ist?;)
@amjad auf der Senderseite, stellen Sie sich vor, Sie haben einen Schalter und müssen jederzeit den einen oder anderen Wert auswählen, indem Sie den Schalter auf die eine oder andere Position stellen.
@amjad: Vielleicht wäre es einfacher, sich das Startbit einfach als Rückkehr der Leitung in den Ruhezustand vorzustellen, als als ein bisschen.
@amjad: "Damit alle 8 Bits als Byte gezählt werden können, ohne dass ein Stopp / Start-Bit erforderlich ist": Nein. Sie beschreiben die synchrone Kommunikation (die analoge Probleme hat, die zufällig driftenden Uhren aller zu synchronisieren).Bei der asynchronen Kommunikation kann zwischen dem Ende eines Bytes und dem Anfang des nächsten eine beliebige Zeitspanne vergehen.Diese Zeit muss nicht ein Vielfaches der Zeit sein, um ein Bit zu übertragen.
@auspicious99: Was würde passieren, wenn ein Gerät ohne Stoppbits 5.000 aufeinanderfolgende Null-Bytes senden würde, bevor die Leitung für eine Weile inaktiv bleibt?Wie genau müsste die Uhr eines Empfängers sein, um festzustellen, dass der Sender genau 5.000 Null-Bytes gesendet hat, anstatt entweder 4.999 Nullen und eine 0x80 oder 5.000 Nullen, gefolgt von einer 0xFF?Es gibt Möglichkeiten, asynchrone Protokolle zu entwerfen, um sicherzustellen, dass innerhalb einer kontinuierlichen Kommunikation periodische Leitungsübergänge ohne Verwendung von Stoppbits stattfinden. Die meisten UARTs können jedoch nicht so konfiguriert werden, dass sie diese unterstützen.
supercat
2020-06-12 02:39:51 UTC
view on stackexchange narkive permalink

Wenn eine Leerlaufleitung durch einen kontinuierlichen Strom desselben Zustands dargestellt wird, der keinen eindeutigen Anfang hat, muss jede Übertragung mit dem Senden von etwas beginnen, das sich von einem Leerlaufleitungszustand unterscheidet, unabhängig davon, ob das erste übertragene Bit Null oder Eins ist . In Ermangelung anderer Mittel zum Anzeigen, wann eine Übertragung beginnt, ist ein Startbit daher im Allgemeinen sowohl in synchronen als auch in asynchronen Protokollen wesentlich, in denen eine Leerlaufleitung nicht von einer einheitlichen Folge von Einsen oder Nullen zu unterscheiden wäre.

Obwohl es Möglichkeiten gibt, Protokolle zu entwerfen, die keine separaten Start- und Stoppbits zwischen Bytes erfordern und somit die Kommunikationseffizienz um 10% verbessern, sind sie tendenziell etwas komplizierter als das aktuelle Protokoll, das mechanisch entworfen wurde dekodiert mit einer Kombination aus einem Magneten, einem Motor und einigen Nocken. Eines der Dinge, die es schwierig machen würden, ohne Stoppbits auszukommen, ist, dass, wenn ein Startbit die Leitung immer in das Gegenteil des Ruhezustands treibt und jedes Datenbit unabhängig hoch oder niedrig sein kann, dann viele aufeinanderfolgende Nullbytes gesendet werden könnte einfach die Leitung für eine beliebig lange Zeit ohne Übergänge niedrig fahren, um sicherzustellen, dass Sender und Empfänger synchron bleiben.



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 4.0-Lizenz, unter der er vertrieben wird.
Loading...