Automatische baudratenerkennung

hallo.

wie funktioniert eigentlich eine automatische baudratenerkennung? konkret in einem seriellen eindrahtbus bis 20kbit/s.
es gibt einen sender und einen empfänger, die nachrichten austauschen. der empfänger kriegt ein „startsignal“ von genau festgelegter dauer (sekunden). wie er das, was danach kommt interpretiert, hängt ja dann davon ab, auf welche baudrate er eingestellt ist.

könnte man ja so machen, daß bis zum eigentlichen beginn der kommunikation zyklisch ein bestimmtes synchronisationsbitmuster gesendet wird, das sender und empfänger bekannt ist. der empfänger beginnt mit einem defaultwert für die baudrate und paßt die dann solange an, bis das empfangene muster mit dem gespeicherten übereinstimmt. danach teilt er dem sender mit „alles klar, ich weiß wie schnell ich zu sein habe“.
wird das so realisiert? oder was gibt’s sonst für möglichkeiten?

gruß

michael

Moin

könnte man ja so machen, daß bis zum eigentlichen beginn der
kommunikation zyklisch ein bestimmtes
synchronisationsbitmuster gesendet wird, das sender und
empfänger bekannt ist.

Das macht z.B. Ethernet so. Da liegts aber nicht an der Baudratenkennung sondern an der Kollisionverhinderung. Wenn dem Vorsignal ein Datensignal überlagert wird ist dies für alle Teilnehmer erkennbar und sie halten erstmal alle die Klappe.

der empfänger beginnt mit einem
defaultwert für die baudrate und paßt die dann solange an, bis
das empfangene muster mit dem gespeicherten übereinstimmt.
danach teilt er dem sender mit „alles klar, ich weiß wie
schnell ich zu sein habe“.

Normale analog Modems arbeiten so. Wenns dem Modem zu schnell geht wird nach unten angepast.

wird das so realisiert? oder was gibt’s sonst für
möglichkeiten?

Selbst taktende Codes, z.b. Manchester oder RZ. Die Baudrate (=Frequenz) ist bei denen aus dem Flanken bestimmbar.

RZ:
0 = negative Spannung, 1 = positive Spannung. Nach jedem Bit geht der Sender zurück auf 0V.

Manchester:
Flanke LH = 0, Flanke HL = 1, dazwischen werden je nach Bedarf Flanken eingesetzt. (das war die einfache Varinate, das gibt’s auch in schneller und komplexer)

cu

kleine Korrektur:
Praktisch alle Codes sind selbsttaktend, es wird ja kein getrennter Takt mit übertragen (ausser z.B. synchron). Bei NRZ (Non Return to Zero)ist allerdings nicht jede Taktflanke vorhanden, durch Start- und Stoppbits werden aber zumindest Flanken für jedes Zeichen erzwungen, solange muss der Empfänger von selbst synchron laufen. RZ oder Manchester liefern mindestens eine Flanke für jedes Bit, brauchen aber auch mehr Bandbreite. Da bei asynchroner Übertragung ja immer 2 Flanken pro Zeichen vorhanden sind, ist NRZ ausreichend und üblich.

Eine brauchbare Baudratenerkennung sollte nicht mit Anpassung nach unten und warten auf Wiederholung arbeiten, das dauert zu lang; zu fordern ist die Erkennung nach 1 oder 2 Zeichen. Damit das eindeutig geht, wird das entweder vorgeschrieben (am Terminal z.B. muss eine Sitzung immer mit einem bestimmten Zeichen wie Enter gestartet werden), oder das Modem geht davon aus, dass als erstes immer „AT“ übertragen wird. Der empfangene Zeitablauf kann dann eindeutig analysiert werden. Treten keine Störungen auf, so muss das Modem spätestens nach dem Ende des „T“ die Baudrate bestimmt haben.

Mein Protokollanalysator von HP z.B. speichert deshalb nicht eingehende Datenbits, sondern Flankenwechsel mit Zeitstempel, und kann daher noch nachträglich mit verschiedenen Baudraten, Parity, Stopbits dekodieren.

Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Hallo michael,

wie funktioniert eigentlich eine automatische
baudratenerkennung? konkret in einem seriellen eindrahtbus bis
20kbit/s.

könnte man ja so machen, daß bis zum eigentlichen beginn der
kommunikation zyklisch ein bestimmtes
synchronisationsbitmuster gesendet wird, das sender und
empfänger bekannt ist. der empfänger beginnt mit einem
defaultwert für die baudrate und paßt die dann solange an, bis
das empfangene muster mit dem gespeicherten übereinstimmt.
danach teilt er dem sender mit „alles klar, ich weiß wie
schnell ich zu sein habe“.
wird das so realisiert? oder was gibt’s sonst für
möglichkeiten?

  1. Der Empfänger wird auf die höchste Übertragungsrate eingestellt.
  2. Der Sender sendet ein Byte, welches nach dem Stopbit eine Null enthält, der einfachheit halber nimmt man oft 0x0D (Wagenrücklauf).
  3. der Sender wiederholt dieses Zeichen so lange, bis er ein OK vom Empfänger bekommt.

Der Empfänger kann dann das empfange Bitmuster auswerten und sich somit auf die Übertragungsrate einstellen:

  1. Das Datenbit nach dem Startbit ist 0 -> Übertragungsrate stimmt.
  2. nur das Datenbit nach dem Startbit ist 1 -> 1/2 der aktuellen rate ist die richtige
  3. 3 Datenbits sind 1 -> 1/4 ist die richtige
  4. 7 Datenbits sind 1 -> 1/8 ist die richtige
  5. alle datenbits 1 + Framing-Error -> 1/16 der aktuellen rate oder weniger …

MfG Peter(TOO)