1、单片机微控制器以其体积小、功耗低、使用方便等特点,广泛应用于各种工业、民用的嵌入式系统中;而随着互联网( Internet)的兴起与普及,使微控制器通过互联网传送数据就变得非常有意义。 目前使微控制器上网的解决方案一般有两种:一种是采用微控制器驱动网卡,通过以太网连接 Internet;另一种是使微控制器直接驱动调制解调器( MODEM )通过电话线向 ISP 拨号上网。这两种方案的缺点在于都要使用有线的网络,无法应用于在边远地区或可移动系统中。针对这一问题, 提出一种基于 GPRS 的单片机上网的解决方案, 即在单片机中实现 PPP协议,并通过驱动 GPRS模块经过 GPRS无线网连接到 I
2、nternet 实现上网。这种方案的优点在于: 覆盖面广,适用于广大偏远地区; 无线上网,适用于可移动目标;使用廉价的微控制器实现简单、成本低;安装简便,维护方便。GPRS技术及其特点GPRS(General Packet Radio Service )是通用分组无线业务的简称,是在GSM基础上发展起来的一种分组交换的数据承载和传输方式。 与原有的 GSM比较,GPRS在数据业务的承载和支持上具有非常明显的优势:通过多个 GSM时隙的复用,支持的数据传输速率更高,理论峰值达 115kb/s ;不同的网络用户共享同一组 GPRS信道,但只有当某一个用户需要发送或接收数据时才会占用信道资源。这样,
3、通过多用户的业务复用, 更有效地利用无线网络信道资源, 特别适合突发性、频繁的小流量数据传输,很好地适应数据业务的突发性特点;GPRS计费方式更加灵活,可以支持按数据流量来进行计费;与无线应用协议( WAP)技术不同, GPRS能够随时为用户提供透明的 IP 通道,可直接访问 Internet 中的所有站点和资源; 采用信道复用技术, 每一个 GPRS用户都能够实现永远在线; 另外,GPRS还能支持在进行数据传输的同时进行语音通话等等,而且相对于短消息等其它无线数据通信业务, GPRS的价格优势比较明显。 目前,我国移动推出的 GPRS 上网业务最高每千字节也只有 3 分钱,而且用户可以根据自
4、己的需要,以月租、包月等多种形式进一步降低 GPRS通信的费用。因此使用 GPRS实现远程数据的传送是非常经济实用的,特别是对于不易架设有线网络的边远地区和可移动装置。硬件连接和 GPRS模块设置通过 GPRS网进行数据传输一般需要使用 GPRS模块。目前, GPRS模块一般是指带有 GPRS功能的 GSM模块,可以利用 GPRS网进行数据通信。其中比较流行的有法国Wave公司的 WISMO系列和西门子公司的S 系列等等。WAVECOM的 WISMO模块接口简单、使用方便且功能非常强大其中 GPRS模块与单片机间是通过串行口进行通信的,通信速率最快可以达到 115 200b/s 。模块与控制器
5、间的通信协议是 AT 命令集,其中大部分命令是符合协议“ AT command set for GSM Mobile Equipment (ME) (GSM 07.07 version6.4.0 Release 1997) ”的,但也有一些是 Wavecom自己定义的 AT 命令。除了串口发送( TX)、串口接收( RX)之外,微控制器与 GPRS模块之间还有一些硬件握手信号,如 DTR、 CTS、DCD等。为了简化微控制器的控制, 硬件设计时不要使用全部的硬件握手信号,而只使用更重要的是, 它为我们提数据载波检测( Data Carrier Detect, DCD)和终端准备( Data T
6、erminal Ready, DTR)信号。DCD信号可以检测 GPRS模块是处于数据传送状态还是处于AT命令传送状态。DTR信号用来通知 GPRS模块传送工作已经结束。硬件连接完成后, 在进行 GPRS上网操作之前, 首先要对 GPRS模块进行一定的设置。主要的设置工作有: 设置通信波特率,可以使用 AT+IPR=38400命令,把波特率设为 38 400b/s 或其它合适的波特率,默认的通信速度为 9600b/s 。 设置接入网关,通过 AT+ CGD CONT=1, “IP ”, “CMNET”命令设置 GPRS 接入网关为移动梦网。设置移动终端的类别,通过 AT+CGCLASS=“B”
7、设置移动终端的类别为 B 类,即同时监控多种业务; 但只能运行一种业务, 即在同一时间只能使用 GPRS上网,或者使用 GSM的语音通信。 测试 GPRS服务是否开通, 使用 AT+CGACT=1,1命令激活 GPRS功能。如果返回OK,则 GPRS连接成功;如果返回 ERROR,则意味着 GPRS失败。这时应检查一下 SIM 卡的 GPRS业务是否已经开通, GPRS模块天线是否安装正确等问题。中国移动在 GPRS与 Internet网中间建立了许多相当于ISP 的网关支持节点( GGSN),以连接 GPRS网与外部的 Internet 网。 GPRS模块可以通过拨“*99*1# ”登录到
8、GGSN上动态分配到 Internet 网的 IP 地址。其间 GPRS模块与网关的通信要符合点对点协议(Point to Point Protocol, PPP),其中身份验证时用户名、密码都为空。使用PPP协议登录上之后,就可以通过GGSN接上Internet了。软件整体结构程序中的所有代码最好采用 C 语言编写,并采用分层的结构, 从底到上分别为:串口驱动层、 GPRS模块驱动层、 PPP协议层、 IP 协议层、 UDP协议层与应用层。上层函数的实现需要应用到底层函数, 而底层函数的任务就是为上层函数提供服务,最终完成应用层任务传送数据。驱动程序编写首先是串行口驱动层。它实现打开串口、关
9、闭串口、读串口数据、写串口数据等函数。然后,在这些串口函数的基础上编写 GPRS模块的驱动函数。单片机通过串行口控制 GPRS模块,进行拨号、设置等操作。控制的方法是采用 AT命令。在控制 GPRS模块拨打移动梦网 GGSN的登录号码“ *99*1# ”之后, GPRS模块就转入在线模式( On-Line )。此时单片机向串行口发送的所有数据都透明地传送给了 GGSN,同样 GGSN的回答也传回单片机的串行口。当数据传送完成后,单片机需要通知GPRS模块结束会话,并从在线模式转回普通的命令模式,这可以通过置高DTR线完成。同时,如果线路由于异常断开,CD线会回复到平常的低电平,所以处于在线模式
10、下也要不断检测 CD线是否处于高电平。根据这些操作,可以编写 GPRS驱动函数:初始化 GPRS模块函数、拨号函数、断开连接函数、检测是否处于在线状态函数。这些底层的驱动函数将会使上层协议的编写很方便,供了一个驱动抽象层。 当底层硬件做出改动的时候, 只需要对底层的驱动函数进行改动,而上层函数的代码不变。PPP协议的实现由于移动梦网的 GGSN与 GPRS模块通信时遵循 PPP协议,所以要在单片机中也实现一部分 PPP协议才能与之对话。 GPRS模块在拨号后首先要与 GPRS网关进行通信链路的协商, 即协商点到点的各种链路参数配置。 协商过程遵守 LCP(LinkControlProtocol
11、 )、PAP(Password AuthenticationProtocol )和 IPCP(InternetProtocol Control Protocol )等协议。其中 LCP协议用于建立、构造、测试链路连接; PAP协议用于处理密码验证部分; IPCP 协议用于设置网络协议环境, 并分配 IP 地址。协商机制用有限状态机的模型来实现。一旦协商完成,链路已经创建, IP 地址已经分配就可以按照协商的标准进行IP 报文的传输了。根据应用的不同, IP 报文中可以携带UDP报文,也可以是 TCP或 ICMP报文。本系统正是采用 UDP报文传送数据信息的。数据传输完成之后,单片机会向GGSN
12、发送 LCP的断开连接报文,以终止网络连接。PPP协议的帧结构(图略)。单片机的串口中断接收程序首先以包起始和结束符来判断是否有完整的PPP包,并对 PPP包的内容进行校验, 以确定数据包的完整性和正确性。然后,在主循环中进入PPP报文解析模块。登录 GGSN的过程系统的一个难点是单片机登陆 GPRS网关( GGSN)并与网关通过 LCP、 PAP、IPCP协议进行协商的过程。 LCP、PAP与 IPCP 协议的帧结构大同小异, 最常用的为请求( REQ)、同意( ACK)和拒绝( NAK)三种帧。单片机与 GGSN各为一方进行协商,任何一方都可以发送 REQ帧请求某方面的配制, 另一方觉得配
13、置不能接受会回应 NAK帧,如果可以则回应 ACK帧。为了节省资源, 我们只处理这三种数据帧,其它链路问题都由单片机在程序控制下自己重新拨号解决。协商过程大致描述如下:在拨号成功连接后, GGSN首先会返回一个 PAP REQ 数据帧。我们发送一个空 LCP REQ帧,以强迫进行协议协商阶段。随后, GGSN发送 LCP设置帧,我们拒绝所有的设置并请求验证模式。GGSN选择 CHAP或 PAP方式验证,我们只接受PAP方式。然后,进行PAP验证用户名和密码过程,在GPRS中用户名与密码都为空,如果成功,GGSN会返回 IPCP 报文分配动态 IP 地址。此时,就完成了与GGSN的协商过程。协商过程的状态转换如图4 所示。协商完成后进入 IP 数据报通信阶段。 此时,单片机向 GGSN发送的所有包含 IP 报文的 PPP报文都会被传送给 Internet 网中相应的 IP 地址;而远端所有向单片机 IP 地址发送的报文也都会经 GPRS网传送到单片机上,从而完成单片机与远程主机通过互联网的数据传输。