为了测试机器人(可以理解成一台普通的PC机)身上的串口的好坏,我将其与另一台普通PC机通过串口相连(二者都运行LINUX系统,不过PC机上的内核是2.4版本的,而机器人上是2.2版本的),并做了如下三个实验,实验结果很奇怪,请大家帮忙看看:
实验一:一台机子向串口发送时间消息(date >/dev/ttyS0),另一台接受(cat </dev/ttyS0)。结果是:PC机和机器人的收发都可以进行。
实验二:通过minicom来测试。结果是:在minicom运行中,敲机器人的键盘,可以在PC机上同步显示所键入的字符;而敲PC机的键盘,机器人的显示器(和普通PC机一样)上没有任何反应。
实验三:拔掉其间的串口连接线,分别用各自的串口连接GPRS MODEM,运行拨号程序。结果是在PC机上可以正常拨号上网,而在机器人上运行结果如下:
[root@jinxin root]# pppd file /etc/ppp/gprs
Press CTRL-C to close the connection at any stage!
defining PDP context...
[root@jinxin root]#
我的拨号脚本文件如下:
/etc/ppp/gprs:
noauth
user isp
remotename isp
ipparam isp
/dev/ttyS0 #serial cable
9600
nodeflate
asyncmap 20A0000
escape 0xff,0xf9,0x83,0xdb,0x81,0x7f,0x8f,0x9f,0xa2,0xd6
file /etc/ppp/gprs-options
connect /etc/ppp/chat/gprs-connect-chat
disconnect /etc/ppp/chat/gprs-disconnect-chat
/etc/ppp/gprs-options:
defaultroute
nodetach
debug
mtu 576
mru 500
noipdefault
ipcp-accept-local
ipcp-accept-remote
novj
novjccomp
lock
receive-all
noaccomp
noccp
nopcomp
nomagic
nomp
/etc/ppp/chat/gprs-connect-chat:
exec chat \
TIMEOUT 5 \
ECHO ON \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nNO CARRIER\r' \
ABORT '\nNO DIALTONE\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
TIMEOUT 20 \
SAY "
ress CTRL-C to close the connection at any stage!" \
SAY "\ndefining PDP context...\n" \
OK ATE1 \
OK 'AT+CGDCONT=1,ip,cmnet' \
OK 'ATD*99***1#' \
TIMEOUT 22 \
SAY "\nwaiting for connect...\n" \
CONNECT "" \
SAY "\nConnected." \
SAY "\nIf the following ppp negotiations fail,\n" \
SAY "try restarting the phone.\n"
从结果看:显然是执行到“SAY "\ndefining PDP context...\n"”一步时,下一步“OK ATE1”没有执行。
以上就是我所做的三个实验,结果颇为令人费解:从实验一来看,串口可以实现双向通信;而从实验二来看,机器人的串口似乎只能发不能收;再看实验三,机器人似乎无法与MODEM进行串口通信。
到底问题出在什么地方,串口硬件?串口程序软件?还是别的什么地方?我应该怎么解决?请大家帮忙出出主意。
非常感谢!