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?
quelle
Antworten:
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.
quelle
Zwei UARTS "vereinbaren" die Baudrate mittels Dokumentation und indem der Bediener / Benutzer die Baudrate per Hand einstellt, einschließlich Handshake-Protokoll, Stoppbitgröße usw.
quelle
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.
quelle