linux gprs模块 sim900芯片 ppp拨号上网

    xiaoxiao2025-02-01  11

    开发板:FL2440      内核版本:linux-3.0     芯片:sim900

    一,GPRS介绍

    GSM模块,是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。GSM模块根据其提供的数据传输速率又可以分为GPRS模块、EDGE模块和纯短信模块。短信模块只支持语音和短信服务。GPRS,可说是GSM的延续。它经常被描述成“2.5G”,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间。GPRS的传输速率从56K到114Kbps不等,理论速度最高达171k。相对于GSM的9.6kbps的访问速度而言,GPRS拥有更快的访问数据通信速度,GPRS技术还具有在任何时间、任何地点都能实现连接,永远在线、按流量计费等特点。EDGE技术进一步提升了数据传输的速率到384K-473K,被称为"2.75G",数据传输速率更2倍于GPRS。目前,国内的GSM网络普遍具有GPRS通讯功能,移动和联通的网络都支持GPRS,EDGE在部分省市实现了网络覆盖。 GPRS模块,是具有GPRS数据传输功能的GSM模块。GPRS模块就是一个精简版的手机,集成GSM通信的主要功能于一块电路板上,具有发送短消息、通话、数据传输等功能。GPRS模块相当于手机的核心部分,如果增加键盘和屏幕就是一个完整的手机。普通电脑或者单片机可以通过RS232串口与GPRS模块相连,通过AT指令控制GPRS模块实现各种基于GSM的通信功能。 GPRS模块区别于传统的纯短信模块,两者都是GSM模块,但是短信模块只能收发短信和语音通讯,而GPRS模块还具有GPRS数据传输功能。

    二,配置内核添加PPP拨号上网

    在虚拟机的linux上操作

    Device Drivers  --->

          。。。。。。

          [*] Network device support  --->

                  。。。。。。

                  *** CAIF transport drivers ***

                  <*>   PPP (point-to-point protocol) support

                  [*]     PPP multilink support (EXPERIMENTAL)

                  [*]     PPP filtering

                  <*>     PPP support for async serial ports

                  <*>     PPP Deflate compression

                  <*>     PPP BSD-Compress compression

                  <*>     PPP MPPE compression (encryption) (EXPERIMENTAL)

                  <*>     PPP over Ethernet (EXPERIMENTAL)

                  。。。。。。

    在内核路径下再make一次,将新生成的内核烧进开发板。

    三,下载编译ppp-2.4.4.tar.gz (下载源码,自己解压编译,生成可执行命令,用于ppp拨号上网)

    下载地址:http://download.csdn.net/detail/zhyustar/1531748

    以下在虚拟机的linux上执行

    自己建个sim900文件夹,我自己的路径在/home/zzx/fl2440/3rdparty/sim900,将下载的ppp-2.4.4.tar.gz放在该目录下

    [zzx@localhost sim900]$ tar -xzf ppp-2.4.4.tar.gz

    [zzx@localhost sim900]$ ls

    ppp-2.4.4  ppp-2.4.4.tar.gz

    [zzx@localhost sim900]$ cd ppp-2.4.4

    [zzx@localhost ppp-2.4.4]$ ./configure

    [zzx@localhost ppp-2.4.4]$ ls

    Changes-2.3  etc.ppp   modules   README          README.MSCHAP80  scripts chat         FAQ       PLUGINS   README.cbcp     README.MSCHAP81  SETUP common       include   pppd      README.eap-srp  README.pppoe     solaris configure    linux     pppdump   README.linux    README.pwfd contrib      Makefile  pppstats  README.MPPE     README.sol2

    [zzx@localhost ppp-2.4.4]$ cd chat/

    [zzx@localhost chat]$ vim chat.c

    [zzx@localhost chat]$ vim Makefile

    [zzx@localhost chat]$ cd ../pppd

    [zzx@localhost ppp-2.4.4]$ vim auth.c

    [zzx@localhost pppd]$ vim auth.c

    注:.c文件中用/* */做注释,Makefile文件中使用#做注释

    [zzx@localhost pppd]$ vim Makefile

    [zzx@localhost pppd]$ cd ..

    [zzx@localhost ppp-2.4.4]$ make

    [zzx@localhost ppp-2.4.4]$ cd chat/

    [zzx@localhost chat]$ ls

    chat  chat.8  chat.c  chat.o  Makefile  Makefile.linux  Makefile.sol2

    [zzx@localhost chat]$ file chat

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

    [zzx@localhost chat]$ cd ../pppd

    [zzx@localhost pppd]$ file pppd

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

    将生成的chat和pppd文件用tftp放到开发板的/usr/sbin/路径下,并给于可执行权限(chmod a+x chat pppd)

    四,开发板下脚本的编写

    以下在开发板上操作

    >: mkdir /etc/ppp

    >: cd ppp/

    >: vi gprs-connect-chat

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

    一个简单的chat脚本有下面的结构: “” AT OK ATDT dialnumber CONNECT “” 1) MODEM期望空字符串。这句话的意思直接理解就是MODEM不管收到什么字符串,先发出字符串AT; 2) 期望收到“OK”字符串,然后发送字符串“ATDT dialnumber” 3) 如果收到“CONNECT”,就不再发送,认为数据链路已建立连接。 4)如果需要进行超时控制,就可以加入如下字段: TIMEOUT 10 5)如果要增加对特殊情况的处理,就加入下面字段: ABORT BUSY ABORT NO ANSWER ABORT RINGING 意思是:如果收到字符串“BUSY”、“NO ANSWER”、“RINGING”就退出执行。

    三大运营商拨号设置

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

    编写gprs脚本,编写gprs脚本为PPP连接指定了连接使用的设备、使用的控制字符传输速率、指定了硬件加速、溢出控制等

    在/etc/ppp/peers路径下编写gprs脚本(注意:默认路径为/etc/ppp/peers!!

    >: mkdir peers

    >: cd peers/

    >: vi gprs

    注:加上参数-v 告诉 chat命令将其所有的输出/入拷贝到系统记录里(通常是 #/var/log/messageschat脚本的位置可以位/etc/目录下,也可以位于/var下,这个可以根据需要灵活设置

    五,测试ppp拨号上网

    注意:需要将eth0即网口给禁用掉,这样ping命令才会通过ppp0端口寻找路由连接外网

    >: ifconfig eth0 down

    >: pppd call gprs &        //&为后台运行符 >: abort on (BUSY) abort on (NO ANSWER) abort on (NO CARRIER) abort on (NO DIALTONE) abort on (ERROR) abort on (\nRING\r\n\r\nRING\r) timeout set to 20 seconds send (^MAT^M) expect (OK) ^MAT^M^M OK  -- got it send (AT+CGDCONT=1,"IP","3GNET"^M) expect (OK) ^M AT+CGDCONT=1,"IP","3GNET"^M^M OK  -- got it send (ATDT*99#^M) Waiting for connect... expect (CONNECT) ^M ATDT*99#^M^M CONNECT  -- got it send (^M) Connect Success! Serial connection established. using channel 1 Using interface ppp0 Connect: ppp0 <--> /dev/ttyS1 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x20790fc3> <pcomp> <accomp>] rcvd [LCP ConfReq id=0x1 <asyncmap 0xa0000> <auth pap>] sent [LCP ConfAck id=0x1 <asyncmap 0xa0000> <auth pap>] rcvd [LCP ConfRej id=0x1 <magic 0x20790fc3> <pcomp> <accomp>] sent [LCP ConfReq id=0x2 <asyncmap 0x0>] rcvd [LCP ConfAck id=0x2 <asyncmap 0x0>] No secret found for PAP login sent [PAP AuthReq id=0x1 user="root" password=<hidden>] rcvd [PAP AuthAck id=0x1 "Login OK"] Remote message: Login OK PAP authentication succeeded sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>] sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>] rcvd [LCP ProtRej id=0x2 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f] Protocol-Reject for 'Compression Control Protocol' (0x80fd) received sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>] rcvd [IPCP ConfReq id=0x1 <addr 192.200.1.21>] sent [IPCP ConfAck id=0x1 <addr 192.200.1.21>] rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>] sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>] rcvd [IPCP ConfNak id=0x2 <addr 10.217.45.236> <ms-dns1 218.106.127.114> <ms-dns3 218.104.111.122>] sent [IPCP ConfReq id=0x3 <addr 10.217.45.236> <ms-dns1 218.106.127.114> <ms-dns3 218.104.111.122>] rcvd [IPCP ConfAck id=0x3 <addr 10.217.45.236> <ms-dns1 218.106.127.114> <ms-dns3 218.104.111.122>] local  IP address 10.217.45.236 remote IP address 192.200.1.21 primary   DNS address 218.106.127.114 secondary DNS address 218.104.111.122

    >: ifconfig ppp0      Link encap:Point-to-Point Protocol             inet addr:10.217.45.236  P-t-P:192.200.1.21  Mask:255.255.255.255           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1           RX packets:4 errors:0 dropped:0 overruns:0 frame:0           TX packets:6 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:3           RX bytes:64 (64.0 B)  TX bytes:125 (125.0 B)

    >: ping 4.2.2.2 PING 4.2.2.2 (4.2.2.2): 56 data bytes 64 bytes from 4.2.2.2: seq=0 ttl=51 time=1223.093 ms 64 bytes from 4.2.2.2: seq=1 ttl=51 time=896.179 ms 64 bytes from 4.2.2.2: seq=2 ttl=51 time=629.710 ms 64 bytes from 4.2.2.2: seq=3 ttl=51 time=584.789 ms --- 4.2.2.2 ping statistics --- 5 packets transmitted, 4 packets received, 20% packet loss round-trip min/avg/max = 584.789/833.442/1223.093 ms

    >: ping www.baidu.com PING www.baidu.com (180.97.33.107): 56 data bytes 64 bytes from 180.97.33.107: seq=0 ttl=50 time=2204.226 ms 64 bytes from 180.97.33.107: seq=1 ttl=50 time=1383.368 ms 64 bytes from 180.97.33.107: seq=2 ttl=50 time=599.730 ms --- www.baidu.com ping statistics --- 5 packets transmitted, 3 packets received, 40% packet loss round-trip min/avg/max = 599.730/1395.774/2204.226 ms

    连接外网成功,在/etc/ppp目录下

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

    若运行pppd call gprs & 出现下面错误

    解决:先用>: microcom -s 115200 /dev/ttyS1 进行AT串口通信测试,  (注,CTRL+x 为取消microcom指令)

    >: microcom -s 115200 /dev/ttyS1           //使用microcom命令来进行串口通信,相当于pc机上的串口通信软件 AT       //测试串口是否连接上,返回OK成功 OK AT+CPIN?     //测试sim卡是否在位,返回READY OK表明检测到卡 +CPIN: READY OK AT+CREG?   //判断卡是否注册, +CREG: 1,1     //1 代表当网络注册状态改变时激活网络注册结果码   1代注册到了本地网络 OK AT+CSQ      //测试信号强度 +CSQ: 18,0     // 31为最强 OK

    我出现上述截图问题是因为没有用大的卡套(本人的是小卡),所以sim卡没有被检测到!!

    以下为一些常用的检测AT指令:

    先要用AT命令看看: 1, AT有没有反映,判断模块是否上电; 2, AT+CPIN? 判断卡是否在位 -> AT+CREG? 判断卡是否注册上 然后才是pppd拨号 只有卡注册到移动运营商上了,才能pppd拨号

    AT+CREG 命令解释:网络注册及状态查询; 命令格式:AT+CREG=MODE<CR> 命令返回:OK       如果输入 AT+CREG? <CR>则返回+CREG: <mode>, <stat> [ ,<lac>,<ci> ]       注: <mode>的值共有三个选项,分别是 0 or 1 or 2,  其中0代表关闭网络注册结果码, 1代表当网络注册状态改变时激活网络注册结果码, 2 代表激活网络注册结果码同时显示区域和小区信息.     <stat>的返回值共有三个,分别是 0, 1, 2,3,4,5 ,  其中 0 代表没有注册网络同时模块没有找到运营商, 1代注册到了本地网络, 2 代表找到运营商但没有注册网络, 3 代表注册被拒绝, 4 代表未知的数据, 5代表注册在漫游状态.    <lac>表示所属网络区域代码,十六进制格式显示,如: “ 279C”    <ci>表示所属网络的小区 ID,十六进制格式显示,如: “ 0EB2”                          注: <mode>的值设定为 0 或1 的话, <lac>,<ci>的返回值则不显示. 测试结果:A T+CREG=0 <CR> OK AT+CREG? <CR> +CREG: 0,1   AT+CREG=1 <CR> OK AT+CREG? <CR> +CREG: 1,1   AT+CREG=2 <CR> OK AT+CREG? <CR> +CREG: 2,1, “ 279C” , “ 0EB2”

    AT+CSQ +CSQ: 12,0 信号强度弱(31最强)

    AT+CGATT? +CGATT: 1      覆盖到GPRS网络,如果返回值是零,则可能是SIM卡内没有钱了或者是覆盖不到GPRS网络

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

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

    还有个错误,就是我们将sim卡插到gprs模块后,打开开关,还需要长按复位键,然后一个led灯会变成常闪状态,说明正常gprs模块工作,之前我的那个灯常闪了十秒左右就又熄灭了,后来看上一位使用这个模块的同学博客说是硬件原因,将5V-2A的电源线换成9V-2A的就可以保持常闪状态了。他的博客原文地址:http://www.cnblogs.com/xiaohexiansheng/p/5723994.html

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

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

    有一个问题没能解决,就是在执行pppd call gprs &指令后,再使用microcom -s 115200 /dev/ttyS1 命令,串口不能通信,输入AT后并没有得到回显OK,先用ps指令查看系统进程,用kill指令杀掉pppd call gprs &指令,再执行microcom时,AT又正常回显了,难道是不能同时执行这两个???暂不清楚

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

    先OK吧!!!

    转载请注明原文地址: https://ju.6miu.com/read-1295984.html
    最新回复(0)