web-dev-qa-db-ja.com

シリアルポートの改行文字が間違っています(LFではなくCR)

LinuxでUSBからシリアルへのコンバーターを使用してデバイスと通信しようとしています。ドライバーは機能しており、デバイスは/ dev/ttyUSB0に存在します。

奇妙な問題があります(別のコンピューターへのヌルモデムケーブルで確認):デバイス(PuTTY、minicom、screen)に接続するために使用するプログラムが何であれ、それらはすべて入力時にCR(\ r)を送信します。私(および私のデバイス)は、入力時にLF(\ n))を期待しています。

コンソールを使用してコマンドを送信すると、LFが送信されます。

# echo Hello World > /dev/ttyUSB0

結果は「HelloWorld\n」になります。私はまた、古典的なc hello worldプログラム(printf( "Hello、world!\ n");)を作成し、出力を/ dev/ttyUSB0にリダイレクトしました-また、行の反対側に "Hello world\n"を提供します。

ただし、他のすべての端末プログラムは、Enter時に\ rを送信します。

何が起きてる?

8
ChristophK

TtyUSBxポートがrawモードに設定されていることを確認してください。そうでなければ、いくつかの文字の置換がある可能性があります。受信側では\ rと\ n、またはその逆。

3
Sunny

picocomを使用する場合、シリアル出力をCRからCR + LFにマッピングするだけです。

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

実際にデバイスにコマンドを送信できるようになりました!

0
user2561747

あなたは使うべきです:

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

「-e」は、特殊文字の送信(つまり、解釈)に使用されます

Ubuntu 18.04ターミナルのヘルプを確認します。

~$ help echo

echo:echo [-neE] [arg ...]引数を標準出力に書き込みます。

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