stty ändert die Geschwindigkeit der seriellen Schnittstelle in cygwin nicht

2737
gbarry

Hierbei wird cygwin unter Windows XP ausgeführt. Ich habe eine echte serielle Schnittstelle (COM1) auf diesem Rechner.

Nach dem Booten erhält ein Programm, das ich geschrieben habe, falsche Antworten, wenn versucht wird, über die serielle Schnittstelle zu kommunizieren. Wenn ich Hyperterminal starte und die "Baud" -Rate einstelle, dann bringe ich ab, alles funktioniert normal ab dann.

Ich habe zuerst versucht, die Geschwindigkeit über das Programm einzustellen (mit Termios-Aufrufen), und das hat nicht funktioniert. Also entschied ich mich, die Geschwindigkeit mit einem vorhandenen Dienstprogramm zu ändern. Mit einem Befehl wie stty -F /dev/ttyS0 9600wird akzeptiert, und wenn ich eine andere Geschwindigkeit probiere, kann ich die Änderung sehen, wenn ich sie mit untersuche stty -F /dev/ttyS0. Es hat jedoch keinen sichtbaren Einfluss auf die tatsächliche Geschwindigkeit.

Ich kann mir schwer vorstellen, dass ich, wenn cygwin die Bitraten nicht ändern könnte, keine entsprechende Aussage in meiner Suche finden würde. Aber so etwas habe ich nicht gefunden.

Ich denke, es könnte eine andere Einstellung als Bits pro Sekunde sein, die korrigiert werden muss. Aber ich sehe im zurückgegebenen Bericht nichts, was das vermuten lässt. Vielleicht werde ich das testen, indem ich versuche herauszufinden, wie hoch die Rate ist.

Edit: Ich habe mit einem Oszilloskop nachgesehen und die Baudrate (zumindest beim Verlassen) ändert sich tatsächlich auf 9600, wie ich es mir vorgestellt hatte. Ich werde jetzt andere mögliche Einstellungen untersuchen, die die Kommunikation beeinträchtigen könnten.

Lösung: Eine Sache, die mir sehr geholfen hat, war die Entdeckung, dass ein virtueller USB-Anschluss sich jedes Mal neu initialisiert, wenn er getrennt wird. Dies beseitigte die Notwendigkeit eines Neustarts des Hosts, um das, was HyperTerminal zur Behebung des Problems tat, rückgängig zu machen. So konnte ich in kurzer Zeit viele Tests machen.

Die Lösung kam, als ich den Befehl fand stty -F /dev/ttyS0 -a, alle Port-Parameter abzurufen. Ich habe es vor und nach der Ausführung von HyperTerminal ausgeführt, nachdem das Problem "behoben" wurde. Die Ausgabe wurde in Dateien aufgezeichnet und dann wurden die Ergebnisse mit "diff" verwendet. Die Ergebnisse: cs7. Dies ist die Anzahl von Bits in jedem Zeichen. Etwas initialisiert die seriellen Schnittstellen standardmäßig auf N-7-1. Die Lösung ist also so einfach wie:

stty -F /dev/ttyS0 9600 cs8

Hinweis: Das ursprüngliche Problem begann mit Termi-Anrufen. Die gleiche Lösung kann dort angewendet werden. Dies ist jedoch eine Angelegenheit, die in Stackoverflow angesprochen werden muss.

0
Ich habe mir diese Einstellungen im Geräte-Manager angesehen und behauptete, bei 9600N81 zu sein. Aber das sehe ich nicht. Vielleicht kommt die Einstellung aus einer Cygwin-Bibliothek. gbarry vor 10 Jahren 0

1 Antwort auf die Frage

0
gbarry

Verwenden Sie diesen Befehl,

stty -F /dev/ttyS0

um alle Porteinstellungen zu erhalten. Dann sehen Sie, was sich geändert hat, nachdem der Port funktioniert.