Forum: PC-Programmierung XON/XOFF fehlerhaft in Hyperterminal bzw. Windows API?


von B. J. (bjue)


Lesenswert?

Ich habe ein Problem mit dem XON/XOFF bei einer seriellen Schnittstelle 
und stelle mal folgende Behauptung auf:
Aufbau: Hyperterminal (egal welche Version!) sendet eine Intel-HEX 
Datei. Der Empfänger - z.B. ein Mikrocontroller Board - steuert den 
Datenfluß mit XON/XOFF.
Wenn zwischen einem XOFF und dem XON mehr als 5 Sekunden vergehen, 
verschluckt das sendende Hyperterminal ein Zeichen!
Der Mikrocontroller hält den Datenstrom an, um zwischendursch die Daten 
in das FLASH zu programmieren. Baudrate spielt keine Rolle, FIFO an/aus 
im UART des PC's ist egal. Das geschieht in WinXP und auch in WinNT. In 
einem mit Visual Basic geschriebenem Programm kommt der gleiche Effekt. 
Ich habe die Sache dann mal mit zwei PC's und einem Nullmodemkabel 
dazwischen probiert. Der eine schickt zum anderen eine Textdatei, wenn 
man dann XOFF (= Ctrl-S) sendet, mehr als 5 Sekunden wartet und 
anschliessend XON sendet (Ctrl-Q), verschluckt der Sender ein Zeichen.
Kennt jemand diesen Effekt? Ist das irgendwo beschrieben??

: Gesperrt durch User
von B. J. (bjue)


Lesenswert?

Nanu, bisher keine Antworten. Hat noch niemand diesen Effekt beobachtet?
Oder war die Beschreibung unverständlich?
Hier noch mal meine Behauptung:
Ein PC kommuniziert mit einem anderen PC oder z.B. einem Mikrocontroller 
System über die serielle Schnittstelle und benutzt das XON/XOFF 
Protokoll. Wird dabei ein Visual Basic Programm oder Hyperterminal 
benutzt, kommt es zu folgendem Effekt: Man hält den sendenden PC an, 
indem man ihm ein XOFF sendet und lässt ihn nach einer Weile 
weitersenden, indem man ihm ein XON sendet. Vergehen zwischen XOFF und 
XON mehr als 5 Sekunden, sendet der sendende PC ein Zeichen zu wenig. 
Vergehen mehr als 10 Sekunden, gehen zwei Zeichen verloren usw.
Kennt jemand diesen Effekt? Ist das irgendwo beschrieben??

von yalu (Gast)


Lesenswert?

Hier beschreibt eine ein ähnliches Problem und einen Workaround dazu:

  http://www.edavies.nildram.co.uk/win32-serial-bug/index.html

Ich glaube, dass der XON/XOFF-Handshake relativ selten eingesetzt wird
(die geringe Zahl von Antworten auf deinen Thread stärkt diese
Vermutung ;-)). Die korrekte Funktion des Handshakes hängt davon ab,
wie frühzeitig der Empfänger bei drohendem Pufferüberlauf das XOFF
schickt und wie schnell der Sender darauf reagiert.

Wie träge der UART-Treiber von Windows ist weiß ich nicht. Ist er so
reaktionsfreudig wie der ganze Rest von Windows, würde ich vom
Schlimmsten ausgehen ;-)

Dann hilft nur ein großer Empfangspuffer auf der Empfängerseite (µC)
und sehr frühzeitiges Absenden des XOFF-Zeichens.

von Jens Karbowiak (Gast)


Lesenswert?

XON/XOFF und HEX-Datei passt nicht zusammen!
Softwarehandshake XON/XOFF fügt in den Datenstrom die Bitmuster 
(Zeichen) 11h und 13h zur Steuerung der Gegenstelle ein. Diese Codes 
sind aber sicher auch in jeder HEX-Datei enthalten. Der Empfänger mit 
XON/XOFF-Protokoll interpretiert also die "Daten" 11h und 13h auch als 
"Handshakesteuerzeichen", was zwangsläufig zu Fehlern führen muss.
JK

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In einer Hex-Datei sind diese Steuerzeichen nicht enthalten.
Eine Hex-Datei enthält neben dem Zeilenendezeichen (CR, LF) 
ausschließlich sichtbare ASCII-Zeichen (0-9, A-F und je nach Ausformung 
noch ein paar andere).

Was Du meinst, ist eine Binärdatei.

Im übrigen ist dieser Thread bald DREI JAHRE still gewesen.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.