Hi, ich hab mal ne Verständnisfrage. Wie RS232 Übertragung funktioniert verstehe ich ab dem Moment wenn das Startbit empfangen wurde, nur wie weiß der UART eigentlich welches Bit aus dem Serielln Bitstrom das Startbit ist? Gruß Tom
Thomas Burkhart schrieb: > Hi, > > ich hab mal ne Verständnisfrage. Wie RS232 Übertragung funktioniert > verstehe ich ab dem Moment wenn das Startbit empfangen wurde, nur wie > weiß der UART eigentlich welches Bit aus dem Serielln Bitstrom das > Startbit ist? Exakt weiß er es nicht. Die Annahme ist, dass die Verbindung im Grundzustand ist. Die erste Flanke ist dann der Beginn des Startbits. Wenn aber der Sender kontiunierlich sendet und sich der Empfänger irgendwann dazuschaltet (und damit nicht weiß auf welcher Flanke er sich einklinkt), dann hat der Empfänger keine Chance aus den vielen Flanken das Startbit rauszufiltern. Da es aber in der überwiegenden Mehrzahl der Fälle so ist, dass auch der Sender irgenwann einmal Pause macht, ergibt sich eine Pause die lang genug ist, so dass sich der Empfänger wieder auf das Startbit synchronisieren kann.
Er weiß es nicht. Wenn eine Pause war, dann muß das nächst Bit das Startbit sein. Wenn keine Pause war, und das letzte Byte komplett empfangen wurde, dann muß das nächste Bit auch das Startbit sein... Edit: ups, zu spät...
>und das letzte Byte komplett empfangen wurde, dann >muß das nächste Bit auch das Startbit sein... woher willst du denn wissen ob genau diese 8 Bits das Byte waren? Ausserdem gehört ja noch mindestens das Startbit dazu, also 9Bit pro Byte eigentlich
Ahhhja, dass es so "primitiv" ist hatte ich nicht erwartet. Wäre ein prima zusatz im RS232 Artikel. Danke & Gruß Tom
War es nicht immer so, dass das Startbit eine andere Farbe hatte als die anderen? ;)
Es ist nicht so, das die erste flanke das startbit ist. Das erste Bit wird wie alle anderen als Mehrheitsentscheid genommen. zB 6 von 8 Sample muessen hoch sein fuer ein 1-bit. Das naechste was nach einen Stopbit kommt ist wieder ein Startbit. Aber das Startbit ist nicht wesentlich. Der vorgang geht etwa so. Ein Schieberegister von 10(+parity) x 8 bit wird mit dem 8 fachen Baudrateclock beschickt. Es wird laufend geprueft, ob durch Mehrheitsgewichtung Start und Stopbit vorhanden sind. Falls die das sind, wird das Byte als Byte erkannt. Dann wird die 80 clocks gewartet bis die Erkennung neu angeworfen wird.
@ Nebliger Pfad (Firma: vorgestern) (hacky) >Es ist nicht so, das die erste flanke das startbit ist. Doch, es ist der Übergang zwischen Stop zum Startbit. > Das erste Bit >wird wie alle anderen als Mehrheitsentscheid genommen. zB 6 von 8 Sample >muessen hoch sein fuer ein 1-bit. Nun übertreib mal nicht. Einige UART prüfen das Startbit noch einmal, meist mit drei Abtastwerten aus der Bitmitte. Einige aber auch nicht. > Das naechste was nach einen Stopbit >kommt ist wieder ein Startbit. Aber das Startbit ist nicht wesentlich. Doch, denn ohne Startbit keine Flanke ;-) >Der vorgang geht etwa so. Ein Schieberegister von 10x8 bit wird mit dem >8 fachen Baudrateclock beschickt. Es wird laufend geprueft, ob durch >Mehrheitsgewichtung Start und Stopbit vorhanden sind. NEIN! Schau dir mal einen UART von "innen" an, z.B. als VHDL. Die Statemachine macht was anderes. Sie wartet erst auf die Flanke zwischen Stop und Startbit. MFG Falk
Ich denke, das das alles technische Details sind, die für das Verständnis nicht wirklich wesentlich sind. Konzeptionell beginnt das Startbit mit der nächsten Flanke aus der Ruhephase heraus. Wie die Hardware dann konkret erkennt, ob das nur eine Störung war oder tatsächlich die Bitlänge eingehalten wurde, ist ein Detail welches die Beschreibung der Vorgänge auf Signalebene nicht tangiert (dort wird sowieso von einer fehlerfreien Übertragungsstrecke ausgegangen. Liegt der Pegel auf 0, dann deswegen weil ihn der Sender auf 0 gezogen hat und umgekehrt)
> Es wird laufend geprueft, ob durch Mehrheitsgewichtung Start und Stopbit > vorhanden sind. Falls die das sind, wird das Byte als Byte erkannt. Nein, so eine RS232 ist viel simpler. Da wird einfach die erste fallende Flanke als Anfang des Startbits hergenommen. Wenn du z.B. so einen 8N1 Datenstrom hast: 010101010101010101010101010101010101010101010101010101010101 dann kann jede 0 ein Startbit sein. Urigerweise macht das hier nichts aus, es wird immer richtig 10101010 = 0xAA empfangen ;-) Wenn du aber sowas hast: 010101111101010111110101011111010101111101010111110101011111 dann kann das übertragene Zeichen ein 10101111 oder ein 10111110 oder auch ein 11111010 sein, weil ja wieder jede 0 ein Startbit sein könnte... Erst, wenn der Sender mal mindestens 1 Byte Pause macht, kann der EMpänger sicher wieder aufsynchronisieren: 010101111101010111110101011111111111111010101111101010111110101011111 ^ ^^ '--Pause----'Startbit
Hallo, richtig ist, daß nicht die Flanke definiert ist, sondern der Zustand Low (Mark) für eine Bitzeit ist das Startbit. Ruhuzustand ist SPACE (High), genauso wie das/die 1, 1,5 oder 2 Stoppbits. Genau die Versionen mit mehr als einem Stoppbit sollten sicherstellen, daß das nächste Startbit auch erkannt wurde. Die ganzen Versionen mit Mehrfachabtastung usw. sind dann nach und nach entstanden, um die Geschichte unempfindlicher gegen Störungen zu machen. Simple-Versionen haben wirklich auf die H/L-Flanke gewartet, dann eine halbe Bitzeit gewartet und dann stur jeweils nach einer Bitzeit auf Bitmitte den Pegel gelesen. Das Stoppbit am Ende dann einfach ignoriert, mußte ja H sein und wieder auf die nächste Startbit-Flanke gewartet. Wenn von Außen keine Störungen kommen, funktioniert das auch heute noch zuverlässig... PS: grrr... Lothar Miller war schneller... ;-)) Gruß aus Berlin Michael
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.