fl2440添加SIM5900B GPRS模块,进行拨号上网,打电话。

来源:互联网 发布:其他设备网络控制器 编辑:程序博客网 时间:2024/05/29 02:12

开发板     :fl2440

CPU         : s3c2440

linux内核:linux-3.0

开发模块:GPRS(SIM900B)(华为公司)

SIM:移动卡


一,硬件连接打开GPS及测试

我使用的USB转串口线上的芯片是cp210的,所以在内核配置的时候,必须把这个支持选上,否则,开发板不识别。

  1. make menuconfig  
  2.     Device Drivers->  
  3.         [*]USB support ->  
  4.             [*]USB Serial Converter supportUSB CP210x family of UART Bridge Controllers  

make编译之后重新烧录进开发板,或者选择M,进行模块化编译,再在drivers/usb/serial/cp210x.ko下,找到cp210x.ko文件,tftp -gr cp210x.ko (host机ip地址)下载到开发板进行insmod安装,但是此方法每次开机时都需要重新装,比较麻烦,可以修改/etc/init.d/rcs的内容,

再对该文件进行source,使之生效,则可每次开机自动insmod驱动。

安装驱动之后,插上USB转串口设备,开发板上/dev/目录下出现ttyUSB0设备,说明识别成功。

>:ls  /dev/ttyUSB*

/dev/ttyUSB0

>:

由于SIM900B出来的信号时RS-232信号,把usb转串口设备拨到RS-232,连接两设备。

2.ppp移植

PPP(点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据包。

点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。

ppp下载,安装,移植,过程如下:

  1. [zy@CentOS tftp]$ cd 3G/  
  2. [zy@CentOS 3G]$wget https://coding.net/u/sfantree/p/OSS2/git/raw/master/source/ppp-2.4.5.tar.gz  
  3. [zy@CentOS 3G]$ cd ppp-2.4.5  
  4. [zy@CentOS ppp-2.4.5]$ ./configure  
  5. [zy@CentOS ppp-2.4.5]$ cd chat/  
  6. [zy@CentOS chat]$ vim chat.c 
  7.  
  1. 1168     if (timeout_next) {  
  2. 1169         timeout_next = 0;  
  3. 1170         s=clean(s,0); /*Add by zy*/  
  4. 1171         timeout = atoi(s);  
  5. 1172         free(s);/*Add by zy*/  
  6. 1173         if (timeout <= 0)  
  7. 1174             timeout = DEFAULT_CHAT_TIMEOUT;  
  8. 1175   
  9. 1176         if (verbose)  
  10. 1177             msgf("timeout set to %d seconds", timeout);  
  11. 1178   
  12. 1179         return;  
  13. 1180     }  

[zy@CentOSchat]$ vim Makefile

  1. 16 INSTALL= install  
  2.  17 CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc  #add by zy  
  3.  18   
  4.  19 all:    chat  
  5.  20   
  6.  21 chat:   chat.o  
  7.  22         $(CC) -static -o chat chat.o #Add zy
  8.  23         $(CC) -o chat chat.o  
[zy@CentOS chat]$ cd ../pppd
[zy@CentOS pppd]$ vim auth.c

  1. 1326 /*Modify by zy */  
  2. 1327     ao->neg_upap = !refuse_pap; //&& (passwd[0] != 0 || get_pap_passwd(NULL));  
  3. 1328     ao->neg_chap = (!refuse_chap || !refuse_mschap || !refuse_mschap_v2)  
[zy@CentOS pppd]$ vim Makefile

  1. 33 CC = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc  #add by zy 
  2. 46 #MPPE=y   #modify by zy  
  3. 51 #FILTER=y   #modify by zy  
  4. 56 #HAVE_MULTILINK=y   #modify by zy  
  5. 68 #PLUGIN=y   #modify by zy  
[zy@CentOS ppp-2.4.5]$ make
[zy@CentOS ppp-2.4.5]$ cd chat/
[zy@CentOS chat]$ ls

chat  chat.8  chat.c  chat.o  Makefile  Makefile.linux  Makefile.sol2
[zy@CentOS chat]$ file chat

chat:ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

[zy@CentOS chat]$ cd ../pppd
[zy@CentOS pppd]$ file pppd
pppd: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
把chat和pppd下载到开发板的/usr/sbin中,并给予777权限

3.编写脚本

开发板上操作:

>: mkdir -p /etc/ppp/peers

>: cd etc/ppp/peers/

>: pwd/etc/ppp/peers

3.1.编写全局配置文件

>: vi wcdma

  1. #set debug ,send message to /var/log/messages  
  2. debug  
  3. #To keep pppd on the terminal  
  4. nodetach  
  5. lock  
  6. #set serial  
  7. /dev/ttyUSB0  
  8. # set baudrate  
  9. 115200  
  10. user "zhangyan"   //拨号时用不上用户名和密码,可有可无
  11. password "zhangyan"  
  12. # set flowrate  
  13. nocrtscts   //流控,SIM900B没有添加流控,因此不可以要crtscts。 流控类似于一种信息发送前的申请机制,开发板向GPRS申请传递AT,GPRS传递允许信息,然后开发板才能再传递信息。我使用的GPRS不含流控,因此运行时会死掉,因为接收不到GPRS传递回的信息,所以不能有流控,这是我的理解。具体信息https://zhidao.baidu.com/question/512829787.html
  14. show-password  
  15. usepeerdns  
  16. noauth  
  17. noipdefault  
  18. novj  
  19. novjccomp  
  20. noccp  
  21. # Accept the peer's idea of our local IP address  
  22. ipcp-accept-local  
  23. # ipcp-accept-remote  
  24. ipcp-accept-remote  
  25. connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'  
  26. disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'  
它的作用是给pppd进程提供配置参数。

3.2.编写拨号脚本:

>: vi wcdma-chat-connect

[plain] view plain copy
  1. ABORT 'NO CARRIER'  //这5行是终止信号,当硬件遇到各种原因无法进行时,报这五种错,比如在
  2. ABORT 'ERROR'      //在打电话时做别的操作,可能报busy
  3. ABORT 'NO DIALTONE'  
  4. ABORT 'BUSY'  
  5. ABORT 'NO ANSWER'  
  6. '' \rAT           // 开发板不接受任何信息,直接传递AT,接收到GPRS的OK回来,再发OK
  7. OK \rATZ          //具体写的格式,查询chat 脚本语法
  8. #移动2g接入点:cmnet  //移动接入点
  9. OK \rAT+CGDCONT=1,"IP","cmnet",,0,0  
  10. #这里要注意是哪个运营商,拨号号码是不同的。如此处的是联通的拨号设置  
  11. OK-AT-OK ATDT*99***1#   //上网拨号码 
  12. CONNECT \d\c  
3.3.编写拨号错误处理脚本:
>: vi wcdma-chat-disconnect

[plain] view plain copy
  1. ABORT "ERROR"  
  2. ABORT "NO DIALTONE"  
  3. SAY "\nSending break to the modem\n"  
  4. '' "\K"  
  5. '' "+++ATH"  
  6. SAY "\nGoodbay\n"  

查看三个文件:

>: pwd

/etc/ppp/peers

:ls

wcdmawcdma-chat-connect wcdma-chat-disconnect

*********************************************************************************************************************

注意:pppd调用chat会话进程接入对端isp,启动对端的pppd,然后本地pppd与对端的pppd一起进行协商网络参数和chap/pap认证,

成功后,再进行ncp层的ip的分配。

***********************************************************************************************************

4.拨号

*****************************************************************************************************************

注意:在拨号之前一定要先检测SIM卡是否准备好,microcom命令串口调试,查看AT命令是否有OK回显。这一步至关重要!!!

查询at命令可以浏览https://wenku.baidu.com/view/55049944b307e87101f69623.html ;http://www.cnblogs.com/yuweifeng/p/5587473.html

********************************************************************************************************************


at+cpin?是否有SIM卡,at+csq,检测信号,数字越高越好,at+cops?哪个运营商,(atdt电话号码;)拨号打电话。

拨号命令:>:pppdcall wcdma& (&进入后台执行)


此时拨号成功,生成了一个ppp0网卡就是GPRS网卡

>: route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.200.1.21    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

此时没有网关,没法连接外网。

要把ppp0的ip地址设为网关

>:route add default 192.200.1.21 //添加默认网关 

这时候直接上外网是不行的,还没有设置DNS,这就需要设置DNS。

[plain] view plain copy
  1. >:vi /etc/ppp/resolv.conf   
  2. nameserver 4.2.2.2  //改为这两个DNS  
  3. nameserver 114.114.114.114    
  4. >: ln -s /etc/ppp/resolv.conf /etc/resolv.conf  
  5. //建立一个软链接,链接到全局DNS才能访问。  
之后ping 4.2.2.2可以ping通
原创粉丝点击