Frage:
Wie werden Binärdaten aufgeteilt?
Some Guy
2018-07-13 21:12:14 UTC
view on stackexchange narkive permalink

Wenn ein Computer Daten sendet, z. B. 001101, woher weiß der andere Computer, wo ein Bit beginnt und das andere endet?Wenn Sie nur die Änderung überwachen würden, würden Sie 0101 erhalten, was völlig ungenau ist.Ist es nur eine Zeitsache?(Ich entschuldige mich, wenn dies eine Noob-Frage ist)

Es ist vielleicht eine Noob-Frage, aber eine gute.Möglicherweise wurde es hier beim Stapelaustausch mehrmals gestellt und beantwortet, aber die Frage könnte anders formuliert sein.
Dies wird durch das verwendete Kommunikationsprotokoll festgelegt.Wenn Sie eine detaillierte Antwort wünschen, geben Sie ein Protokoll an.Durchsuchen Sie zunächst die Interwebs nach serieller Kommunikation und UART.
Verwandte Frage: https://electronics.stackexchange.com/questions/383960/does-computer-memory-record-the-zero-binary-state Schauen Sie sich die Top-Antwort an.
Vielleicht sprechen Sie über [Dekodieren von Faltungscode?] (Https://en.wikipedia.org/wiki/Convolutional_code#Decoding_convolutional_codes)
Kommt darauf an * wie * es gesendet wird.Es gibt verschiedene Kommunikationsprotokolle.Sie können dies wie folgt überprüfen: https://electronics.stackexchange.com/questions/251341/how-does-uart-know-the-difference-between-data-bits-and-start-stop-bits/
Siehe auch https://electronics.stackexchange.com/questions/383960/does-computer-memory-record-the-zero-binary-state?noredirect=1&lq=1.
manchmal Timing manchmal gibt es mehrere Signale.manchmal eine Kombination aus Timing und mehreren Signalen.
Genau diese Frage wurde erst in der letzten Woche hier gestellt, allerdings mit einem verwirrend falschen Titel.
Seriell oder parallel?Sie sagen "das Signal", so dass eine einzelne Zeile impliziert wird.Es gibt eine Reihe von [seriellen Protokollen] (https://en.wikipedia.org/wiki/Category:Serial_buses) und [Zeilencodierungen] (https://en.wikipedia.org/wiki/Line_code).Nehmen Sie nicht an, dass ein '1'-Wert durch einen konstanten' 1'- / 'High'-Pegel in der Zeile dargestellt wird.es ist im Allgemeinen nicht.Es gibt Leitungscodierungen, um sicherzustellen, dass der Ausgang unabhängig von der Bitsequenz regelmäßige Übergänge aufweist (damit die Empfängerschaltung den Takt rekonstruieren und die Daten aufteilen kann) und dass die Gleichstromkomponente nahe Null bleibt (also keine statische Leistung übertragen wird).
Dies hängt tatsächlich vom Protokoll ab.Es gibt eine Menge verschiedener Kommunikationsmethoden.USB 3.0 hat eine völlig andere Methode als USB 2.0, RS-232 ist ziemlich trivial, PCI / PCIe ist ein schreckliches Durcheinander, das die Gesetze der Physik usw. missbraucht.
Und dann ist da noch die umweltfreundliche IT-Abteilung mit dem Poster: Bitte Pakete wiederverwenden ...
Fünf antworten:
Neil_UK
2018-07-13 22:09:53 UTC
view on stackexchange narkive permalink

Es ist eine Zeitsache (ich mag das Wort "nur" nicht).

Bei einem UART, bei dem A für Asynchron steht, gibt es einen Leitungsleerlaufzustand und dann ein Startbit, mit dessen Flanke der Empfänger sein Timing synchronisiert.Danach werden alle Bits mit jeweils gleicher Periode gesendet.Das Wort endet mit einem Stoppbit, das sicherstellt, dass ein Übergang in ein nachfolgendes Startbit erfolgt.

old_timer
2018-07-13 22:26:47 UTC
view on stackexchange narkive permalink

Normalerweise müssen beide Seiten im Voraus wissen, wie hoch die Bitrate ist.

Wenn nicht, können Sie die Geschwindigkeit manchmal anhand der kürzesten Zustandsänderung erkennen. 0000011111111101111111, aber es kann eine Weile dauern und Sie können sehen etwas kürzeres.

Normalerweise wissen beide Seiten es im Voraus. Einige Dinge wie Ethernet, PCIE usw. verwenden eine langsam vereinbarte Geschwindigkeit, um miteinander zu sprechen, und wechseln dann im Rahmen einer Trainingsübung zu einer höheren Geschwindigkeit oder testen diese.

Es gibt auch Bitcodierungslösungen, irig 106 Kapitel 4, wenn ich mich recht erinnere, hat ein schönes Diagramm mit nrz-l, s, m Biphase-l / m / s usw. Wenn Sie Biphase verwenden, insbesondere Biphase-l Einige Branchen nennen es Manchester- oder Manchester II-Codierung. In beiden Fällen wird ein Bit mit einer Änderung des Zellenzustands im mittleren Bit definiert, sodass jedes Bit zwei Halbbitzellen mit einem hohen zu niedrigen oder niedrigen zu hohen Wert in der Mitte ist, der eine Eins oder Null bestimmt . Bei langen Datenströmen oder kontinuierlichen Daten sehen Sie per Definition nie mehr als zwei Halbbitzellen auf derselben Ebene, was die Bitsynchronisierung mit der anderen Seite erheblich erleichtert. Solange beide Seiten übereinstimmen, ist die Datencodierung zweiphasig-l.

Zusätzlich zum Herausfinden, wie oft gesampelt werden muss, gibt es ein weiteres typisches Problem, wenn jede Seite ihren eigenen Oszillator verwendet. Selbst bei einer vereinbarten Datenrate driftet jede Seite im Laufe der Zeit, sodass Sie das irgendwie lösen müssen. In einigen Situationen wie uart, in denen Ihr Frame / Ihre Nachricht sehr kurz ist, können Sie die Startbitkante verwenden, um sowohl zu definieren, wo sich ein Mid-Bit-Zellenabtastwert für eine vereinbarte Rate befindet, als auch für diese Rate von 10 Zellen oder so können Sie eine angemessene Menge haben Unterschied zwischen Uhren und es funktioniert immer noch. Wenn Sie wirklich für jede Kante, die angezeigt wird (falls vorhanden), möchten, können Sie sie neu anpassen.

In der Telemetriewelt (das irig 106-Ding) sind die Daten kontinuierlich und der Bitsync verarbeitet Überabtastung und Verfolgung, aber Sie benötigen eine gewisse Anzahl von Übergängen im Laufe der Zeit, um dies zu tun, also jene Codierungslösungen, die Bitübergänge sicherstellen.

Einige Protokolle versichern Übergänge auf andere Weise. Ethernet löst dies nicht ordnungsgemäß, der Empfänger kann / wird eine wiederhergestellte Uhr verwenden, um die Daten abzutasten, aber die Daten, die einmal in Bytes und Pakete umgewandelt wurden, werden gepuffert und verarbeitet, wenn Ihr Kristall etwas langsamer ist als der Kristall des Absenders und Sie Wenn Sie eine Zeilenrate haben und eine Speicher- und Weiterleitungssache ausführen (z. B. ein Router), werden Sie Ihre Puffer irgendwann überlaufen und müssen die Flusskontrolle übernehmen. Das ist also der Mechanismus dort.

dann natürlich, wie kommentiert, wenn Sie synchron statt asynchron sind, tragen Sie die Uhr "einfach" mit sich, aber abhängig von den Geschwindigkeiten und Kabellängen kann es zu einer Verschiebung zwischen Uhr und Daten kommen, die behandelt werden muss mit. spi hat dieses Problem sicherlich, da einige Produkte (wie Blitze) Ihre Anfrage sehen, die Sie an der steigenden Flanke gesendet haben. Sie beginnen ihre Antwort an der fallenden Flanke und Sie probieren basierend auf Ihrer steigenden Flanke, sodass Sie einen halben Taktzyklus für die Runde haben Auslösung, wenn Sie beispielsweise eine cpld- oder fpga-Inline einfügen, damit Sie hinter der Tür auf den Blitz zugreifen können (anstatt die Signale zu verkabeln oder zu teilen), können Sie die Rundreise zu lang machen. QDR-Speicher hat dieses Problem und einige Lösungen auch dafür, parallele Daten derselben Geschichte mit einer Uhr für die Fahrt, wenn die Signale Zeitprobleme haben, können Sie eine oder beide Seiten zur falschen Zeit abtasten. pci trägt eine Uhr mit sich, aber es ist die Referenzuhr, nicht die Gigaherz-Uhr, die zur Herstellung der Daten verwendet wird (es ist die Referenzuhr, die zur Herstellung der Gigahertz-Uhr verwendet wird).

kurze Antwort, die meiste Zeit einigen sich beide Seiten auf die Geschwindigkeit im Voraus, entweder durch Protokoll, feste Geschwindigkeit oder durch eine Trainingsübung mit einer vereinbarten / definierten langsameren Geschwindigkeit, oder wir sind uns einfach wie uart einig, ich weißDie andere Seite ist 1152008N1, also habe ich meine Seite darauf eingestellt.Gelegentlich können Sie mit uart beispielsweise eine Geschwindigkeit erkennen, aber die andere Seite muss Zeichen senden, die dies zulassen ... (die richtigen Übergänge nicht 00110011, sondern 101 oder 010 irgendwo.

Und vergessen wir nicht den einfachsten Ansatz von allen - die synchrone Übertragung.Fügen Sie einen zweiten Signalpfad hinzu, der eine Uhr enthält.
schrieb die Antwort von Grund auf neu, um sie der Frage anzupassen.
Jonathon Reinhart
2018-07-14 08:54:22 UTC
view on stackexchange narkive permalink

Es gibt zwei allgemeine Ansätze:

Asynchron

Asynchrone serielle Kommunikation ist eine Form der seriellen Kommunikation, bei der die Schnittstellen der kommunizierenden Endpunkte nicht kontinuierlich durch ein gemeinsames Taktsignal synchronisiert werden.

Ein UART ist eine Hardware, mit der ein Gerät Daten asynchron senden und empfangen kann , dh nicht mit einem Taktsignal synchronisiert.

Wenn Sie sich eine serielle RS232-Anschlussbelegung ansehen, werden Sie feststellen, dass es Empfangs- (RXD) und Sendedaten- (TXD) Pins gibt, aber ein "Clock" -Pin fehlt insbesondere.

Die beiden Seiten des Kommunikationskanals müssen (vorzeitig) der Rate zustimmen, mit der Bits gesendet werden sollen. Aus diesem Grund müssen Sie die Baudrate (Symbolrate) konfigurieren, damit Ihre Geräte mit serieller Schnittstelle funktionieren.

Sie sehen auch Dinge wie "Start" - und "Stopp" -Bits - diese werden verwendet, um den Empfänger mit dem eingehenden Stream zu synchronisieren.

Asynchrone Busse umfassen:

  • SATA
  • UART
  • USB

  • Synchron

    Für die synchrone Kommunikation müssen die Uhren in den Sende- und Empfangsgeräten synchronisiert sein und mit derselben Geschwindigkeit laufen, damit der Empfänger das Signal in den gleichen Zeitintervallen abtasten kann, die vom Sender verwendet werden. Es sind keine Start- oder Stoppbits erforderlich.

    Synchrone Busse verwenden ein Clock -Signal, eine Rechteckwelle, die mit einer sehr regelmäßigen, spezifischen Rate steigt und fällt. Alle anderen Signale werden mit diesem Signal synchronisiert. Ihre Werte werden typischerweise bei einer steigenden oder fallenden Flanke des Takts abgetastet.

    Da das Empfangsende eine gute Taktreferenz hat, können synchrone Busse mit einer viel höheren Rate fahren.

    Die meisten integrierten Chip-zu-Chip-Busse sind synchron, einschließlich:

    • DDR
  • I2C
  • PCI
  • stark
    2018-07-13 23:23:51 UTC
    view on stackexchange narkive permalink

    In den TTL-Tagen begannen Festplattenblöcke mit einem abwechselnden 0-1-Muster, mit dem wir eine PLL synchronisierten.Das Muster endete mit 11, um den Beginn der gelesenen Daten anzuzeigen.Die PLL lieferte den Lesetakt, und ein Quarzoszillator (ganze 5 MHz) wurde für den Schreibtakt verwendet.Die gelesenen Daten wurden 1/2 Takt zwischen den Flanken des Bitrahmens abgetastet

    Präambel existiert noch heute, hauptsächlich um transformatorgekoppelte Kommunikationen neu auszugleichen
    GOTIL
    2018-07-19 23:48:07 UTC
    view on stackexchange narkive permalink

    Sie fragen nach der Synchronisation. Um Informationen über eine Verbindung zu kommunizieren, müssen Sie eine Möglichkeit bereitstellen, die "Bits" von Informationen und ihren Start zu synchronisieren. Es gibt eine Vielzahl von Ansätzen, um dies zu erreichen, und alle sind auf die physische Umgebung (die PHY) zugeschnitten, mit der Sie sich befassen. Genauer gesagt, ist dies eine Verkabelung über eine kurze Distanz auf einer Leiterplatte, sodass Sie möglicherweise einen parallelen Bus mit einem Takt- und Lese- / Schreib-Strobe (wie Speicher) oder eine serielle Kabelverbindung (z. B. I2C, SPI, USB, Ethernet) verwenden können. ...), Power-Line-Modem, Glasfaser, I / R-Fernbedienungen, drahtlose HF, ... und vieles mehr.

    Spezifischer für Ihre Frage und wie von einigen anderen Befragten in diesem Thread angedeutet, fällt die serielle Kommunikation in ein binäres synchrones oder asynchrones Timing. Die Idee ist, dass Sie einen Takt neu erstellen müssen, um die Daten abzutasten, um festzustellen, ob das Datenbit eine Eins oder Null ist (oder eine Plus- und Minus-Spannung in einigen Implementierungen wie RS-232). Wenn Sie die Uhr separat als separates Signal senden, ist sie synchron. Wenn asynchron, senden Sie die Daten und fügen zusätzliche Informationen hinzu (bekannte Muster zu Beginn und am Ende Ihrer Übertragung; oder die Daten können mit einer Manchester-Codierung codiert werden, bei der Uhr und Daten auf clevere Weise kombiniert werden). Der Punkt hier ist, dass Sie die empfangenen Bitübergänge auf eine Weise auslösen müssen, die Ihren lokalen Takt kalibriert, damit Sie den Bitstrom sperren und ihn während einer bestimmten Rahmenlänge korrekt abtasten können. Jeder neue Frame bietet die Möglichkeit, Ihre Uhr auf die Uhr des Absenders zu korrigieren, um synchron zu bleiben.

    Außerdem wird eine Möglichkeit zum Synchronisieren mit dem Beginn der Übertragung benötigt. Dies kann auf verschiedene Arten erfolgen, basiert jedoch häufig auf einem Präambelmuster. Ein bekanntes Muster wird verwendet, um den Anfang zu ermitteln.

    Hoffe das hat geholfen - tolle Frage!



    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...