Así que tengo un puerto serie RS232 estándar que se vuelve a conectar a sí mismo simplemente ejecutando un cable de Tx a Rx. Estoy probando loopback ejecutando echo
y cat
en dos terminales separadas:
cat /dev/ttyS1
echo "hi" > /dev/ttyS1
Mi problema es con la salida. Esperaría ver un "hola" volver en la terminal con gato, pero en cambio obtengo esto:
hi
[2 newlines]
hi
[4 newlines]
hi
[8 newlines]
hi
[16 newlines]
hi
[32 newlines]
hi
... y así sucesivamente hasta I ctrl+ c cat
.
Después de interrumpir cat, si lo vuelvo a ejecutar no emitirá "hola" hasta que ejecute echo por segunda vez.
¿Esto es normal? ¿Alguna idea de por qué estoy viendo este comportamiento?
Editar : Por nueva línea, me refiero a ASCII 0x0A
. No hay retornos de carro en esta salida.
cat
serial-port
echo
Kristina
fuente
fuente
tip /dev/ttyS1
(~.
para salir) e intenta escribir datos allí? Debe mostrarse en su terminal cuando el cable está conectado, ya que recibe lo que ha transmitido.Respuestas:
Gracias al segundo comentario de Bruce, pude resolver el problema por mi cuenta.
Después de ejecutar
stty -a -F /dev/ttyS1
, encontré 3 opciones para contribuir al problema: "echo", "onlcr" e "icrnl".Dado que este puerto serie se vuelve a conectar en sí mismo, esto es lo que sucedió después de ejecutarse
echo "hi" > /dev/ttyS1
:echo
comando agrega una nueva línea al final del mensaje de forma predeterminada, por lo que se envía "hola" + LF a / dev / ttyS1Y así...
Para solucionar este problema, ejecuté el siguiente comando:
Deshabilitar "echo" evita un bucle infinito de mensajes y deshabilitar "onlcr" evita que el dispositivo serie convierta LF a CRLF en la salida. Ahora
cat
recibe un "hola" (¡con una nueva línea nueva!) Por cada vez que corroecho
.CR = retorno de carro (ASCII 0x0D); LF = avance de línea o nueva línea (ASCII 0x0A)
fuente
-icrnl
hizo el truco para míTambién tuve un problema similar con la concatenación de archivos en un tty serial para pruebas. Además de la respuesta aceptada:
Si está probando la salida en serie haciendo algo como:,
cat somefile.txt > /dev/ttyS0
tendrá una buena cantidad de datos de bytes inesperados si está probando valores de bytes exactos.Al
stty
hacer un simple,stty raw -F /dev/ttyS0
se detendrá la terminal de insertar / reemplazar caracteres (por ejemplo,[...] 0x0A [...]
->[...] 0x0D 0x0A [...]
). Laraw
bandera cambia los modos del terminal para que no se realice el procesamiento de entrada y salida.fuente
stty raw
que deshabilitará el eco por defecto. Puede que tenga que hacerstty raw -echo
.