Mam więc standardowy port szeregowy RS232, który jest zapętlony z powrotem przez samo poprowadzenie przewodu od Tx do Rx. Testuję pętlę zwrotną, uruchamiając echo
i cat
na dwóch osobnych terminalach:
cat /dev/ttyS1
echo "hi" > /dev/ttyS1
Mój problem dotyczy wyniku. Spodziewałbym się, że jedno „cześć” powróci na terminalu z kotem, ale zamiast tego otrzymuję:
hi
[2 newlines]
hi
[4 newlines]
hi
[8 newlines]
hi
[16 newlines]
hi
[32 newlines]
hi
... i tak dalej, aż ja ctrl+ c cat
.
Po przerwaniu kota, jeśli uruchomię go ponownie, nie wyemituje „cześć”, dopóki nie uruchomię echa po raz drugi.
Czy to normalne? Wiesz, dlaczego widzę takie zachowanie?
Edycja : Przez nową linię mam na myśli ASCII 0x0A
. W tym wyjściu nie ma powrotu karetki.
cat
serial-port
echo
Krystyna
źródło
źródło
tip /dev/ttyS1
(~.
aby wyjść) i spróbujesz wpisać tam dane? Powinien być wyświetlany w twoim terminalu, gdy przewód jest podłączony, ponieważ odbiera to, co przesłał.Odpowiedzi:
Dzięki drugiemu komentarzowi Bruce'a mogłem samodzielnie rozwiązać problem.
Po uruchomieniu
stty -a -F /dev/ttyS1
znalazłem 3 opcje, które przyczyniły się do rozwiązania problemu: „echo”, „onlcr” i „icrnl”.Ponieważ ten port szeregowy jest zapętlony z powrotem do siebie, oto, co się stało po uruchomieniu
echo "hi" > /dev/ttyS1
:echo
Polecenie dołącza do nowej linii na końcu wiadomości domyślnie tak „hi” + LF jest wysyłany do / dev / ttyS1I tak dalej...
Aby rozwiązać ten problem, uruchomiłem następujące polecenie:
Wyłączenie „echa” zapobiega nieskończonej pętli komunikatów, a wyłączenie „onlcr” zapobiega konwersji urządzenia LF na CRLF na wyjściu. Teraz
cat
otrzymuje jedno „cześć” (z jednym nowym wierszem!) Za każdym razem, gdy uruchamiamecho
.CR = powrót karetki (ASCII 0x0D); LF = znak wiersza lub nowy wiersz (ASCII 0x0A)
źródło
-icrnl
zrobił dla mnie lewę.Miałem również podobny problem z łączeniem plików w szeregowy tty do testowania. Oprócz zaakceptowanej odpowiedzi:
Jeśli testujesz wyjście szeregowe, wykonując coś takiego:
cat somefile.txt > /dev/ttyS0
:, będzie mieć sporo nieoczekiwanych danych bajtowych, jeśli testujesz dokładne wartości bajtów.Z
stty
wykonując prostestty raw -F /dev/ttyS0
zatrzyma terminal włożeniu / wymianie znaków (na przykład[...] 0x0A [...]
->[...] 0x0D 0x0A [...]
).raw
Flaga zmienia tryby terminal więc nie przetwarzanie wejście i wyjście jest wykonywana.źródło
stty raw
że domyślnie wyłączy echo. Być może będziesz musiał to zrobićstty raw -echo
.