if (delayCount) { return GPRSGetch (); // 返回回答的数字 }
return -1; // 没有返回,错误 }
void GPRSHangup (void) { DTR_ON; // 置高DTR Delay (40); // 保持一定时间 DTR_OFF; // 完成连接的断开 }
这些底层的驱动函数将会使上层协议的编写很方便,更重要的是,它为我们提供了一个驱动抽象层。当底层硬件做出改动的时候,只需要对底层的驱动函数进行改动,而上层函数的代码不变。
4 PPP协议的实现
由于移动梦网的GGSN与GPRS模块通信时遵循PPP协议,所以要在微控制器中也实现一部分PPP协议才能与之对话。GPRS模块在拨号后首先要与GPRS网关进行通信链路的协商,即协商点到点的各种链路参数配置。协商过程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等协议。其中LCP协议用于建立、构造、测试链路连接;PAP协议用于处理密码验证部分;IPCP协议用于设置网络协议环境,并分配 IP地址。协商机制用有限状态机的模型来实现。一旦协商完成,链路已经创建,IP地址已经分配就可以按照协商的标准进行IP报文的传输了。根据应用的不同,IP报文中可以携带UDP报文,也可以是TCP或ICMP报文。本系统正是采用UDP报文传送数据信息的。数据传输完成之后,微控制器会向GGSN发送LCP的断开连接报文,以终止网络连接。
PPP协议的帧结构如图3(左)所示。微控制器的串口中断接收程序首先以包起始和结束符来判断是否有完整的PPP包,并对PPP包的内容进行校验,以确定数据包的完整性和正确性。然后,在主循环中进入PPP报文解析模块,解析过程如图3(右)所示。
5 登录GGSN的过程
系统的一个难点是微控制器登陆GPRS网关(GGSN)并与网关通过LCP、PAP、IPCP协议进行协商的过程。LCP、PAP与IPCP协议的帧结构大同小异,最常用的为请求(REQ)、同意(ACK)和拒绝(NAK)三种帧。微控制器与GGSN各为一方进行协商,任何一方都可以发送REQ 帧请求某方面的配制,另一方觉得配置不能接受会回应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网传送到微控制器上,从而完成微控制器与远程主机通过互联网的数据传输。
6 小 结
经过优化,本系统的软件代码可以精简到6K字节左右,共使用不到300字节的RAM。并且由于程序使用C语言编写,稍加改动就可以在各种系列的微控制器上实现。微控制器通过GPRS上网的技术可以广泛应用于需要远程传送数据的系统中,特别适合于远程抄表、远程监控等领域。我们目前正把这项技术应用于车辆监控调度系统,在试验阶段取得了比较好的效果。
-- 原文链接: http://www.ecnchina.com/Article_Show.asp?ArticleID=2708
共3页: 上一页 [1] [2] 3 下一页
|