web-dev-qa-db-fra.com

Mauvais caractère Newline sur le port série (Cr au lieu de LF)

J'essaie de parler à un appareil à l'aide d'un convertisseur USB à série sur Linux. Les pilotes fonctionnent, l'appareil existe à/dev/ttyusb0.

Il y a un problème étrange (coché avec un câble NULL-MODEM à un autre ordinateur): quel que soit le programme que j'utilise pour vous connecter au périphérique (mastic, minicom, écran), ils envoient tous un CR (\ r) en entrée. I (et mon appareil) attendez-vous à un LF (\ n) en entrée.

Lorsque j'utilise la console pour envoyer une commande - il envoie un lf:

# echo Hello World > /dev/ttyUSB0

Résultats dans "Hello World\N". J'ai également écrit le programme World Classic C Hello (Printf ("Bonjour, World!\N");) et redirigèrent la sortie à/dev/ttyusb0 - me donne également un "bonjour mondial\n" à l'autre bout de la ligne .

Mais tous les autres programmes de terminal envoient un\R en entrée.

Que se passe t-il ici?

8
ChristophK

Veuillez vous assurer que vous avez défini le port TTYUSBX en mode RAW. Sinon, il peut y avoir des remplaçants de caractères par exemple.\r avec\n et vice versa sur le côté récepteur.

3
Sunny

Si vous utilisez picocom, il s'agit de mapper la sortie série de CR à CR + LF.

Exemple: picocom /dev/ttyS0 --baud 19200 --omap crcrlf --echo

En fait capable d'envoyer des commandes à l'appareil maintenant!

0
user2561747

Tu devrais utiliser:

echo -e "Hello World\n" > /dev/ttyUSBx où x = {0,1, ... n}

Le "-E" est utilisé pour envoyer (interprétation de) caractères spéciaux

Vérifiez l'aide sur Ubuntu 18.04 Terminal:

~$ help echo

eCHO: ECHO [-NEE] [arg ...] Écrivez des arguments sur la sortie standard.

Display the ARGs, separated by a single space character and followed by a
newline, on the standard output.

Options:
  -n    do not append a newline
  -e    enable interpretation of the following backslash escapes
  -E    explicitly suppress interpretation of backslash escapes

(...)

0
JohnBR