我在向 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
为我工作