Ich habe also einen seriellen RS232-Standardanschluss, der durch einfaches Verlegen eines Kabels von Tx zu Rx zu sich selbst zurückgeschleift wird. Ich teste Loopback, indem ich echo
und cat
in zwei getrennten Terminals ausführe:
cat /dev/ttyS1
echo "hi" > /dev/ttyS1
Mein Problem ist mit der Ausgabe. Ich würde erwarten, dass ein "hi" auf dem Terminal zurückkommt, auf dem cat läuft, aber stattdessen bekomme ich Folgendes:
hi
[2 newlines]
hi
[4 newlines]
hi
[8 newlines]
hi
[16 newlines]
hi
[32 newlines]
hi
... und so weiter bis ich ctrl+ c cat
.
Nach dem Unterbrechen von cat wird es, wenn ich es erneut starte, keine "Hi" s ausgeben, bis ich das Echo ein zweites Mal starte.
Ist das normal? Irgendeine Idee, warum ich dieses Verhalten sehe?
Edit : Mit newline meine ich ASCII 0x0A
. In dieser Ausgabe gibt es keine Wagenrückläufe.
cat
serial-port
echo
Kristina
quelle
quelle
tip /dev/ttyS1
(um~.
zu beenden) und versuchen, Daten dort einzugeben? Es sollte in Ihrem Terminal angezeigt werden, wenn das Kabel angeschlossen ist, da es empfängt, was es gesendet hat.Antworten:
Dank des zweiten Kommentars von Bruce konnte ich das Problem selbst herausfinden.
Nach dem Ausführen
stty -a -F /dev/ttyS1
gab es drei Optionen, die ich gefunden habe, um zum Problem beizutragen: "echo", "onlcr" und "icrnl".Da diese serielle Schnittstelle zu sich selbst zurückgeschleift ist, ist nach dem Ausführen Folgendes passiert
echo "hi" > /dev/ttyS1
:echo
Befehl fügt standardmäßig eine neue Zeile an das Ende der Nachricht an, sodass "hi" + LF an / dev / ttyS1 gesendet wirdUnd so weiter...
Um dieses Problem zu beheben, habe ich den folgenden Befehl ausgeführt:
Durch Deaktivieren von "echo" wird eine Endlosschleife von Nachrichten verhindert, und durch Deaktivieren von "onlcr" wird verhindert, dass das serielle Gerät bei der Ausgabe LF in CRLF konvertiert.
cat
Erhält jetzt ein "Hallo" (mit einem einzelnen Zeilenumbruch!) Für jedes Mal, wenn ich renneecho
.CR = Wagenrücklauf (ASCII 0x0D); LF = Zeilenvorschub oder Newline (ASCII 0x0A)
quelle
-icrnl
hat den Trick für mich getan.Ich hatte ein ähnliches Problem mit der Verkettung von Dateien zu einer Seriennummer zum Testen. Zusätzlich zur akzeptierten Antwort:
Wenn Sie die serielle Ausgabe testen, indem Sie Folgendes ausführen:
cat somefile.txt > /dev/ttyS0
Wenn Sie auf exakte Bytewerte testen, weist sie eine große Menge unerwarteter Bytedaten auf.Mit
stty
einem einfachenstty raw -F /dev/ttyS0
Befehl wird das Terminal daran gehindert , Zeichen einzufügen / zu ersetzen (zB[...] 0x0A [...]
->[...] 0x0D 0x0A [...]
). Dasraw
Flag ändert die Modi des Terminals, sodass keine Eingabe- und Ausgabeverarbeitung durchgeführt wird.quelle
stty raw
das Echo standardmäßig deaktiviert. Möglicherweise müssen Sie tunstty raw -echo
.