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を送信します。
何が起きてる?
TtyUSBxポートがrawモードに設定されていることを確認してください。そうでなければ、いくつかの文字の置換がある可能性があります。受信側では\ rと\ n、またはその逆。
picocom
を使用する場合、シリアル出力をCRからCR + LFにマッピングするだけです。
例:picocom /dev/ttyS0 --baud 19200 --omap crcrlf --echo
実際にデバイスにコマンドを送信できるようになりました!
あなたは使うべきです:
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
(...)