Bei einer alten Software in der Firma ist mir aufgefallen das an einer seriellen Schnittstelle laut Protokoll ein Stopbit verwendet wird, aber in der Software werden zwei verwendet. Da aber Stopbit = idle gilt, ist mir das mit dem Oszilloskop nicht aufgefallen; Stopbits sind ja nur ein Mindestabstand, und die verbundenen Maschinen können auch kommunizieren. Gilt also bei Stopbits das eins gleich zwei ist? Oder könnte das die Ursache für sporadische Fehler sein?
wenn dein Empfänger zwei Stopbits verlangt, der Sender aber nach einem Stopbit sofort das nächste Byte startet, dann kann der Empfänger die Übertragung als fehlerhaft verwerfen. Was genau meinst du mit "die Software verwendet zwei Stopbits". Konfiguriert die Software die Register der UART auf zwei Stopbits? Die Software sieht ja normalerweise nichts von den Stopbits, sie bekommt lediglich die übertragenen Daten.
Achim S. schrieb: > Was genau meinst du mit "die Software verwendet zwei Stopbits". Die Schnittstelle wird darauf eingestellt, so wie auch Parität und Baudrate eingestellt werden. Was sollte das auch sonst sein? > wenn dein Empfänger zwei Stopbits verlangt, der Sender aber nach einem > Stopbit sofort das nächste Byte startet, dann kann der Empfänger die > Übertragung als fehlerhaft verwerfen. Aha, dann kann es doch eine Fehlerursache sein.
Rolf F. schrieb: > Gilt also bei Stopbits das eins gleich zwei ist? Mit Sicherheit nicht. Serielle Protokolle hat jemand definiert und dieser hat entweder ein oder zwei Stopbits definiert. Daran muss man sich halten, wenn es keine Fehler geben soll. Grundsätzlich könnte es sein, daß ein Empfänger, der 2 Stopbits erwartet, den ersten Teil im Idle als zweites Stopbit interpretiert. Solange die Idle-Zeit lang genug ist und nur ein Datenpaket übermittelt wird, kann es funktionieren. Sobald mehrere Pakete zwischen Idle liegen, geht es schon schief. Je nach gesendeten Datensätzen wären sporadische Fehler ein typisches Symptom.
mullwark schrieb: > Daran muss man sich halten, wenn es keine Fehler geben soll. So krass würde ich das nicht formulieren. Wenn der Sender 2 Stopbits verwendet und der Empfänger auf 1 Stopbit konfiguriert ist, klappt das ganz prima - nur umgekehrt nicht unbedingt. Das hängt u.U. auch davon ab, wie die Software die Zeichen zum UART schiebt.
W.A. schrieb: > mullwark schrieb: > [ ... ] > Wenn der Sender 2 Stopbits > verwendet und der Empfänger auf 1 Stopbit konfiguriert ist, klappt das > ganz prima - nur umgekehrt nicht unbedingt. Das hängt u.U. auch davon > ab, wie die Software die Zeichen zum UART schiebt. Nur aus Interesse: Magst Du den letzten Satz bitte etwas mehr ausführen?
Rolf F. schrieb: > Stopbits sind ja nur ein Mindestabstand So ist es normalerweise. Eventuell müsstest du mal konkreter werden, was du als Empfänger verbaut hast. Die (moderneren), die ich so kenne, kann man nur auf der Senderseite konfigurieren, während der Empfänger nur ein Stopbit „sehen“ muss (wenn in der entsprechenden Bitzeit dieser Bitwert falsch ist, wird ein “framing error” signalisiert). 1,5 oder 2 Stopbits stammen eigentlich aus Zeiten der mechanischen Fernschreiber, um sicherzustellen, dass Sender und Empfänger auch bei leichten Drehzahlunterschieden garantiert mit jedem Zeichen sauber synchronisierten.
Die 2 Stopbits sind eine Konzession an langsame UARTs. Beim langsamen Empfänger könnte ein einziges Stopbit zu kurz für die Verarbeitung (Prüfen, ablegen) des Signal sein und das nächste Startbit zu schnell kommen. Allerdings kaum bei heutigen UARTs. Ein Stopbit zuviel macht die Sache halt langsamer, aber am Ende des ersten Stopbits beginnt ja eine fast beliebige Wartezeit der Empfangs-UART auf das nächste Startbit mit der damit verbundenen Abwärtsflanke, theoretisch hätten da beliebig viele Stopbits Platz. Uuuuh, das 1 = 2 tut weh!
Klaus schrieb: > W.A. schrieb: >> mullwark schrieb: >> [ ... ] >> Wenn der Sender 2 Stopbits >> verwendet und der Empfänger auf 1 Stopbit konfiguriert ist, klappt das >> ganz prima - nur umgekehrt nicht unbedingt. Das hängt u.U. auch davon >> ab, wie die Software die Zeichen zum UART schiebt. > > Nur aus Interesse: Magst Du den letzten Satz bitte etwas mehr ausführen? Ist ja eigentlich ganz simpel. Das Stoppbit manifestiert sich einfach nur als Pause zwischen dem letzten Datenbit und dem nächsten Startbit, in der die Leitung auf Idle liegt. Abgesehen davon ist es durch keine Flanke erkennbar. Wartet der Sender länger als der Empfänger anhand seiner Einstellung benötigt, dann ist das kein Drama. Dann ist da eben aus Sicht des Empfängers eine kurze Sendepause dazwischen. Wie diese Sendepause zustande kam, ist dem Empfänger auch egal, er kann es sowieso nicht erkennen. Ob die Sendepause durch die Einstellung 2 Stoppbits zustande kam, oder ob sie zustande kam, weil das sendende Programm die Bytes nicht schneller zur UART schieben konnte, bleibt ihm verborgen. Es ist, wie wenn ein Zuhörer in der Einstellung 'Italienisch' dem Rüdiger Hoffmann zuhört - kein Problem.
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.