http://blog.youkuaiyun.com/sikinzen/article/details/5455581
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元。
10 附录