Hallo!
Ich versuche gerade die TX & RX-Fehler einer UART-Kommunikation zu
verstehen. Das mit dem RX verstehe ich ja noch, dass wenn der
Empfangstakt nicht 100% stimmt es zu Fehlinterpretationen des
empfangenen Datenstroms kommt. Warum in einigen Datenblättern auch ein
TX-Fehler angegeben ist verstehe ich jedoch nicht.
Ziel ist es, dass ich nicht nur die Grundlagen verstehe, sondern ich
möchte/soll die Paketfehlerrate (PER) dieser Kommunikation berechnen.
Und da tappe ich gerade völlig im Dunkeln, obwohl ich schon eine Weile
rumgoogelt habe. Dabei bin ich jetzt aber auf dieses Forum gestoßen und
bin voller zuversicht, dass ihr ein wenig Licht in die Dunkelheit meiner
Unwissenheit bringen könnten.
Danke schon mal im Voraus für eure Hilfe!
Gruß
Icke
> Warum in einigen Datenblättern auch ein TX-Fehler angegeben ist verstehe> ich jedoch nicht.
Ich auch nicht, weil ich kein entsprechendes DB habe... Magst du uns
eins von deinen zeigen?
Ralf
Icke schrieb:
> Warum in einigen Datenblättern auch ein> TX-Fehler angegeben ist verstehe ich jedoch nicht.
Wenn bei einer Takterzeugung für eine UART beispielsweise 1,3% Fehler
drinstehen, dann heisst das nicht, dass 1,3% aller Bits oder Bytes
fehlerhaft sind, sondern dass der Takt um 1,3% neben dem Sollwert liegt.
Diesen Wert muss man auf beiden Seiten berücksichtigen, ggf. mit
Vorzeichen. Wenn der Sender in der Frequenz um 1,3% zu hoch und der
Empfänger um 1,7% zu tief liegt, dann beträgt der Gesamtfehler 3% und es
wird schon arg knapp. Sind beide Vorzeichen gleich, dann sind es nur
0,4% und das reicht locker.
Ein Datenblatt. Gerne.
Siehe Abschnitt 15.3.13, Seite 480.
Das sind zwar ein Berg von Gleichungen angegeben. Aber verstehen tue ich
es noch nicht so recht.... ;(
Hallo!
Danke für den Link. Allerdings stand da nicht mehr drin, als ich schon
wusste ...
Die Frage ist, warum auch für TX ein Fehler angegeben ist, der zusdem
vom RX-Fehler abweicht
UND
wie man die Paketfehlerwahrscheinlichkeit berechnet.
> Die Frage ist, warum auch für TX ein Fehler angegeben ist...
Ganz einfach, übliche Baudraten sind ja "krumme Werte", sieht man sehr
schön, wenn man den Kehrwert der Baudrate verwendet, um auf eine Bitzeit
zu kommen. Beispielsweise ist eine Bitzeit bei 9600 Bd = 104,166µs, also
sehr krumm.
Beim Empfang wird die Rx-Leitung üblicherweise mit dem 16fachen der
eingestellten Baudrate abgetastet (beim 8051, ich vermute, bei AVR etc.
ist es genauso). Warum der Verweis auf die Empfangsschaltung wichtig
ist, siehst du weiter unten wg. der Formel. Hier also eine entsprechende
Beispielrechnung für einen Standard-8051, Baudrate über Timer 1, Teiler
= 1 -> entspricht höchstmöglicher Baudrate:
Fosc = 22.1184MHz
Systemtakt = Fosc / 12
gewünschte Baudrate = 115200 Bd
Ergibt:
22118400 12 16 / 1 = 115200
Deswegen braucht man diese "krummen" (Baudraten-)Quarzwerte. Hat man
keinen Baudratenquarz zur Hand und muss einen glatten Wert verwenden,
ergeben sich eben auch schon Fehler bei der Sendebaudrate, da diese von
sich aus durch den internen Aufbau fehlerbehaftet ist.
Ralf
argl
da hat's wohl n Teil der Formel verklopft, sorry. Also, die o.g. Formel
gilt für den Empfang, aber der Sendeteil des µCs arbeitet ja mit dem
gleichen Oszillator, daher auch mögliche Fehler beim Senden. Und die
Toleranzen der Quarze etc. fallen auch noch n bisschen mit ins
Gewicht...
Ralf
@ Ralf (Gast)
>Toleranzen der Quarze etc. fallen auch noch n bisschen mit ins>Gewicht...
Kaum. Selbst ein Gurkenquarz mit +/-100ppm =0,01% hat keinerlei
praktischen Einfluß.
MfG
Falk
Achso.
Wenn der Sendetakt nicht 100% passt kann es naürlich dennoch zu
Empfangsfehlern kommen, auch wenn der RX-Takt 100% stimmen würde. ;)
Und wie sieht es jetzt mit der Fehlerwahrscheinlichkeit aus?
Icke schrieb:
> Und wie sieht es jetzt mit der Fehlerwahrscheinlichkeit aus?
Damit haben diese Zahlen und Formeln rein garnichts zu tun. Die
Fehlerwahrscheinlichkeit lässt sich auch nicht allein aus der Baudrate
errechnen, den das Zeitverhalten der Pegelwandler/Transceiver spielt
dabei auch eine Rolle.
> Ich schaffe es noch immer nicht mit den angegeben Gleichungen auf die in> der Tabelle angegeben Fehlerraten zu kommen.
Ich habe zwar dieses Manual nicht gelesen, bin aber einigermassen
sicher, dass du so etwas wie Fehlerraten darin nicht finden wirst. Nicht
jede Prozentangabe ist eine Wahrscheinlichkeit.
Ja gut, die Fehlerwahrscheinlichkeit nciht.
Aber eben den TX und RX Fehler, der -wie wir es in dieser Diskussion
gelernt haben- durch den Clock kommt.
Und dafür sind in der Datenblatt Gleichungen angegeben....
Ok, ich habe mal ins Manual reingesehen. Ist etwas komplizierter als bei
anderen UARTs.
UARTs sind traditionell meist recht simpel gestrickt. Der Baudratentakt
wird durch 16 geteilt - manchmal ist auch 8 möglich. Daraus ergibt sich
die verwendete Baudrate. Mit dem Startbit wird dieser 16-er Zähler
gestartet und auf Halbzeit wird das Bit ausgewertet, oft als
Mehrheitsentscheid bei 3 Abtastungen um diese Halbzeit herum.
Nachteil dieser Methode ist, dass sich aus "geraden" Taktfrequenzen wie
1MHz selten die üblichen Baudraten genau genug ergeben, weshalb der
taditionelle Ansatz in der Verwendung von Baudratenquarzen für die
Taktgenerierung besteht. Das passt nicht jedem: Wer mal versucht hat,
38400bd asynchron und 500Kbps CAN unter einen Hut zu bringen weiss was
ich meine - eine der beiden Rate kann nicht exakt sein.
Neuere Controller grösserer Ordnung verwenden deshalb nicht selten eine
Baudratengenerierung mit fraktionalem Vorteiler. Wie das exakt
funktioniert ist dort selten angegeben, auch eine exakte Fehlerrechung
findet sich selten. Was den Vorteil hat, dass man sich da nicht
durchwühlen muss. Und den Nachteil hat, dass man den Faktor 16 immer
noch im Boot hat, also bei niedrigen Taktfrequenzen trotzdem nur
niedrige Baudraten hinbekommt. 4800bd bei 32KHz Takt sind da nicht drin.
TI ist mit dem USCI des MSP430 einen deutlich anderen Weg gegangen.
Sowohl in der Technik, als auch in der Dokumentation. Die dabei
verwendete Technik spart aufgrund niedriger Taktfrequenzen Strom, ist
aber nicht wirklich leicht verständlich und leider auch strunzdumm
erklärt. Aber man kann 4800bd bei 32KHz Takt verwenden.
Vollständig verstanden habe ich die Sache in der Kürze auch nicht, aber
mir scheint, dass sich anders als bei der traditionellen Methode, deren
Abweichung sich leicht als prozentualer Taktfehler rechnen lässt, bei
der TI Methode ein Jitter ergibt. Die gesendete Signalflanke wie auch
der Abtastpunkt beim Empfang landen je nach Quelltakt, Parameter und
Bitposition mal vor mal nach dem eigentlich korrekten Zeitpunkt.
Beim Empfang gibt es dann zusätzlich noch einen Zeitfehler, der durch
die Abtastung des Signals entsteht. Das Startbit wird nicht sofort mit
der negativen Flanke verwendet, sondern das Signal wird zunächst mit dem
Takt synchronisiert und dann erst wird die Änderung zur Synchronisation
der Zeitbasis verwendet. Dadurch entsteht ein zusätzlicher Fehler von
maximal einem Taktzyklus.
Das ist zwar traditionell auch nicht anders, aber wenn der Sample-Takt
das 16fache der Baudrate beträgt, dann ist dieser Fehler wenig relevant
und wird pratisch nie betrachtet. Bei einem 4-er Takt (9600bd bei 32KHz)
ist dieser Abtastfehler jedoch nicht mehr zu vernachlässigen. Darin
liegt der Grund für höhere Fehlerwerte bei Rx als bei Tx, und weshalb
dies abhängig vom Taktverhältnis ist.
Icke schrieb:
> Ziel ist es, dass ich nicht nur die Grundlagen verstehe, sondern ich> möchte/soll die Paketfehlerrate (PER) dieser Kommunikation berechnen.> Und da tappe ich gerade völlig im Dunkeln,
Ich fürchte, das wirst du auch dann noch, wenn du die TI'sche Rechnung
vollständig verstanden hast. Weil dafür mehr als nur der UART-Fehler
massgeblich sein dürfte, denn üblicherweise fragt man nur dann nach
einem PER, wenn sich zwischen Tx und Rx mehr befindet als nur ein Stück
Draht. Und dann ist die TI'sche Rechnung nur ein Teil der
Gesamtrechnung.
Ohne zusätzliche Komponenten zwischen Tx und Rx wird die Kommunikation
entweder fehlerfrei funktionieren, oder abhängig von den übertragenen
Daten weitgehend Schrott ergeben. Für eine PER sorgt der Kram
dazwischen, bereichert um den TI'schen Taktfehler. Der TI'schen Anteil
ist deterministisch.
Aber um deinen grauen Zellen weiteres Futter zu geben: Der sich aus dem
UART-Verhalten ergebende Fehler ist abhängig von den übertragenen Daten.
0x40 ist deutlich kritischer als 0xFB.
Beruhigend, dass andere auch Probleme mit diesem Dokument haben. ;)
Ich denke mal, dass ich jetzt die Grundlagen verstanden habe.
Wie ich jetzt die PER ausrechnen soll, weiß ich allerdings noch immer
nicht.
Würde das ja gern wie ein Mathematikee machen: "Ich definiere ..."
Ich definiere, das jedes Bit richtig erkannt wird. Damit beträgt die
Bit- und die Paketfehlerwahrscheinlichkeit Null. :D
(Schön wär's!)