Graças ao segundo comentário de Bruce, consegui descobrir o problema sozinho.
Depois de executar stty -a -F /dev/ttyS1
, havia 3 opções que encontrei para contribuir com o problema: "echo", "onlcr" e "icrnl".
Como esta porta serial é retornada para si mesma, eis o que aconteceu depois de executar echo "hi" > /dev/ttyS1
:
- O comando
echo
acrescenta uma nova linha ao final da mensagem por padrão, então "oi" + LF é enviado para / dev / ttyS1 - Como "onlcr" foi definido, o dispositivo serial converteu o LF em CRLF para que a mensagem física enviada pela linha Tx fosse "hi" + CRLF
- Como "icrnl" foi definido, a mensagem física recebida na linha Rx converteu o CR em LF. Então a mensagem produzida por "cat" era "oi" + LFLF.
- Como "echo" foi definido, a mensagem recebida no Rx ("hi" + LFLF) foi enviada de volta para a linha Tx.
- Por causa de onlcr, "hi" + LFLF tornou-se "oi" + CRLFCRLF.
- Por causa do icrnl, "oi" + CRLFCRLF tornou-se "oi" + LFLFLFLF
- Por causa do eco, "oi" + LFLFLFLF foi enviado então o Tx
E assim por diante ...
Para corrigir esse problema, executei o seguinte comando:
stty -F /dev/ttyS1 -echo -onlcr
Desativar "echo" evita um loop infinito de mensagens e a desativação de "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 eu corro echo
.
CR = retorno de carro (ASCII 0x0D); LF = alimentação de linha ou nova linha (ASCII 0x0A)