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
$
答え2
以前使用した「ATE0」
エコ「ATE0」 > /dev/ttyUSB0
答え3
モデムマネージャが実行されていることを確認してください。その場合は、モデムマネージャを終了します。
デバイスがモデムだと思ったら、介入してモデムに電話をかけます。これは最近同様の問題を解決しました。
答え4
注文する:
stty -echo -F /dev/ttyUSB3
私のために働く