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
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??
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.
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
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.