GPRS心得
主要包括 GSM/GPRS模塊、AT指令、SIM卡接口、手機短信的pdu格式以及GPRS上網相關 ² BSS: Base Station Subsystem (無線)基站子系統
² EVB: Evaluable Board 評估板 ² HLR:HLR是GSM系統的中央數據庫,存儲着該HLR控制的所有存在的移動用戶的相關數據所有移動用戶重要的靜態數據和動態數據都存儲在HLR中,這包括移動用戶識別號碼、訪問能力、用戶類別和補充業務等數據,還存儲着爲MSC提供關於移動用戶實際漫遊所在的MSC區域有關動態信息數據這樣,任何入局呼叫可以即刻按選擇路徑送到被叫的用戶
² ICCID:又稱爲SIM卡號,爲SIM卡的唯一識別號碼,共有20位數字組成,用於標識每張SIM卡的唯一性
其編碼格式爲:AAAAA AMFSS YYGXX XXXXX在SIM卡背面印製(以下爲中移動編碼標準)
ü AAAAAA:國際移動運營商識別碼(IMSI):898600(中國移動),898601(中國聯通)
ü M:移動接入號的末位:4/5/6/7/8/9,分別對應於134/135/136/137/138/139
ü F:用戶號碼第四位,取值範圍爲0-9
ü SS:省代碼,詳細如下:
01北京/02天津/03河北/04山西/05內蒙/06遼寧/07吉林/08黑龍江/09上海/10江蘇/
11浙江/12安徽/13福建/14江西/15山東/16河南/17湖北/18湖南/19廣東/20廣西/
21海南/22四川/23重慶/24貴州/25雲南/26陝西/27甘肅/28青海/29寧夏/30新疆/
31西藏
ü YY:爲編制ICCID時的年號,取後兩位
ü G:SIM卡供應商代碼,分配如下:
0-雅斯拓/1-GEMPLUS/2-武漢天喻/3-江西捷德/4-珠海東信和平/5-大唐微電子通/
6-航天九州通/7-北京握奇/8-東方英卡/9-北京華虹/A-上海柯斯
ü 第14-19位:用戶識別號
ü 第20位:校驗號
如:89860 07031 01120 94320 是2001年生產的西藏移動的1370開頭的全球通號碼
² IMEI:國際移動設備識別碼(International Mobile Equipment Identity),由15位數字組成的"電子串號",它與每臺手機一一對應,而且該碼是全世界唯一的,即:用於標識每個模塊(如GSM模塊)的唯一性每一隻手機在組裝完成後都將被賦予一個全球唯一的一組號碼,這個號碼從生產到交付使用都將被製造生產的廠商所記錄 IMEI由15位數字組成,其組成爲:
1、前6位數(TAC)是"型號覈准號碼",一般代表機型
2、接着的2位數(FAC)是"最後裝配號",一般代表產地
3、之後的6位數(SNR)是"串號",一般代表生產順序號
4、最後1位數(SP)通常是"0",爲檢驗碼,目前暫備用 IMEI碼具有唯一性,貼在手機背面的標誌上,並且讀寫於手機內存中它也是該手機在廠家的"檔案"和"身份證號"
² IMSI:國際移動用戶識別碼(International Mobile Subscriber Identity), 國際上爲唯一識別一個移動用戶所分配的號碼,不等同於我們俗稱的SIM卡IMSI共有15位,其結構如下:MCC+MNC+MIN
ü MCC:Mobile Country Code,移動國家碼,共3位,中國爲460
ü MNC:Mobile Network Code,移動網絡碼,共2位,聯通CDMA系統使用03,一個典型的IMSI號碼爲460030912121001;
ü MIN共有10位,其結構如下爲09+M0M1M2M3+ABCD ,其中的M0M1M2M3和MDN號碼中的H0H1H2H3可存在對應關係,ABCD四位爲自由分配
² 個人密碼(PIN碼)和SIM卡解鎖密碼(PUK碼):PIN碼是SIM卡的個人密碼爲了防止其他人擅用SIM卡,在手機接通電源,將SIM卡插入手機時,屏幕上會顯示出要求用戶輸入4~8位的PIN碼(新購機的用戶,其PIN碼爲"1234"),用戶可以任意更改4~8位的密碼如果用戶連續三次輸入錯誤的密碼,手機將會顯示"Blocked"字樣,說明SIM卡已被鎖上按照技術要求,此時用戶應輸入SIM卡解鎖密碼(PUK碼);用戶輸入了正確的PUK碼後,SIM卡的鎖才能打開如果用戶輸入10次錯誤的PUK碼的話,用戶的SIM卡將會自動報廢
² KI密鑰:(Key identifier)是SIM卡與運營商之間加密數據傳遞的密鑰當終端開機後,GSM系統進行驗證時會同時使用Ki及IMSI,經過一連串系統安全認證訊息後產生隨機變量,並以A3算法進行加密運算與手機內存資料進行比對,當身份確認無誤後始可入網目前GSM使用的Ki長度是16 bytes,相當於128bits
² 創建密鑰:指SIM卡的製作廠家在生產SIM卡時定義的密鑰如果需要對SIM卡進行ICCID/IMSI等數據的寫入操作,首先必須知道創建密鑰 ² NSS: Network Sub-System (交換)網絡子系統
² SIM卡:Subscriber Identity Module,即用戶身份識別模塊
² SP運營商
SP其實就是增值服務提供商,說白了也就是提供某某包月服務,然後每月定期從你的手機話費里扣錢的這種服務的都屬於SP,舉個例子提供每月5元的彩玲業務的中國移動也算是個SP而運營商可能一般是指移動、聯通、網通等移動業務運營商但是你要是把SP和運營商連起來可能就單純的指代增值服務提供商了,當然其中也可能包括上述運營商SP的業務範圍五花八門,有前面提到的彩玲等等正規網絡運營商提供的服務和其他小供應商提供的包括聊天室等等包月的服務
基本上這些SP和運營商都受信息產業部的約束,當然也有一些其他的電信監管部門 Ø SIM卡開卡過程:
² 正常使用的SIM卡的2種數據
ü SIM卡自身存儲數據:
此部分數據包括ICCID/IMSI/KI/PIN/PUK等,這部分數據存儲在SIM卡上,有着特定的含義,例如IMSI/ICCID標誌着全球唯一的1個終端特徵,KI是移動終端標識登陸GSM網絡的通行證,PIN/PUK是SIM卡自我保護的武器
ü 系統數據庫存儲數據
此部分數據也可理解爲HLR存儲的數據
當SIM卡登陸GSM網絡後,平臺數據庫根據IMSI/ICCID數據匹配此終端對應的各種信息,如手機號碼/資費標準等,進行GSM網絡服務
² 預佔號碼的概念
指用戶在選擇好指定的手機號碼後,可以預佔,並在規定的時間內完成開戶動作,以防止開卡過程中與其他用戶發生衝突
² 已寫入IMSI/ICCID等信息的SIM卡的開卡過程
對於這種SIM卡,SIM卡自身存儲數據已經存在,不需要寫入,只需要與系統交互,輸入預佔號碼/ICCID/開卡申請人信息/SIM卡資費標準等系統數據庫存儲數據即可開戶
² 未寫入IMSI/ICCID等信息的SIM卡的開卡過程
這種SIM卡與寫入IMSI/ICCID等信息的SIM卡相比,需要在與系統交互登記系統數據庫存儲數據之前使用設備的SIM卡讀寫器進行SIM卡自身存儲數據的寫入操作
寫入後的操作與已寫入IMSI/ICCID等信息的SIM卡的開卡過程一致 GSM全名爲:Global System for Mobile Communications,中文爲全球移動通訊系統,是一種起源於歐洲的移動通信技術標準,屬於第二代移動通信技術
GPRS(General Packet Radio Service)是通用分組無線業務的簡稱GPRS是GSM Phase2.1規範實現的內容之一,能提供比現有GSM網9.6kbit/s更高的數據率GPRS採用與GSM
相同的頻段、頻帶寬度、突發結構、無線調製標準、跳頻規則以及相同的TDMA幀結構因此,在GSM系統的基礎上構建GPRS系統時,GSM系統中的絕大部分部件都不需要作硬件改動,只需作軟件升級GPRS屬於第2.5代的移動通信技術
GSM/GPRS 模塊指的就是支持這兩種通訊系統的模塊,比如simcom300等
GSM/GPRS開發主要參考GSM規範GSM系統規範是一個發展的規範,迄今共經歷了3個階段,分別被命名爲PHASE1、PHASE2、PHASE2+另外根據不同的階段對個版本進行更新,在不同的年代發佈又分成了R99(1999.12)、R4(2001.3)、R5(2002.3),這些版本主要爲UMTS系統使用現以R99版本的文檔爲例,在R99中共用13各系列文檔下面就針對這十三個功能進行說明:
01系列:GSM系統概述
02系列:GSM業務類型說明
03系列:GSM網絡說明
04系列:MS-BSS藉口和規範(Um接口的2層和3層內容)
05系列:無線路徑上的物理層(Um接口的1層內容)
06系列:語音編碼規範
07系列:移動臺的終端適配,如:GSM07.07(移動終端AT命令集)
08系列:BTS到MSC之間的接口(A和Abis接口)
09系列:網絡互連
10系列:項目進程和開放性方面
11系列:設備和型號批准規範
12系列:操作和維護
13系列:GSM系統附加要求
GSM模塊的操作可參考sim300 手冊爲例硬件時序主要有:上電、下電、重啓等 SIM卡接口可參考 GSM11.11文檔
SIM卡一般分爲兩種:
ID-1 SIM卡,俗稱"大卡",大小規格同信用卡;
插入式 SIM卡,俗稱"小卡",即我們通常手機用的sim卡 AT 指令就是我們用來操作GSM/GPRS 的一些命令,請參考GSM07.07 等文檔包括了:
通用指令:
呼叫控制指令:
短信相關指令:
網絡服務相關指令:
SIM卡相關指令:
GPRS相關指令: 呼叫與呼入相關的AT指令請參考GSM07.07 等文檔
撥出:ATD NO
來電:檢測GSM模塊的串口輸出信息,若爲"RING"則爲來電,並做一系列處理 短信相關的AT指令請參考GSM07.05 文檔,短信的技術實現請參考GSM03.40 文檔可以《SMS with the SMS PDU mode》文檔作爲入門
簡單的說,SMS有3種格式:block格式、text格式和pdu格式國內手機都支持 pdu格式所謂pdu格式,其實就是對我們收發的短信的一種封裝,具體封裝格式見上面的文檔知道了封裝格式後,我們可以通過AT指令(AT+CMGS)直接將任意短信息發送到指定手機,當然也可以發到飛信上(只是目的手機號不同而已) 底下以一個例子來說明如何通過手機GPRS上網 PC:Ubuntu9.04的操作系統,帶藍牙功能;
手機:帶藍牙功能,內爲MTK模塊 1. 通過bluetooth-applet 進行PC 與手機的藍牙配對
運行bluetooth-applet,並在其中設置藍牙可以被查找用手機來查找可用的藍牙設備,找到電腦的藍牙設備後綁定在一起或者反之
2. 運行hcitool scan以檢測藍牙設備的地址
sikinzen@sikinzen-desktop:~$ hcitool scan
Scanning ...
3F:44:17:2E:66:01 溫陵書生手機
3. 通過sdptool search SP 3F:44:17:2E:66:01 查找手機上的串口(Moderm)對應的通道號
sikinzen@sikinzen-desktop:ppp-2.4.5$ sdptool search SP 3F:44:17:2E:66:01
Inquiring ...
Failed to connect to SDP server on 00:17:4B:B4:75:48: Host is down
Searching for SP on 3F:44:17:2E:66:01 ...
Service Name: Serial Port0
Service RecHandle: 0x10002
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 10
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
4. 通過rfcomm 將手機上的串口藍牙連接與 /dev/rfcomm0 綁定
sudo rfcomm bind /dev/rfcomm0 3F:44:17:2E:66:01 10
5. 通過minicom 與手機模塊進行通訊
在minicom 中利用 CTRL+A Z 進入minicom設置選項,設置串口爲 /dev/rfcomm0,波特率爲115200,使能硬件流控
大功告成!
輸入 AT ,收到回覆: OK 3.1 錯誤事例
在超級終端(minicom)向GSM模塊發:at+cgdcont=1,"IP","CMNET", "",0,0
收:OK
發: AT+CGATT=1
收:OK
發: ATD*99***1#
收: CONNECT
然後收到一大堆數字 最後來了個 "NO CARRIER"
3.2 解釋
at+cgdcont=1,"IP","CMNET", "",0,0 是設置PDP上下文,具體見GSM07.07 文檔這裏要指出的是:"CMNET"是移動手機的GPRS接入點,相關說明見下一小節
AT+CGACT=1,1 是激活PDP,建立modem和GPRS網絡之間的連接
AT+CGDATA=1 是建立PC和modem之間的數據連接,這個連接中,modem相當於PPP server,PC機相當於PPP client
上述兩個連接可以同時建立,用一條命令
ATD*99***1# (其中99是代表向網絡請求IP數據服務,1#是PDP編號,可以是2#,3#等等)
如果PC端的應用程序沒有PPP協議棧,就不會響應PPP消息,連接就斷開了
所以,通過上面步驟的問題就在於minicom不"熟悉"PPP協議,不能回覆服務器的PPP數據,等超時一到,服務器自然斷開GPRS連接
所以,我們接下來就通過開源軟件PPP以及Linux內核帶的PPP協議來連接GPRS
3.3 正確事例
首先,下載PPP源碼(目前是 2.4.5版本),通過./configure make make install 後,安裝完成主要用到pppd、chat兩個應用程序;
其次,編寫相關的幾個腳本文件,主要是:
/etc/ppp/options:配置腳本
/etc/ppp/gprs-connect:pppd在連接GPRS時會調用該腳本
/etc/ppp/gprs-disconnect:斷開連接的腳本其實斷開連接只需執行 killall pppd
/etc/ppp/connect-errors:錯誤記錄本,GPRS連接中產生的錯誤信息會記錄到該文本中
sikinzen@sikinzen-desktop:ppp$ cat options
#debug
/dev/rfcomm0
115200
crtscts
#nodetach
nodeflate
noauth
connect /home/sikinzen/etc/ppp/gprs-connect
disconnect /home/sikinzen/etc/ppp/gprs-disconnect
:10.0.0.1
noipdefault
novj
novjccomp
nobsdcomp
defaultroute
sikinzen@sikinzen-desktop:ppp$ cat gprs-connect
#!/bin/sh
exec home/sikinzen/Codes/app/ppp-2.4.5/chat/chat \
TIMEOUT 5 \
ECHO ON \
ABORT ''\nBUSY\r'' \
ABORT ''\nERROR\r'' \
ABORT ''\nNO ANSWER\r'' \
ABORT ''\nNO CARRIER\r'' \
ABORT ''\nNO DIALTONE\r'' \
ABORT ''\nRINGING\r\n\r\nRINGING\r'' \
'''' ''\rAT'' \
TIMEOUT 6 \
SAY "Press CTRL-C to close the connection at any stage!" \
SAY "\ndefining PDP context...\n" \
OK ''AT+CGDCONT=1,"IP","CMNET","",0,0'' \
OK ''ATD*99***1#'' \
TIMEOUT 10 \ SAY "\nwaiting for connect...\n" \ CONNECT "" \ SAY "\nConnected." \ SAY "\nIf the following ppp negotiations fail,\n" \ SAY "try restarting the phone.\n" sikinzen@sikinzen-desktop:ppp$ cat gprs-disconnect #!/bin/sh exec /home/sikinzen/Codes/app/ppp-2.4.5/chat/chat -V -s -S \ ABORT "BUSY" \ ABORT "ERROR" \ ABORT "NO DIALTONE" \ SAY "\nSending break to the modem\n" \ "" "\K" \ "" "+++ATH" \ SAY "\nPDP context detached\n" 最後,執行pppd
sikinzen@sikinzen-desktop:pppd$./pppd
/home/sikinzen/etc/ppp/pap-secrets
sikinzen@sikinzen-desktop:pppd$ ifconfig
……
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.89.77.181 P-t-P:10.0.0.1 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:34 (34.0 B) TX bytes:60 (60.0 B)
這說明GPRS的通路已經建立,接下來就是socket編程了相應地,在手機上會發現一個GPRS的標誌 一般手機上有三個接入點:移動夢網GPRS、中國移動彩信、GPRS連接互聯網這三個接入點的配置分別是:
移動夢網GPRS:數據承載方式GPRS(即分組數據),接入點名稱cmwap,用戶名無,提示輸入密碼否,密碼無,鑑定普通,主頁http://wap.monternet.com,手機IP地址自動,主域名服務器0.0.0.0,次域名服務器0.0.0.0,代理服務器10.0.0.172,代理端口80;
中國移動彩信:數據承載方式GPRS(即分組數據),接入點名稱cmwap,用戶名無,提示輸入密碼否,密碼無,鑑定普通,主頁http://mmsc.monternet.com,手機IP地址自動,主域名服務器0.0.0.0,次域名服務器0.0.0.0,代理服務器10.0.0.172,代理端口80;
GPRS連接互聯網:數據承載方式GPRS(即分組數據),接入點名稱cmnet,用戶名無,提示輸入密碼否,密碼無,鑑定普通,主頁無,手機IP地址自動,主域名服務器0.0.0.0,次域名服務器0.0.0.0,代理服務器無,代理端口0; 在國際上,通常只有一種GPRS接入方式,但在中國的GPRS卻有CMNET和CMWAP兩種接入點,其實CMWAP和CMNET只是中國移動人爲劃分的兩個GPRS接入方式
前者是爲手機WAP上網而設立的,後者則主要是爲PC、筆記本電腦、PDA等利用GPRS上網服務它們在實現方式上並沒有任何差別,但因爲定位不同,所以和CMNET相比,CMWAP便有了部分限制,cmwap接入方式是中國移動特有的,中國移動對cmwap作了一定的限制,主要表現在cmwap接入時只能訪問GPRS網絡內的IP(10.*.*.*),而無法通過路由訪問Internet我們通過WAP網關協議或它提供的HTTP代理服務實現軟件的接入而CMNET接入的卻可以直接瀏覽和PC上網一樣的WWW網站,還有在線電視等,所以包月一般是在200元以上,甚至不提供包月服務,部分地區提供cmwap包月服務,包月只有2、30元
目錄... 3
1 概述... 4
2 縮略詞與相關概念... 4
3 GSM/GPRS. 6
4 SIM卡接口... 7
5 AT指令... 7
6 呼叫與呼入... 7
7 短信(SMS)及pdu格式... 7
8 STK.. 7
9 GPRS連接... 8
9.1 例子... 8
9.1.1 環境... 8
9.1.2 藍牙連接到GSM模塊,以及AT指令的暢通... 8
9.1.3 利用PPP協議連接上GPRS. 9
9.1.4 利用socket進行網絡通訊... 12
9.2 GPRS接入點... 12
9.2.1 手機上的3種接入點... 12
9.2.2 CMWAP與CMNET的區別在於:... 12
10 附錄... 13
11 聯繫方式... 13
1 概述
本文主要記錄在學習 GSM/GPRS 模塊時的一些心得。
主要包括 GSM/GPRS模塊 、AT指令、SIM卡接口、手機短信的pdu格式以及GPRS上網相關。
2 縮略詞與相關概念
² BSS: Base Station Subsystem (無線)基站子系統
² EVB: Evaluable Board 評估板
² HLR:HLR是GSM系統的中央數據庫,存儲着該HLR控制的所有存在的移動用戶的相關數據。所有移動用戶重要的靜態數據和動態數據都存儲在HLR中,這包括移動用戶識別號碼、訪問能力、用戶類別和補充業務等數據,還存儲着爲MSC提供關於移動用戶實際漫遊所在的MSC區域有關動態信息數據。這樣,任何入局呼叫可以即刻按選擇路徑送到被叫的用戶。
² ICCID:又稱爲SIM卡號,爲SIM卡的唯一識別號碼,共有20位數字組成,用於標識每張SIM卡的唯一性。
其編碼格式爲:AAAAA AMFSS YYGXX XXXXX。在SIM卡背面印製(以下爲中移動編碼標準)。
ü AAAAAA:國際移動運營商識別碼(IMSI):898600(中國移動),898601(中國聯通)。
ü M:移動接入號的末位:4/5/6/7/8/9,分別對應於134/135/136/137/138/139。
ü F:用戶號碼第四位,取值範圍爲0-9。
ü SS:省代碼,詳細如下:
01北京/02天津/03河北/04山西/05內蒙/06遼寧/07吉林/08黑龍江/09上海/10江蘇/
11浙江/12安徽/13福建/14江西/15山東/16河南/17湖北/18湖南/19廣東/20廣西/
21海南/22四川/23重慶/24貴州/25雲南/26陝西/27甘肅/28青海/29寧夏/30新疆/
31西藏
ü YY:爲編制ICCID時的年號,取後兩位。
ü G:SIM卡供應商代碼,分配如下:
0-雅斯拓/1-GEMPLUS/2-武漢天喻/3-江西捷德/4-珠海東信和平/5-大唐微電子通/
6-航天九州通/7-北京握奇/8-東方英卡/9-北京華虹/A-上海柯斯
ü 第14-19位:用戶識別號。
ü 第20位:校驗號。
如:89860 07031 01120 94320 是2001年生產的西藏移動的1370開頭的全球通號碼。
² IMEI:國際移動設備識別碼(International Mobile Equipment Identity),由15位數字組成的"電子串號",它與每臺手機一一對應,而且該碼是全世界唯一的,即:用於標識每個模塊(如GSM模塊)的唯一性。每一隻手機在組裝完成後都將被賦予一個全球唯一的一組號碼,這個號碼從生產到交付使用都將被製造生產的廠商所記錄。
IMEI由15位數字組成,其組成爲:
1、前6位數(TAC)是"型號覈准號碼",一般代表機型。
2、接着的2位數(FAC)是"最後裝配號",一般代表產地。
3、之後的6位數(SNR)是"串號",一般代表生產順序號。
4、最後1位數(SP)通常是"0",爲檢驗碼,目前暫備用。
IMEI碼具有唯一性,貼在手機背面的標誌上,並且讀寫於手機內存中。它也是該手機在廠家的"檔案"和"身份證號"。
² IMSI:國際移動用戶識別碼(International Mobile Subscriber Identity), 國際上爲唯一識別一個移動用戶所分配的號碼,不等同於我們俗稱的SIM卡。IMSI共有15位,其結構如下:MCC+MNC+MIN
ü MCC:Mobile Country Code,移動國家碼,共3位,中國爲460。
ü MNC:Mobile Network Code,移動網絡碼,共2位,聯通CDMA系統使用03,一個典型的IMSI號碼爲460030912121001;
ü MIN共有10位,其結構如下爲09+M0M1M2M3+ABCD ,其中的M0M1M2M3和MDN號碼中的H0H1H2H3可存在對應關係,ABCD四位爲自由分配。
² 個人密碼(PIN碼)和SIM卡解鎖密碼(PUK碼):PIN碼是SIM卡的個人密碼。爲了防止其他人擅用SIM卡,在手機接通電源,將SIM卡插入手機時,屏幕上會顯示出要求用戶輸入4~8位的PIN碼(新購機的用戶,其PIN碼爲"1234"),用戶可以任意更改4~8位的密碼。如果用戶連續三次輸入錯誤的密碼,手機將會顯示"Blocked"字樣,說明SIM卡已被鎖上。按照技術要求,此時用戶應輸入SIM卡解鎖密碼(PUK碼);用戶輸入了正確的PUK碼後,SIM卡的鎖才能打開。如果用戶輸入10次錯誤的PUK碼的話,用戶的SIM卡將會自動報廢。
² KI密鑰:(Key identifier)是SIM卡與運營商之間加密數據傳遞的密鑰。當終端開機後,GSM系統進行驗證時會同時使用Ki及IMSI,經過一連串系統安全認證訊息後產生隨機變量,並以A3算法進行加密運算與手機內存資料進行比對,當身份確認無誤後始可入網。目前GSM使用的Ki長度是16 bytes,相當於128bits。
² 創建密鑰:指SIM卡的製作廠家在生產SIM卡時定義的密鑰。如果需要對SIM卡進行ICCID/IMSI等數據的寫入操作,首先必須知道創建密鑰。
² NSS: Network Sub-System (交換)網絡子系統
² SIM卡:Subscriber Identity Module,即 用戶身份識別模塊
² SP運營商
SP其實就是增值服務提供商,說白了也就是提供某某包月服務,然後每月定期從你的手機話費里扣錢的這種服務的都屬於SP,舉個例子提供每月5元的彩玲業務的中國移動也算是個SP。而運營商可能一般是指移動、聯通、網通等移動業務運營商。但是你要是把SP和運營商連起來可能就單純的指代增值服務提供商了,當然其中也可能包括上述運營商。SP的業務範圍五花八門,有前面提到的彩玲等等正規網絡運營商提供的服務和其他小供應商提供的包括聊天室等等包月的服務。
基本上這些SP和運營商都受信息產業部的約束,當然也有一些其他的電信監管部門。
Ø SIM卡開卡過程:
² 正常使用的SIM卡的2種數據
ü SIM卡自身存儲數據:
此部分數據包括ICCID/IMSI/KI/PIN/PUK等,這部分數據存儲在SIM卡上,有着特定的含義,例如IMSI/ICCID標誌着全球唯一的1個終端特徵,KI是移動終端標識登陸GSM網絡的通行證,PIN/PUK是SIM卡自我保護的武器。
ü 系統數據庫存儲數據
此部分數據也可理解爲HLR存儲的數據。
當SIM卡登陸GSM網絡後,平臺數據庫根據IMSI/ICCID數據匹配此終端對應的各種信息,如手機號碼/資費標準等,進行GSM網絡服務。
² 預佔號碼的概念
指用戶在選擇好指定的手機號碼後,可以預佔,並在規定的時間內完成開戶動作,以防止開卡過程中與其他用戶發生衝突。
² 已寫入IMSI/ICCID等信息的SIM卡的開卡過程
對於這種SIM卡,SIM卡自身存儲數據已經存在,不需要寫入,只需要與系統交互,輸入預佔號碼/ICCID/開卡申請人信息/SIM卡資費標準等系統數據庫存儲數據即可開戶。
² 未寫入IMSI/ICCID等信息的SIM卡的開卡過程
這種SIM卡與寫入IMSI/ICCID等信息的SIM卡相比,需要在與系統交互登記系統數據庫存儲數據之前使用設備的SIM卡讀寫器進行SIM卡自身存儲數據的寫入操作。
寫入後的操作與已寫入IMSI/ICCID等信息的SIM卡的開卡過程一致。
3 GSM/GPRS
GSM全名爲:Global System for Mobile Communications,中文爲全球移動通訊系統,是一種起源於歐洲的移動通信技術標準,屬於第二代移動通信技術。
GPRS(General Packet Radio Service)是通用分組無線業務的簡稱。GPRS是GSM Phase2.1規範實現的內容之一,能提供比現有GSM網9.6kbit/s更高的數據率。GPRS採用與GSM
相同的頻段、頻帶寬度、突發結構、無線調製標準、跳頻規則以及相同的TDMA幀結構。因此,在GSM系統的基礎上構建GPRS系統時,GSM系統中的絕大部分部件都不需要作硬件改動,只需作軟件升級。GPRS屬於第2.5代的移動通信技術。
GSM/GPRS 模塊指的就是支持這兩種通訊系統的模塊,比如simcom300等。
GSM/GPRS開發主要參考GSM 規範。GSM系統規範是一個發展的規範,迄今共經歷了3個階段,分別被命名爲PHASE1、PHASE2、PHASE2+。另外根據不同的階段對個版本進行更新,在不同的年代發佈又分成了R99(1999.12)、R4(2001.3)、R5(2002.3),這些版本主要爲UMTS系統使用。現以R99版本的文檔爲例,在R99中共用13各系列文檔下面就針對這十三個功能進行說明:
01系列:GSM系統概述
02系列:GSM業務類型說明
03系列:GSM網絡說明
04系列:MS-BSS藉口和規範(Um接口的2層和3層內容)
05系列:無線路徑上的物理層(Um接口的1層內容)
06系列:語音編碼規範
07系列:移動臺的終端適配,如:GSM07.07(移動終端AT命令集)
08系列:BTS到MSC之間的接口(A和Abis接口)
09系列:網絡互連
10系列:項目進程和開放性方面
11系列:設備和型號批准規範
12系列:操作和維護
13系列:GSM系統附加要求
GSM模塊的操作可參考sim300 手冊爲例。硬件時序主要有:上電、下電、重啓等。
4 SIM卡接口
SIM卡接口可參考 GSM11.11文檔。
SIM卡一般分爲 兩種:
ID-1 SIM卡,俗稱“大卡”,大小規格同 信用卡;
插入式 SIM卡,俗稱“小卡”,即我們通常手機用的sim卡。
5 AT指令
AT 指令就是我們用來操作GSM/GPRS 的一些命令,請參考 GSM07.07 等文檔。包括了:
通用指令:
呼叫控制指令:
短信相關指令:
網絡服務相關指令:
SIM卡相關指令:
GPRS相關指令:
6 呼叫與呼入
呼叫與呼入相關的AT指令請參考GSM07.07 等文檔。
撥出:ATD NO
來電:檢測GSM模塊的串口輸出信息,若爲“RING”則爲來電,並做一系列處理。
7 短信(SMS)及pdu格式
短信相關的AT指令請參考 GSM07.05 文檔,短信的技術實現請參考 GSM03.40 文檔。可以《SMS with the SMS PDU mode》文檔作爲入門。
簡單的說,SMS有3種格式:block格式、text格式和pdu格式。國內手機都支持 pdu格式。所謂pdu格式,其實就是對我們收發的短信的一種封裝,具體封裝格式見上面的文檔。知道了封裝格式後,我們可以通過AT指令 (AT+CMGS)直接將任意短信息發送到指定手機,當然也可以發到飛信上(只是目的手機號不同而已)。
8 STK
9 GPRS連接
9.1 例子
底下以一個例子來說明如何通過手機GPRS上網。
9.1.1 環境
PC:Ubuntu9.04的操作系統,帶藍牙功能;
手機:帶藍牙功能,內爲MTK模塊。
9.1.2 藍牙連接到GSM模塊,以及AT指令的暢通
1. 通過bluetooth-applet 進行PC 與 手機的藍牙配對
運行bluetooth-applet,並在其中設置藍牙可以被查找。用手機來查找可用的藍牙設備,找到電腦的藍牙設備後綁定在一起。或者反之。
2. 運行hcitool scan 以檢測藍牙設備的地址
sikinzen@sikinzen-desktop:~$ hcitool scan
Scanning ...
3F:44:17:2E:66:01 溫陵書生手機
3. 通過 sdptool search SP 3F:44:17:2E:66:01 查找手機上的串口(Moderm)對應的通道號
sikinzen@sikinzen-desktop:ppp-2.4.5$ sdptool search SP 3F:44:17:2E:66:01
Inquiring ...
Failed to connect to SDP server on 00:17:4B:B4:75:48: Host is down
Searching for SP on 3F:44:17:2E:66:01 ...
Service Name: Serial Port0
Service RecHandle: 0x10002
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 10
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
4. 通過rfcomm 將 手機上的串口藍牙連接 與 /dev/rfcomm0 綁定
sudo rfcomm bind /dev/rfcomm0 3F:44:17:2E:66:01 10
5. 通過minicom 與手機模塊進行通訊
在minicom 中利用 CTRL+A Z 進入minicom設置選項,設置串口爲 /dev/rfcomm0,波特率爲115200,使能硬件流控。
大功告成!
輸入 AT , 收到回覆: OK
9.1.3 利用PPP協議連接上GPRS
3.1 錯誤事例
在超級終端(minicom)向GSM模塊 發:at+cgdcont=1,"IP","CMNET", "",0,0
收:OK
發: AT+CGATT=1
收:OK
發: ATD*99***1#
收: CONNECT
然後收到一大堆數字。 最後來了個 “NO CARRIER”
3.2 解釋
at+cgdcont=1,"IP","CMNET", "",0,0 是設置PDP上下文,具體見 GSM07.07 文檔。這裏要指出的是:“CMNET”是移動手機的GPRS接入點,相關說明見下一小節。
AT+CGACT=1,1 是激活PDP,建立modem和GPRS網絡之間的連接
AT+CGDATA=1 是建立PC和modem之間的數據連接,這個連接中,modem相當於PPP server,PC機相當於PPP client。
上述兩個連接可以同時建立,用一條命令
ATD*99***1# (其中99是代表向網絡請求IP數據服務,1#是PDP編號,可以是2#,3#等等)
如果PC端的應用程序沒有PPP協議棧,就不會響應PPP消息,連接就斷開了。
所以,通過上面步驟的問題就在於minicom不“熟悉”PPP協議,不能回覆服務器的PPP數據,等超時一到,服務器自然斷開GPRS連接。
所以,我們接下來就通過開源軟件PPP以及Linux內核帶的PPP協議來連接GPRS。
3.3 正確事例
首先,下載PPP源碼(目前是 2.4.5版本),通過./configure make make install 後,安裝完成。主要用到pppd、chat兩個應用程序;
其次,編寫相關的幾個腳本文件,主要是:
/etc/ppp/options:配置腳本
/etc/ppp/gprs-connect:pppd在連接GPRS時會調用該腳本
/etc/ppp/gprs-disconnect:斷開連接的腳本。其實斷開連接只需 執行 killall pppd
/etc/ppp/connect-errors:錯誤記錄本,GPRS連接中產生的錯誤信息會記錄到該文本中
sikinzen@sikinzen-desktop:ppp$ cat options
#debug
/dev/rfcomm0
115200
crtscts
#nodetach
nodeflate
noauth
connect /home/sikinzen/etc/ppp/gprs-connect
disconnect /home/sikinzen/etc/ppp/gprs-disconnect
:10.0.0.1
noipdefault
novj
novjccomp
nobsdcomp
defaultroute
sikinzen@sikinzen-desktop:ppp$ cat gprs-connect
#!/bin/sh
exec home/sikinzen/Codes/app/ppp-2.4.5/chat/chat \
TIMEOUT 5 \
ECHO ON \
ABORT '\nBUSY\r' \
ABORT '\nERROR\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nNO CARRIER\r' \
ABORT '\nNO DIALTONE\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' '\rAT' \
TIMEOUT 6 \
SAY "Press CTRL-C to close the connection at any stage!" \
SAY "\ndefining PDP context...\n" \
OK 'AT+CGDCONT=1,"IP","CMNET","",0,0' \
OK 'ATD*99***1#' \
TIMEOUT 10 \
SAY "\nwaiting for connect...\n" \
CONNECT "" \
SAY "\nConnected." \
SAY "\nIf the following ppp negotiations fail,\n" \
SAY "try restarting the phone.\n"
sikinzen@sikinzen-desktop:ppp$ cat gprs-disconnect
#!/bin/sh
exec /home/sikinzen/Codes/app/ppp-2.4.5/chat/chat -V -s -S \
ABORT "BUSY" \
ABORT "ERROR" \
ABORT "NO DIALTONE" \
SAY "\nSending break to the modem\n" \
"" "\K" \
"" "+++ATH" \
SAY "\nPDP context detached\n"
最後,執行pppd
sikinzen@sikinzen-desktop:pppd$./pppd
/home/sikinzen/etc/ppp/pap-secrets
sikinzen@sikinzen-desktop:pppd$ ifconfig
……
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.89.77.181 P-t-P:10.0.0.1 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:34 (34.0 B) TX bytes:60 (60.0 B)
這說明GPRS的通路已經建立,接下來就是socket編程了。相應地,在手機上會發現一個GPRS的標誌。
9.1.4 利用socket進行網絡通訊
9.2 GPRS接入點
9.2.1 手機上的3種接入點
一般手機上有三個接入點:移動夢網GPRS、中國移動彩信、GPRS連接互聯網。這三個接入點的配置分別是:
移動夢網GPRS:數據承載方式GPRS(即分組數據),接入點名稱cmwap,用戶名無,提示輸入密碼否,密碼無,鑑定普通,主頁http://wap.monternet.com,手機IP地址自動,主域名服務器0.0.0.0,次域名服務器0.0.0.0,代理服務器10.0.0.172,代理端口80;
中國移動彩信:數據承載方式GPRS(即分組數據),接入點名稱cmwap,用戶名無,提示輸入密碼否,密碼無,鑑定普通,主頁http://mmsc.monternet.com,手機IP地址自動,主域名服務器0.0.0.0,次域名服務器0.0.0.0,代理服務器10.0.0.172,代理端口80;
GPRS連接互聯網:數據承載方式GPRS(即分組數據),接入點名稱cmnet,用戶名無,提示輸入密碼否,密碼無,鑑定普通,主頁無,手機IP地址自動,主域名服務器0.0.0.0,次域名服務器0.0.0.0,代理服務器無,代理端口0;
9.2.2 CMWAP與CMNET的區別在於:
在國際上,通常只有一種GPRS接入方式,但在中國的GPRS卻有CMNET和CMWAP兩種接入點,其實CMWAP和CMNET只是中國移動人爲劃分的兩個GPRS接入方式。
前者是爲手機WAP上網而設立的,後者則主要是爲PC、筆記本電腦、PDA等利用GPRS上網服務。它們在實現方式上並沒有任何差別,但因爲定位不同,所以和CMNET相比,CMWAP便有了部分限制,cmwap接入方式是中國移動特有的,中國移動對cmwap作了一定的限制,主要表現在cmwap接入時只能訪問GPRS網絡內的IP(10.*.*.*),而無法通過路由訪問Internet。我們通過WAP網關協議或它提供的HTTP代理服務實現軟件的接入。而CMNET接入的卻可以直接瀏覽和PC上網一樣的WWW網站,還有在線電視等,所以包月一般是在200元以上,甚至不提供包月服務,部分地區提供cmwap包月服務,包月只有2、30元。