ATコマンドを送信するときにdev / ttyUSBで無限データループ

ATコマンドを送信するときにdev / ttyUSBで無限データループ

USBモデムにATコマンドを送信する際に問題があります。最初はphp-serialクラスを使ってみましたが、データを読んでみると、奇妙なデータを含む無限ループにぶつかりました。その後、問題のデバッグを試み、パテ端末を開き、コマンドを実行しました。

cat /dev/ttyUSB0

その後、コマンドを送信した後は常にecho "AT" > /dev/ttyUSB0無限ループが発生します。cat /dev/ttyUSB0

AT
AT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^

そしてこの循環は決して終わりません。 Windowsでは、すべてがうまく動作します。仮想COMポートを介してUSBモデムに接続し、コマンドを送信して応答を受信できます。

問題は、なぜコンソールから「OK」メッセージを受け取ることができないのに、このデータループが発生するのです。

さまざまなHuawei USBモデム、さまざまなstty設定、およびHuaweiモデムのデフォルト設定を試しました。

Baud rate: 9600 / 115200
Parity: none
Data bits = 8
Stop bits = 1
Flow control = none


test dev # uname -a
Linux test 3.5.7-gentoo #3 SMP Sun Feb 17 04:58:22 EET 2013 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 5200+ AuthenticAMD GNU/Linux

最新のカーネルコンパイル:3.6.11-gentoo、コマンドを送信するとき:

echo "AT" > /dev/ttyUSB0

得られた結果は次のとおりです。

OK
AT
OK
AT
OK
AT

終わりません。 catコマンドを終了し、別のコマンドを送信します(make callコマンド)。

echo "ATDT 27789388;" > /dev/ttyUSB0

ループのない猫から答えを得ました。

systest ~ # cat /dev/ttyUSB0
ATDT 27789388;


OK

それでは、tty端末がなぜそんなに奇妙に動作するのでしょうか?たぶんシリアルポートからデータを送って読み取ることについて何も知りませんか?

役に立つ場合は、stty -a -F /dev/ttyUSB0 コマンドの出力は次のようになります。

speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

ベストアンサー1

単純なシェル操作によるコマンドラインからのATコマンド通信は非常に信頼できません。このプログラムを試すことをお勧めしますアーティヌートこれは、コマンドラインからATコマンドを実行するために特別に書かれています。

$ echo AT | atinout - /dev/ttyUSB0 -
AT
OK
$

おすすめ記事