Wenn Sie innerhalb von 1% sind, sollten Sie in Ordnung sein.
Angenommen, Ihr UART verwendet einen 16-fachen Oversampling-Takt. Sie können ihn beispielsweise auf 1.843.200 Hz und ein 16-faches Oversample von 115.200 Bit / s einstellen. (Überabtastung wie diese ist ziemlich häufig.) Dadurch zählt der UART 8 Übertakte von der fallenden Flanke des Startbits ab, sodass er die Mitte der Bitzellen innerhalb von +/- einer Periode nach dem Übertakt lokalisieren kann Dabei werden 16 Perioden der Übertaktung abgezählt, um zu bestimmen, wann Daten abgetastet werden sollen.
Wenn Sie davon ausgehen, dass es die Mitte des Startbits treffen kann, muss die Taktfrequenz zwischen (8-0,5) / 8 und (8 + 0,5) liegen, damit die seriellen Daten weiterhin in den richtigen Bitzellen über 8 Datenbits abgetastet werden ) / 8 oder +/- 6,25% der beabsichtigten Bitrate. Ein höheres Übertakten nähert sich der idealen Bedingung, die Mitte des Startbits zu treffen, aber 8x oder 16x sind normalerweise nahe genug, dass Sie davon ausgehen können, dass eine 5% ige Fehlanpassung funktioniert.
Sie können sich jedoch nicht darauf verlassen, dass die Frequenz auf der anderen Seite perfekt ist. Wenn Sie ein Gerät, das 4% schnell ist, mit einem Gerät verbinden, das 4% langsam ist, besteht ein Problem. Ich bin auf mindestens einen Fall gestoßen, in dem ein PC etwas langsam und ein Gerät etwas schnell lief und die beiden nur am Rande miteinander kommunizieren konnten, obwohl dasselbe Gerät für andere PCs in Ordnung war und der PC für andere in Ordnung war Geräte. (O-Scoped diese bei ca. 112kbps und 119kbps) Aus diesem Grund ist es gut zu versuchen, die Nennfrequenz so genau wie möglich zu treffen. Ich habe noch nie gesehen, dass etwas innerhalb von 2% der Nennwerte ein Problem hat.
Üblicherweise wird eine Haupttaktrate verwendet, die ein ganzzahliges Vielfaches der beabsichtigten UART-Überabtastrate multipliziert mit der Baudrate liefert. Wenn Sie beispielsweise eine CPU mit etwa 8 MHz benötigen, können Sie einen Oszillator mit 7,3728 MHz verwenden, der durch 4 geteilt werden kann, um 1,8432 MHz zu erhalten, was genau 16 mal 115200 entspricht.
Die 1% @JustJeff-Erwähnungen sind nicht erforderlich. Die meisten UARTs lassen beim letzten Bit einen halben Bitfehler zu. Meistens besteht ein Frame aus 1 Startbit, 8 Datenbits und 1 Stoppbit für insgesamt 10 Bits. Ein halbes Bit auf 10 Bits ist 5% (JustJeffs 6,25% berücksichtigen nicht das Start- und Stoppbit).
quelle
JustJeff vergaß das Startbit, aber Stevenh fügte das Stoppbit hinzu. Unter der Annahme des gemeinsamen Protokolls von 8 Datenbits, 1 Startbit und keinem Paritätsbit (Anzahl der Stoppbits spielt keine Rolle) gibt es 8 1/2 Bitzeiten von der Vorderkante des Startbits bis zur Mitte des letztes Datenbit. Im Allgemeinen soll der Empfänger dieses letzte Bit innerhalb von 1/4 Bit abtasten. Es ist zu beachten, dass 1/2 Bit der garantierte Fehlschlagschwellenwert ist. Alles, was sich in der Nähe befindet, wird nicht mehr realisierbar, da es immer ein elektrisches Rauschen und Jitter gibt.
1/4 geteilt durch 8 1/2 = 2,94%.
Wie JustJeff bereits erwähnte, tasten die meisten UART-Implementierungen die eingehenden Daten mit einem asynchronen 16-fachen Takt ab. Dies fügt eine weitere Zeitunsicherheit von 1/16 Bit hinzu, da dies der Fehler ist, mit dem die Vorderflanke des Startbits gemessen werden kann. 1/16 Bit-Zeit von 8 1/2 Bit ist ein weiterer 0,74%. Das ergibt sich aus dem zuvor berechneten Fehlerbudget. Am Ende haben Sie eine Taktinkongruenz von 2,2%, die es dem Empfänger ermöglicht, das letzte Bit innerhalb einer Viertel-Bit-Zeit von seiner Mitte abzutasten.
Wie bereits erwähnt, ist die Verwendung eines Quarzes mit 7,3728 MHz eine gängige Praxis, wenn eine genaue Baudrate erforderlich ist. Normalerweise können Sie festlegen, dass die CPU in der Nähe ihrer Maximalrate läuft, während die UART-Baudrate innerhalb des Quarzfehlers liegt.
quelle
Ein noch nicht erwähnter Punkt ist, dass einige Geräte für jedes von ihnen empfangene Datenbyte ein Datenbyte senden. Wenn einem solchen Gerät kontinuierlich Daten zugeführt werden, ist seine Baudrate sogar um 0,1% langsamer als die des sendenden Geräts, und es kann keine leicht geschrumpften Stoppbits gesendet werden, und seine Ausgabe fällt alle 1000 aufeinanderfolgenden Bytes um ein Byte zurück Eingehende Bytes. Wenn das Gerät auf 16 Byte Pufferung beschränkt ist, werden nach ca. 16.000 Datenbytes und danach ca. 1 Byte pro Tausend Datenbytes gelöscht. Es ist erwähnenswert, dass sogenannte "1200-Baud" -Modems tatsächlich mit einer Rate von etwas mehr als 1200 Bit / Sekunde (ich denke, es sind ungefähr 1202) arbeiten, und zwar aus genau diesem Grund (so dass der Sender sogar 0,15% schneller ist, als er sollte) Sein,
quelle