Muss eine Baudrate in der seriellen Kommunikation (USB oder RS232) genau sein?

8

Bedeutet die Baudrate bei der seriellen Kommunikation, dass wir die genaue Taktrate verwenden müssen, oder ist es ein Geschwindigkeitsbereich, den wir verwenden können?

und wenn es ein genauer Wert ist, wie genau sollte er sein? Kann ich beispielsweise 555 als Takt einer seriellen Kommunikationsschaltung verwenden?

klingt wie Fiziks
quelle
Ein UART kann normalerweise eine Abweichung von etwa ~ 3% tolerieren. Kommt aber auf einen bestimmten an.
Eugene Sh.
Für USB wird es im Standard angegeben, der kostenlos heruntergeladen werden kann.
Das Photon

Antworten:

6

Die Timings müssen genau genug sein, damit sie nicht auseinander driften, bevor das Protokoll erneut synchronisiert wird.


Die serielle UART-Resynchronisation erfolgt auf jedem Byte, und ein Byte besteht aus etwa 10 Bit (8 Datenbits plus Start und Stopp). Wir gehen davon aus, dass unser UART auf die Mitte jedes Bits abzielt. Wenn alles perfekt ist und nur ein Ende ungenau ist, kann dies zu einem Unterschied von ca. 5% zwischen den beiden Enden der Verbindung führen.

Jedoch:

  1. Beide Enden der Verbindung können relativ zum Nennwert ungenau sein. Im schlimmsten Fall kann ein Ende unter dem Nennwert liegen, während das andere über dem Nennwert liegt.
  2. Es kann zu systematischen Ungenauigkeiten kommen. Zum Beispiel haben die meisten UARTS einen begrenzten Bereich von Einstellungen für den Baudratengenerator.
  3. Ihr UART basiert auf einer Hauptuhr mit endlicher Geschwindigkeit. Selbst wenn die Taktung und der Baudratengenerator perfekt sind, trifft dies nicht genau auf die Mitte jedes Bits.

Die Quintessenz ist, dass 1% Fehler auf Ihrer Uhr mit ziemlicher Sicherheit in Ordnung ist. 5% Fehler ist mit ziemlicher Sicherheit ein Problem. Zwischen diesen beiden Figuren kann es je nach Gesamtbild ein Problem sein oder auch nicht.

Das ist eine große Herausforderung für einen RC-Oszillator. Nehmen wir an, Ihr R hat eine Toleranz von 1% und Ihr C eine Toleranz von 2%. Dies ergibt eine Toleranz von ca. 3% für die Zeitkonstante des RC-Netzwerks, bevor Sie über Fehler nachdenken, die durch Ihren Treiberchip verursacht wurden.

Unter dem Strich sollten Sie sich also einen Kristall- oder Keramikresonator ansehen.


Was USB betrifft, habe ich nicht die Erfahrung, anhand der ersten Prinzipien zu analysieren, aber https://www.silabs.com/community/interface/knowledge-base.entry.html/2004/03/15/usb_clock_tolerance-gVai sagt 1,5% für niedrige Geschwindigkeit und 0,25% für volle Geschwindigkeit.

Peter Green
quelle
Wenn man die Baudrate in 3% oder feineren Schritten programmieren und eine geeignete "Trainings" -Sequenz verwenden kann, ist die RC-Genauigkeit möglicherweise kein Problem. Wenn man weiß, dass das andere Ende abwechselnd wiederholt 0xF8 und 0xF0 sendet (niedrig für vier bzw. fünf Bit), sollte die Einstellung der Baudrate um 33% schneller dazu führen, dass man konsistent 0xF0 (5,33 Bit) und 0x80 (6,67 Bit) empfängt mal). Wenn Sie andere Werte empfangen, wissen Sie, dass einer schneller oder langsamer als diese Geschwindigkeit von "33% über" ist, während der Empfang von wiederholtem 0xF0 0x80 anzeigt, dass Sie die Geschwindigkeit um 25% reduzieren und eine echte Kommunikation starten sollten.
Supercat
8

Die UARTs, die typischerweise in seriellen RS232-Systemen verwendet werden, arbeiten, indem sie die Datenleitung irgendwo in der Mitte des Bits gemäß einer Aufteilung des vordefinierten Basisfrequenztakts mit Baudrate abtasten. Wenn sich die gesendeten Daten und der Empfänger nicht auf derselben Frequenz befinden, wandert der "Abtastpunkt" bei aufeinanderfolgenden Bits näher an den Rand des Bitrahmens.

Bei einem normalen UART beträgt die Bitlänge für ein Byte 10 oder 11 Bit. 1 Start-, 8 Daten- und 1 oder 2 Stoppbits. Ein halbes bisschen Wandern auf dem 10. Bit bedeutet einen Fehler von 0,5 / 10 = 5%.

In der Realität ist Ihre Toleranz jedoch geringer, da Sie auch die Latenz Ihrer Basisfrequenzperiode hinzufügen müssen, wodurch sich ein Versatz von der Vorderflanke des Startbits ergibt. Je höher Ihre Grundfrequenz ist, desto geringer ist der Effekt.

Die Verwendung eines 555-Timers für diesen Zweck würde ich nur empfehlen, wenn Sie eine manuelle Einstellung in der 555-Schaltung planen.

Ein USART verwendet andererseits eine komplexere Steuermethode, die versucht, die Übertragung mit den empfangenen Daten zu synchronisieren. Dies kann durch Verwendung eines Datenmusters mit eingebettetem Takt, durch Verwendung eines durchgelassenen Takts oder durch irgendeine Form der Phasenverriegelung an den empfangenen Datenflanken erfolgen. (Obwohl letzteres wohl wirklich pseudosynchron ist.)

Trevor_G
quelle
Da Sie wissen , was Sie reden, dachte ich , ich würde die Abkürzung „U erwähnen S ART“, die sollte ein Teil dieser Antwort sein. Nun, es würde die Antwort meiner Meinung nach vervollständigen und danach eine +1 von mir verdienen.
Harry Svensson
1
@ HarrySvensson hmm .. Ich stimme zu .. aber zu entscheiden ist, dass die Antwort für ein 555-Pack-OP nur verwirrender ist.
Trevor_G
1
Ein USART unterscheidet sich darin, dass er synchron sein kann. Und wenn es als synchrone Schnittstelle verwendet wird, ist die Uhr beiden Enden gemeinsam, und dann spielt die Taktrate keine Rolle.
Gbarry
1
Na ja, es kann stattdessen in den Kommentaren stehen, danke @gbarry. Es macht mir nichts aus. +1 nach Trevor.
Harry Svensson
@ HarrySvensson Ich habe eine kurze Hand wellige Erklärung des Unterschieds der Vollständigkeit
hinzugefügt