Woher wissen zwei UARTS, welche Baudrate verwendet werden soll?


14

Ich lese über das Standardprotokoll für UART und denke, dass es viele Probleme geben würde, wenn der empfangende UART keine Ahnung hat, mit welcher Baudrate die Daten übertragen wurden. Wenn die angenommene Baudrate niedriger ist als die Baudrate, mit der die Daten übertragen werden, gibt es Bits, die vom empfangenden UART nicht "gesehen" werden. Wenn andererseits die vom Empfänger verwendete Baudrate höher ist als die Baudrate, mit der die Daten übertragen werden, gibt es Bits, die zweimal gezählt werden und dazu führen würden, dass die Daten falsch "gelesen" werden.

Mein Wissen um UART ist, dass wenn die Leitung frei ist, sie auf einer "1" gehalten wird, das Startbit eine "0" ist und das Stoppbit eine "1" ist. Außerdem hat das Stoppbit "1" keinen Unterschied zu "1", wenn die Leitung frei ist, oder gibt es eine Möglichkeit zur Unterscheidung?

Stimmen zwei kommunizierende UARTs zunächst überein, welche Baudrate sie verwenden werden? Wenn ja, wie machen sie das?


Das "Stoppbit" könnte genauso gut als "Rückkehr in den Ruhezustand" bezeichnet werden, aber wenn man es zu einem Bit macht, hat es eine definierte Mindestlänge, aber nach dieser garantierten Mindestzeit bleibt die Leitung in einem "1" -Zustand bis zum Der nächste Charakter kommt.
Peter Bennett

Sie könnten zufällig gemeinsame Baudraten ändern, bis etwas XD funktioniert.
Bradman175

3
Hayes initiierte eine Methode, mit der die UART in ihren Modems die gleiche Baudrate wie das mit ihr sprechende Terminal einstellen kann, indem sie zu Beginn ihrer Befehle eine Zeichenfolge 'AT' verwendet. Dies wurde normalerweise nicht vom UART dekodiert, sondern von einer Echtzeit-Firmware, die den UART so konfiguriert, dass er den Rest der Befehlszeile empfängt. Grundsätzlich wurde die Breite des Startbits und die Einstellung der Parität ermittelt.
28.

@infix Wenn ich also vorhabe, einen Verilog-Code für UART zu ändern oder zu erstellen, kann ich ihn so gestalten, dass er diese AT-Sequenz erkennt und die Baudrate von dort aus anpasst? Ich dachte daran, es mit der höchsten Baudrate zu initialisieren, damit es alles aufnimmt und von dort aus die 'AT'-Sequenz findet.
Batibot323

Ein UART-basiertes Kommunikationsprotokoll (LIN), das in der Automobilindustrie häufig verwendet wird, verfügt über einen automatischen Baud-Erkennungsmechanismus, jedoch müssen Master- und Slave-Knoten in Bezug auf Datenlänge und Stoppbitlänge "übereinstimmen". Das heißt, es reicht nicht aus, nur die Baudrate zu erkennen.
Rohat Kılıç

Antworten:


26

Gewöhnliche UARTs müssen traditionell von einem Menschen mit der gewünschten Baudrate (sowie Wortlänge, Stoppbits, Parität usw.) vorkonfiguriert werden.

Seit einigen Jahrzehnten gibt es jedoch in einigen Einstellungen Implementierungen der "Auto-Baud" -Erkennung, die in der Regel durch Timing der wichtigsten Merkmale der Wellenform zur Ableitung der Baudrate funktionieren. Frühe Versionen brauchten ein bekanntes Zeichen, um übertragen zu werden, aber anspruchsvollere Versionen konnten die Rate möglicherweise aus willkürlicheren Daten ermitteln.

Ein empfangender UART verfügt normalerweise über eine lokale Uhr, die mit einer schnelleren Rate ausgeführt wird - normalerweise dem 8- oder 16-fachen der Baudrate. Dies wird verwendet, um das eingehende Signal abzutasten und die Bits in einem Wort auf eine Weise zu erkennen, die einige Prozent Fehler toleriert. Sogar zwei Quarzoszillatoren würden nicht perfekt mit den Raten übereinstimmen, aber die Fehlertoleranz kann die Verwendung einiger weniger präziser Quellen ermöglichen, manchmal einschließlich getrimmter On-Chip-Oszillatoren usw. Es kann auch dazu beitragen, die Tatsache zu berücksichtigen, dass das Herunterteilen von populären Oszillatorfrequenzen möglicherweise nur erzeugt eine ungenaue Annäherung an bestimmte Baudraten - Früher benötigten UART-Hauptuhren manchmal bestimmte Frequenzen, um auf die gängigen Baudraten zuzugreifen, z. B. 11,0592 MHz bei der 8051-Familie.


2
Meine Hypothese zur automatischen Bauderkennung kann sein, dass ein Timer und ein Zähler gleichzeitig arbeiten, um Flanken und Zeit zwischen Flanken zu finden.
ammar.cma

1
Das Problem ist, dass es keinen Algorithmus gibt, der eine willkürliche "schnelle serielle" Wellenform verwenden und die Baudrate zuverlässig bestimmen kann. Sie können die minimale Zeit zwischen Übergängen leicht genug finden, aber das entspricht nicht notwendigerweise einer einzelnen Bitperiode.
Peter Green

Es gibt zwar einen Algorithmus (ich habe ihn an verschiedenen Stellen als "Auto-Bauding" bezeichnet), aber wenn er im ressourcenbeschränkten Bereich eines UART-Chips implementiert ist, können Sie dies manchmal nur tun, indem Sie einige der gesendeten Daten und Daten verwenden Verwenden Sie es für die Kalibrierung, die für den Rest der Sitzung bestehen bleibt. Dies ist oft nicht wünschenswert. Wenn dies in Software ausgeführt wird und eine geringe Latenz erlaubt ist, ist es trivial, dies zu tun, ohne Daten zu verbrauchen (indem sie für die Analyse vorübergehend gespeichert werden), zumindest für langsame Kommunikationen (weniger als 200 KB / s). Höhere Geschwindigkeiten bereiten weitere Schwierigkeiten.
Wossname

8

Zwei UARTS "vereinbaren" die Baudrate mittels Dokumentation und indem der Bediener / Benutzer die Baudrate per Hand einstellt, einschließlich Handshake-Protokoll, Stoppbitgröße usw.


1
..... für beide Enden der Schnittstelle.
Michael Karas

2

Ja, alles wird manuell eingerichtet, was oft ein bisschen mühsam ist, besonders wenn Systeme schlecht dokumentiert sind (ich sehe Sie, jedes eingebettete System jemals).

Ich weiß, dass USB-, SATA- und die meisten anderen modernen Datenprotokolle nach einem Reset- oder Initialisierungsereignis mit der niedrigsten Geschwindigkeit und einer standardisierten Standardkonfiguration starten und mit allen anderen (oder nur dem Master, je nach Protokoll) bis zu höheren Geschwindigkeiten verhandeln . Einige verwenden auch Pull-Up- oder Pull-Down-Widerstände an ihren Daten- / Stromleitungen, um die unterstützten Geschwindigkeiten anzuzeigen.

Auf dieser Website finden Sie Informationen zur USB-Aushandlung, wenn Sie weitere Informationen zu anderen Protokollen benötigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.