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
単純なシェル操作だけでコマンドラインからATコマンド通信を行うことはかなり信頼性が低いです。問題=に特別に書かれたプログラム atinout を使用することをお勧めします。 ATコマンドラインからのコマンド:
$ echo AT | atinout - /dev/ttyUSB0 -
AT
OK
$
モデムマネージャが実行されているかどうかを確認し、実行されている場合は強制終了します。
デバイスがモデムであると判断した場合は、ステップインしてモデムにもダイヤルしようとします。これは最近私にとって同様の問題として修正されました。
間違いなく、端末の設定が台無しになっているように見えます。これらのstty
設定を確認して試してください。
echo echoe echok -echonl -echoprt echoctl echoke
編集:AT - OK
ループを取得した理由は、ターミナルとATインタープリターのモデム側の両方でローカルターミナルecho
を有効にしたためです。 ATインタープリターでエコーをオフにするには、最初のコマンドとしてATE0
(ゼロ)を発行します。
前に「ATE0」を使用
エコー「ATE0」>/dev/ttyUSB0
コマンド:
stty -echo -F /dev/ttyUSB3
私のために働いた