Então, eu tenho uma porta serial RS232 padrão que volta a si mesma simplesmente executando um fio de Tx a Rx. Estou testando o loopback executando echo
e cat
em dois terminais separados:
cat /dev/ttyS1
echo "hi" > /dev/ttyS1
Meu problema é com a saída. Eu esperaria ver um "oi" voltar no terminal rodando o gato, mas, em vez disso, recebo o seguinte:
hi
[2 newlines]
hi
[4 newlines]
hi
[8 newlines]
hi
[16 newlines]
hi
[32 newlines]
hi
... e assim por diante até eu ctrl+ c cat
.
Depois de interromper o gato, se eu executá-lo novamente, ele não emitirá "oi" até que eu execute o eco pela segunda vez.
Isso é normal? Alguma idéia de por que estou vendo esse comportamento?
Edit : Por nova linha, quero dizer ASCII 0x0A
. Não há retornos de carro nesta saída.
cat
serial-port
echo
Cristina
fonte
fonte
tip /dev/ttyS1
(~.
para sair) e tentar digitar dados lá? Ele deve ser exibido no seu terminal quando o fio estiver conectado, pois recebe o que foi transmitido.Respostas:
Graças ao segundo comentário de Bruce, consegui resolver o problema por conta própria.
Após a execução
stty -a -F /dev/ttyS1
, foram encontradas três opções que contribuíram para o problema: "eco", "onlcr" e "icrnl".Como essa porta serial é retornada a si mesma, eis o que aconteceu após a execução
echo "hi" > /dev/ttyS1
:echo
comando anexa uma nova linha ao final da mensagem por padrão, então "oi" + LF é enviado para / dev / ttyS1E assim por diante...
Para corrigir esse problema, executei o seguinte comando:
Desabilitar "eco" impede um loop infinito de mensagens e desabilitar "onlcr" impede que o dispositivo serial converta LF em CRLF na saída. Agora
cat
recebe um "oi" (com uma única nova linha!) Para cada vez que corroecho
.CR = retorno de carro (ASCII 0x0D); LF = avanço de linha ou nova linha (ASCII 0x0A)
fonte
-icrnl
fez o truque para mim.Também tive um problema semelhante ao concatenar arquivos em um tty serial para teste. Além da resposta aceita:
Se você estiver testando a saída serial fazendo algo como
cat somefile.txt > /dev/ttyS0
:, haverá uma boa quantidade de dados de bytes inesperados se estiver testando valores exatos de bytes.Ao
stty
fazer um simplesstty raw -F /dev/ttyS0
, o terminal não poderá inserir / substituir caracteres (por exemplo,[...] 0x0A [...]
->[...] 0x0D 0x0A [...]
). Oraw
sinalizador altera os modos do terminal para que nenhum processamento de entrada e saída seja executado.fonte
stty raw
desabilitar o eco por padrão. Você pode precisar fazerstty raw -echo
.