Jadi saya punya port serial RS232 standar yang di-loop kembali ke dirinya sendiri dengan hanya menjalankan kawat dari Tx ke Rx. Saya menguji loopback dengan menjalankan echo
dan cat
di dua terminal terpisah:
cat /dev/ttyS1
echo "hi" > /dev/ttyS1
Masalah saya adalah dengan output. Saya akan berharap untuk melihat satu "hai" kembali pada terminal running cat tetapi saya malah mendapatkan ini:
hi
[2 newlines]
hi
[4 newlines]
hi
[8 newlines]
hi
[16 newlines]
hi
[32 newlines]
hi
... dan seterusnya hingga saya ctrl+ c cat
.
Setelah menyela kucing, jika saya jalankan lagi itu tidak akan menampilkan "hai" sampai saya menjalankan gema untuk kedua kalinya.
Apakah ini normal? Adakah alasan mengapa saya melihat perilaku ini?
Sunting : Menurut baris baru, maksud saya ASCII 0x0A
. Tidak ada carriage return dalam output ini.
cat
serial-port
echo
Kristina
sumber
sumber
tip /dev/ttyS1
(~.
untuk keluar) dan mencoba mengetik data di sana? Itu harus ditampilkan di terminal Anda ketika kabel terhubung, karena menerima apa yang telah ditransmisikan.Jawaban:
Berkat komentar kedua oleh Bruce, saya bisa mencari tahu masalahnya sendiri.
Setelah berjalan
stty -a -F /dev/ttyS1
, ada 3 opsi yang saya temukan berkontribusi pada masalah: "echo", "onlcr", dan "icrnl".Karena port serial ini di-loop kembali ke dirinya sendiri, inilah yang terjadi setelah menjalankan
echo "hi" > /dev/ttyS1
:echo
perintah menambahkan baris baru ke akhir pesan secara default, sehingga "hi" + LF dikirim ke / dev / ttyS1Dan seterusnya...
Untuk memperbaiki masalah ini, saya menjalankan perintah berikut:
Menonaktifkan "echo" mencegah loop pesan yang tak terbatas dan menonaktifkan "onlcr" mencegah perangkat serial dari mengkonversi LF ke CRLF pada output. Sekarang
cat
terima satu "hai" (dengan satu baris baru!) Untuk setiap kali saya menjalankanecho
.CR = carriage return (ASCII 0x0D); LF = umpan baris atau baris baru (ASCII 0x0A)
sumber
-icrnl
melakukan trik untukku.Saya memiliki masalah yang sama juga dengan menggabungkan file ke tty serial untuk pengujian. Selain jawaban yang diterima:
Jika Anda menguji keluaran serial dengan melakukan sesuatu seperti:,
cat somefile.txt > /dev/ttyS0
ia akan memiliki jumlah data byte yang tidak terduga jika Anda menguji nilai byte yang tepat.Dengan
stty
melakukan hal sederhanastty raw -F /dev/ttyS0
akan menghentikan terminal dari memasukkan / mengganti karakter (misalnya[...] 0x0A [...]
->[...] 0x0D 0x0A [...]
). Theraw
bendera mengubah mode dari terminal sehingga tidak ada input dan output pengolahan dilakukan.sumber
stty raw
menonaktifkan gema secara default. Anda mungkin perlu melakukannyastty raw -echo
.