J'ai donc un port série RS232 standard qui est rebouclé sur lui-même en passant simplement un fil de Tx à Rx. Je teste le bouclage en exécutant echo
et cat
dans deux terminaux distincts:
cat /dev/ttyS1
echo "hi" > /dev/ttyS1
Mon problème est avec la sortie. Je m'attendrais à voir un "salut" revenir sur le terminal exécutant cat mais à la place j'obtiens ceci:
hi
[2 newlines]
hi
[4 newlines]
hi
[8 newlines]
hi
[16 newlines]
hi
[32 newlines]
hi
... et ainsi de suite jusqu'à I ctrl+ c cat
.
Après avoir interrompu cat, si je le lance à nouveau, il ne sortira pas "hi" jusqu'à ce que je lance l'écho une deuxième fois.
Est-ce normal? Une idée pourquoi je vois ce comportement?
Edit : Par newline, je veux dire ASCII 0x0A
. Il n'y a pas de retour chariot dans cette sortie.
cat
serial-port
echo
Kristina
la source
la source
tip /dev/ttyS1
(~.
pour quitter) et essayez de taper des données là-bas? Il doit être affiché dans votre terminal lorsque le fil est connecté, car il reçoit ce qu'il a transmis.Réponses:
Grâce au deuxième commentaire de Bruce, j'ai pu résoudre le problème par moi-même.
Après l'exécution
stty -a -F /dev/ttyS1
, j'ai trouvé 3 options pour contribuer au problème: "echo", "onlcr" et "icrnl".Puisque ce port série est rebouclé sur lui-même, voici ce qui s'est passé après l'exécution
echo "hi" > /dev/ttyS1
:echo
commande ajoute une nouvelle ligne à la fin du message par défaut, donc "hi" + LF est envoyé à / dev / ttyS1Etc...
Afin de résoudre ce problème, j'ai exécuté la commande suivante:
La désactivation de "echo" empêche une boucle infinie de messages et la désactivation de "onlcr" empêche le périphérique série de convertir LF en CRLF en sortie. Reçoit maintenant
cat
un "salut" (avec une seule nouvelle ligne!) Pour chaque fois que je coursecho
.CR = retour chariot (ASCII 0x0D); LF = saut de ligne ou nouvelle ligne (ASCII 0x0A)
la source
-icrnl
a fait l'affaire pour moi.J'ai également eu un problème similaire avec la concaténation de fichiers dans un tty série pour les tests. En plus de la réponse acceptée:
Si vous testez la sortie série en faisant quelque chose comme:,
cat somefile.txt > /dev/ttyS0
elle contiendra une bonne quantité de données d'octets inattendues si vous testez des valeurs d'octets exactes.En
stty
faisant un simple,stty raw -F /dev/ttyS0
cela empêchera le terminal d'insérer / remplacer des caractères (par exemple[...] 0x0A [...]
->[...] 0x0D 0x0A [...]
). L'raw
indicateur modifie les modes du terminal afin qu'aucun traitement d'entrée et de sortie ne soit effectué.la source
stty raw
désactiver l'écho par défaut. Vous devrez peut-être le fairestty raw -echo
.