Forum: Mikrocontroller und Digitale Elektronik Gilt bei Stopbits 1 = 2 ?


von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

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?

von Achim S. (Gast)


Lesenswert?

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.

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

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.

von mullwark (Gast)


Lesenswert?

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.

von W.A. (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Peter R. (pnu)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.