Taktfrequenz des UART-Empfängers

Ich habe versucht, die UART-Grundlagen zu verstehen. Das ist selbstverständlich

  • Es ist ein asynchrones Kommunikationsprotokoll und daher sind die TX- und RX-Taktgeber unabhängig voneinander
  • Der Datenempfang wird durch die Verwendung eines Startbits und eines oder mehrerer Stoppbits garantiert. Zusätzlich muss der Empfänger die Datenrate kennen, um einen geeigneten Takt zu erzeugen, um das für den Empfang verwendete SIPO-Register anzusteuern.

Die Fragen hier sind

Es wird erwähnt, dass normalerweise ein Takt mit der 16- fachen Bitrate verwendet wird, um die Daten wiederherzustellen. Wie ist also die Umwandlung von bps in Taktfrequenz möglich? Bitte geben Sie mir einige Referenzen, um den im UART-Empfänger verwendeten Taktmechanismus zu untersuchen.

Antworten (3)

Sender- und Empfängertakte sind unabhängig voneinander, da sie unabhängig voneinander erzeugt werden, aber sie sollten gut aufeinander abgestimmt sein, um eine ordnungsgemäße Übertragung sicherzustellen.

Das Low-Startbit und das High-Stopbit garantieren, dass zwischen zwei Bytes immer ein High-Low-Übergang stattfindet, auf den sich der Empfänger synchronisieren kann, danach aber von alleine: keine Zeit mehr Hinweise, die es verwenden kann, um aufeinanderfolgende Bits voneinander zu unterscheiden. Alles, was es hat, ist eine eigene Uhr. Am einfachsten ist es also, mit dem Startbit zu beginnen und jedes Bit in der Mitte seiner Zeit abzutasten. Bei 9600 bps beträgt die Bitzeit beispielsweise 104 µs, dann würde das Startbit bei abgetastet T 0 + 52 µs, das erste Datenbit bei T 0 + 52 µs + 104 µs, das zweite Datenbit bei T 0 + 52 µs + 2 × 104 µs und so weiter. T 0 ist die fallende Flanke des Startbits. Während das Abtasten des Startbits nicht wirklich notwendig ist (Sie wissen , dass es niedrig ist), ist es nützlich sicherzustellen, dass die Startflanke keine Spitze war.

Geben Sie hier die Bildbeschreibung ein

Für ein Timing von 52 µs benötigen Sie die doppelte Taktfrequenz von 9600 bps oder 19200 Hz. Dies ist jedoch nur eine grundlegende Erkennungsmethode. Fortgeschrittenere (sprich: genauere) Methoden nehmen mehrere Proben hintereinander, um zu vermeiden, dass nur diese eine Spitze getroffen wird. Dann brauchst du vielleicht tatsächlich eine 16 × 9600-Hz-Takt, um 16 Ticks pro Bit zu erhalten, von denen Sie beispielsweise 5 oder so in einem Bit verwenden können, das in der Mitte liegen sollte. Und die verwenden ein Abstimmungssystem, um zu sehen, ob es als hoch oder niedrig gelesen werden sollte.

Wenn ich mich richtig erinnere, hat der 68HC11 ein paar Samples am Anfang, in der Mitte und am Ende eines Bits genommen, das erste und letzte vermutlich zum Resynchronisieren, wenn es eine Pegeländerung geben würde (was nicht garantiert ist).

Der Abtasttakt wird nicht von der Bitrate abgeleitet, sondern umgekehrt. Für 9600 bps müssen Sie den Sampling-Takt auf 153 600 Hz einstellen, den Sie über einen Prescaler aus der Taktfrequenz des Mikrocontrollers ableiten. Daraus wird dann durch eine weitere Division durch 16 der Bittakt abgeleitet.

unmatched clocks Folgendes
passiert, wenn die Uhr des Empfängers nicht mit der des Senders synchron ist:

Geben Sie hier die Bildbeschreibung ein

Die Uhr des Empfängers ist 6,25 % langsam, und Sie können sehen, dass die Abtastung für jedes nächste Bit später und später erfolgt. Eine typische UART-Übertragung besteht aus 10 Bits: 1 Startbit, eine Nutzlast von 8 Datenbits und 1 Stoppbit. Wenn Sie dann in der Mitte eines Bits sampeln, können Sie es sich leisten, beim letzten Bit, dem Stoppbit, ein halbes Bit daneben zu liegen. Ein halbes Bit auf zehn Bits sind 5 %, also bekommen wir mit unseren 6,25 % Abweichung Probleme. Das zeigt das Bild deutlich: Bereits beim dritten Datenbit wird randnah gesampelt.

Ich schätze die Hilfe. Danke!!. Sollte das Startbit nicht bei T0+104us statt bei T0+52us abgetastet werden?
@ Vivek27 - nein, denn 104 us ist die Dauer des Startbits, und Sie würden dann am Ende abtasten, anstatt in der Mitte. Wenn Sie mir ein paar Minuten geben, werde ich meine Bilder aktualisieren. :-)
@Vivek: Eigentlich ist das Startbit überhaupt nicht wirklich "gesampelt". Sein ganzer Zweck besteht darin, diesen anfänglichen Übergang aus dem Leerlauf der Leitung bereitzustellen, auf den der Rest des Zeichens relativ zu ihm zeitlich abgestimmt ist. Sein "Wert" steht immer gegenüber Leitungsleerlauf und enthält selbst keine Daten.
@Olin - Ich würde das Startbit abtasten, nur um zu überprüfen, ob die Startkante keine Spitze war.
Geniale Antwort darauf, warum 16x Uhr verwendet wird.
Diese Genauigkeit für den Beginn der Abtastung genau an der fallenden Flanke des Startbits kann nur durch die Verwendung von flankengetriggerten Interrupts oder durch die Verwendung eines Timer-Interrupts alle 1us (nicht möglich) erreicht werden.
Hallo, woher soll der Empfang wissen, dass die Baudrate 9600 bps war? Ich denke, die Frage hier ist, die bps (und damit die Abtasttaktperiode) aus den eingehenden Daten zu erkennen.

Lassen Sie uns ein wenig zurücktreten und über das von UARTs verwendete Low-Level-Signalisierungsprotokoll sprechen. TX und RX sind Datenleitungen, keine Takte. Die Uhren befinden sich nur in jedem UART, weshalb man sich vorher auf die Baudrate einigen muss.

Wenn nicht gesendet wird, bleibt die Leitung im Ruhezustand. Um ein Byte zu übertragen (z. B. andere Datenbreiten sind möglich), sendet der Sender zunächst das Startbit . Der Empfänger verwendet den Zeitpunkt der Vorderflanke des Startbits und die bekannte Baudrate, um dann den Rest des Zeichens zu decodieren. Nehmen wir der Einfachheit halber an, dass 100 kBaud verwendet wird. Das bedeutet, dass jede Bitzeit 10 µs lang ist. Dazu gehören das Startbit, die Datenbits und das/die Stoppbit(s). Die Mitte des ersten Datenbits liegt also 15 µs nach der steigenden Flanke des Startbits, die Mitte des zweiten bei 25 µs usw.

Solange die Uhren von Empfänger und Sender gleich sind, könnte dies ewig so weitergehen. Sie werden jedoch nie genau gleich sein, also kann es nicht ewig so weitergehen. Um eine erneute Synchronisierung der Uhr des Empfängers mit der Uhr des Senders zu ermöglichen, endet das Datenzeichen, die Leitung wird für eine Weile frei gelassen, dann wird der Vorgang wiederholt. Zeitfehler häufen sich beginnend mit der Vorderflanke des Startbits an, sodass die maximale Drift beim letzten Bit liegt. Sobald dieses Zeichen vorbei ist, wird der Empfänger zurückgesetzt und wartet auf das nächste Startbit, und der Vorgang wiederholt sich.

Bei 8 Datenbits ist der ungünstigste Fall für das Timing das Abtasten des letzten Bits. Das sind 8,5 Bitzeiten von der Zeitreferenz, die die führende Flanke des Startbits ist. Wenn der Empfänger um 1/2 Bit oder mehr abweicht, wird er das letzte Bit während eines anderen Bits abtasten. Klar ist das schlecht. Dies geschieht bei einer Taktfrequenzabweichung von 1/2 Bit in 8 1/2 Bit oder 5,9 %. Das ist die garantiert fehlschlagende Diskrepanz. Aus Gründen der Zuverlässigkeit möchten Sie normalerweise sicherstellen, dass der Empfänger mit dem Sender innerhalb der Hälfte davon übereinstimmt, oder 2,9 %. Das stellt einen 1/4-Bit-Zeitfehler beim letzten Bit dar.

Allerdings ist es nicht ganz so einfach. In dem oben beschriebenen Szenario startet der Empfänger im Wesentlichen eine Stoppuhr an der Vorderflanke des Startbits. Das wäre theoretisch in analoger Elektronik möglich, aber das wäre kompliziert und teuer und nicht ohne weiteres auf digitalen Chips integrierbar. Stattdessen haben die meisten digitalen UART-Implementierungen eine interne Uhr, die mit dem 16-fachen der erwarteten Bitrate läuft. Die „Stoppuhr“ zählt dann diese 16x Zyklen. Das bedeutet, dass allen Bit-Abtastzeiten ein zusätzlicher möglicher Fehler von 1/16 Bit hinzugefügt wird, was wie eine weitere Taktabweichung von 0,7 % beim letzten Bit ist.

Hoffentlich wird dadurch klar, was das Stoppbit ist, wie das Bit-Timing funktioniert und worum es bei der 16x-Uhr geht. Stoppbits habe ich meistens übersprungen, aber vielleicht können Sie jetzt selbst sehen, warum mindestens ein Stoppbit erforderlich ist. Grundsätzlich sind die Stoppbits die erzwungene Mindestleerlaufzeit zwischen Zeichen. Dies ist die Zeit, während der der Empfänger den Empfang eines Zeichens beendet hat und für die nächste steigende Flanke eines Startbits bereit ist. Wenn es kein Stoppbit gäbe, könnte das letzte Datenbit die gleiche Polarität wie das Startbit haben und der Empfänger hätte keine Flanke, um seine Stoppuhr zu starten.

Vor langer Zeit wurde dieses Protokoll von Nocken, Hebeln und sich drehenden Rädern entschlüsselt. Oft wurden zwei Stoppbits verwendet, um das Zurücksetzen des Mechanismus zu ermöglichen. Heutzutage wird alles in digitaler Logik gemacht und 1 Stoppbit wird ziemlich universell verwendet. Sie sehen das Low-Level-Protokoll oft als 8-N-1 geschrieben, was 8 Datenbits, keine Paritätsbits (vergessen Sie diese, sie werden heute selten verwendet) und 1 Stoppbit bedeutet. Das Startbit ist impliziert, da es dort keine Option gibt.

Bei Verwendung von 8-N-1 benötigt ein 8-Bit-Datenbyte tatsächlich 10 Bitzeiten zum Senden. Dies ist ein Grund dafür, dass zwischen "Bitrate" und "Baudrate" unterschieden wird. Die Baudrate bezieht sich auf die einzelnen Bitsignalisierungszeiten, einschließlich der Start- und Stoppbits. Bei 100 kBaud dauert jedes übertragene Bit inklusive Start- und Stoppbit 10 µs. Das ganze Zeichen dauert also 100 µs, es werden aber nur 8 Bit echte Daten übertragen. Die Baudrate beträgt 100 k, die Bitrate der Datenübertragung aus Sicht höherer Ebenen jedoch nur 80 kBit/s.

Die Bitrate für die Übertragung ist die Taktrate geteilt durch (wie Sie normalerweise sagen) 16. Sie haben auch einige Nicht-Datenbits für die Rahmenbits (Start, Parität, Stopp). Für einen 16000-Hz-Takt erhalten Sie also 1000 Bits pro Sekunde, aber nachdem minimale Framing-Bits eingefügt wurden, sind es nur 800 Datenbits oder 100 Bytes pro Sekunde.

Zum Empfangen zählt der Empfänger von der Mitte des Startbits 16 Takte und tastet die Leitungsrufe ab, was er als "erstes Datenbit" sieht. es wiederholt diese Zählung und Abtastung genügend oft, um das gesamte Symbol zu lesen, bestätigt dann das Vorhandensein des Stoppbits und beginnt, auf das nächste Startbit zu warten.

Solange der Empfängertakt nahe an der Frequenz des Sendertakts liegt, trifft die Abtastung auf die richtigen Teile des gesendeten Signals.