linux gprs模組 sim800a 晶片 ppp撥號上網
轉載地址:https://blog.csdn.net/allen19881119/article/details/72457541
除錯平臺 :TI335X 撥號模組:SIM800a
注意:硬體說明手冊上要求RX TX電壓是2.8V,並提供有分壓電路,如果電壓是3.3或者不對無法通訊正常。
一,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/messages),chat指令碼的位置可以位於/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又正常回顯了,難道是不能同時執行這兩個???暫不清楚
*******************************************
相關文章
- 發起GPRS撥號請求
- 在ARM+LINUX上使用pppd拔號上網(GPRS)流程Linux
- 撥號上網程式 (轉)
- Linux系統下使用pppd撥號上網Linux
- 在Linux下使用ISDN撥號上網 (轉)Linux
- Linux 使用pppd和ppp程式進行3G/4G撥號Linux
- VC的撥號上網程式 (轉)
- win10撥號上網如何設定_win10設定撥號上網的步驟Win10
- 在DELPHI程式中撥號上網 (轉)
- VC++實現撥號上網程式 (轉)C++
- pix506E撥號上網設定
- 電話撥號上網的基礎知識
- 用VC++實現上網撥號功能 (轉)C++
- 電腦開機自動撥號上網怎麼設定?電腦自動撥號上網的設定方法步驟
- 初步實現使用pppd連線GPRS上網
- win10開機怎麼自動撥號_win10怎麼自動撥號上網Win10
- GPRS模組SIM300的使用
- 路由器怎麼設定自動撥號上網?路由器
- FreeBSD撥號網路(轉)
- UNIX 系統上實現撥號(轉)
- 用LINUX做在一張軟盤上的撥號閘道器 (轉)Linux
- Linux下pppd撥號指令碼配置Linux指令碼
- win10系統下怎麼進行寬頻撥號上網Win10
- 騰達PR204寬頻連線撥號上網設定教程
- 安裝,配置rp-pppoe撥號軟體,使adsl成功上網(轉)
- 【路由器】華為AR1220-S 配置PPPOE撥號上網路由器
- 基於PPP協議的linux與Windows CE網路(轉)協議LinuxWindows
- android 撥號Android
- slackware-10.1 下 adsl 撥號上網的 iptables 防火牆設定(轉)防火牆
- HTML input tel 撥號域HTML
- 撥號vps,遠端連線撥號vps的方法及其步驟
- 如何設定路由器自動撥號連線上網路由器
- J2ME和WAP網頁實現撥號功能網頁
- ADSL 撥號代理的搭建
- win10怎麼撥號上網651 win10寬頻連線錯誤651解決方法Win10
- 一篇講透:模組典型上網業務的AT上網流程
- ubuntu kylin下寬頻撥號Ubuntu
- SCO Openserver 5.05撥號詳解 (轉)Server