发送 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”消息,但我得到的是这个数据循环?

尝试了不同的华为USB调制解调器,以及不同的stty设置以及华为调制解调器的默认设置:

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

仅通过简单的 shell 操作从命令行进行 AT 命令通信是相当不可靠的。我建议您尝试使用该程序阿蒂努特这是专门为从命令行发出 AT 命令而编写的:

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

答案2

之前使用“ATE0”

回声“ATE0”> /dev/ttyUSB0

答案3

检查调制解调器管理器是否正在运行——如果是则终止它。

如果它认为该设备是调制解调器,它将介入并尝试拨打调制解调器。这最近为我解决了类似的问题。

答案4

命令:

stty -echo -F /dev/ttyUSB3

为我工作

相关内容