web-dev-qa-db-ja.com

ATコマンドの送信中のdev / ttyUSBからのエンドレスデータループ

USBモデムへのATコマンドの送信に問題があります。最初はphp-serialクラスを試しましたが、データを読み取っているときに、奇妙なデータで無限ループが発生しました。次に、問題をデバッグしようとしました。 PuTTYターミナルを開き、コマンドを実行しました

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」メッセージを受信できないのはなぜですか。代わりに、このデータループが発生しました。

さまざまなhuaweiUSBモデム、さまざまな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 command):

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
2
user991

単純なシェル操作だけでコマンドラインからATコマンド通信を行うことはかなり信頼性が低いです。問題=に特別に書かれたプログラム atinout を使用することをお勧めします。 ATコマンドラインからのコマンド:

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

モデムマネージャが実行されているかどうかを確認し、実行されている場合は強制終了します。

デバイスがモデムであると判断した場合は、ステップインしてモデムにもダイヤルしようとします。これは最近私にとって同様の問題として修正されました。

1
MikeV

間違いなく、端末の設定が台無しになっているように見えます。これらのstty設定を確認して試してください。

echo echoe echok -echonl -echoprt echoctl echoke

編集:AT - OKループを取得した理由は、ターミナルとATインタープリターのモデム側の両方でローカルターミナルechoを有効にしたためです。 ATインタープリターでエコーをオフにするには、最初のコマンドとしてATE0(ゼロ)を発行します。

0
not2qubit

前に「ATE0」を使用

エコー「ATE0」>/dev/ttyUSB0

コマンド:

stty -echo -F /dev/ttyUSB3

私のために働いた

0
Nicolas