|
摘要 介绍一种基于GPRS网络的数据传输单元(DTU)的设计实现方案,分析DTU的硬件组成及软件设计与实现,论述软件系统的层次结构和实现难点。重点介绍协议的简化方法,以适应微控制器(单片机)有限的硬件资源。 关键词 GPRS 数据传输单元 UDP协议 PPP协议 微控制器 GPRS模块 GPRS网具有覆盖范围广、数据传输速度快、通信质量高、永远在线和按流量计费等优点,且其本身就是一个分组型数据网,支持TCP/IP协议,无需经过PSTN等网络的转接,可直接与Internet网互通。GPRS业务在无线上网、环境监测、交通监控、移动办公等行业中具有无可比拟的性价比优势。 为了满足GPRS DTU(数据传输单元)的低成本、小型化和移动灵活等要求,现在广泛采用单片机对GPRS模块进行控制,并且引入嵌入式系统实现TCP/IP协议栈。目前主要的困难在于:运行TCP/IP协议对计算机存储器、运算速度等要求较高,会占用大量的系统资源;而嵌入式系统大多采用8位单片机,硬件资源非常有限,支持完整的TCP/IP协议非常困难。本文采用简化的设计方法:精简PPP协商过程、在传输层使用UDP协议,使基于8051嵌入式系统的GPRS DTU能够在网络中进行透明的数据传输;同时改善系统的性能,提高系统的可靠性,增强系统的可扩展性和产品开发的可延续性。 1GPRS DTU的硬件组成 如图1所示,GPRS DTU的硬件电路主要由微控制器和GPRS模块两部分组成。微控制器的UART0(串口0)接用户设备,UART1(串口1)接GPRS模块。在本电路中使用一个PMOS管控制GPRS模块的电源。当GPRS模块出现异常(如死机)时,微控制器通过控制PMOS管对GPRS模块重新上电,使模块恢复正常。 2系统的软件设计与实现 2.1GPRS DTU工作流程 如图2所示,GPRS DTU上电或复位后,在前3 s内等待配置命令。如在3 s内收到配置命令,则进入配置状态;否则,读取片内用户Flash中保存的配置信息。接着,DTU开始进行拨号和PPP协商过程。当PPP协商成功后,系统进入发送、接收用户数据和定时向数据中心注册的循环状态。 2.2GPRS DTU使用的协议 GPRS DTU实现的协议栈是TCP/IP Over PPP,具体的网络协议有UDP协议、IP协议、PPP协议。DTU发送数据时,按应用层(用户数据)→传输层(UDP)→网络层(IP)→数据链路层(PPP)→物理层(串口)顺序进行数据封装;而在接收数据时,以相反的顺序进行解封装,由此实现对用户数据的透明传送。图1GPRS DTU硬件组成图2GPRS DTU工作流程2.3GPRS DTU所用协议的实现 (1) UDP协议的实现 为了使程序尽量简化,选用IP承载UDP协议发送数据。在程序中实现IP与UDP报文的数据结构,向指定的数据中心IP地址发送UDP报文较易实现。但应注意,在应用层需要用户实现自己的协议,因为GPRS DTU传输数据时为透明传送。例如对于远程读表系统,要规定仪表的数据传输协议;根据协议把相应的仪表数据放入UDP报文中,传给数据中心(或主机);同时,数据中心也可以按照协议向GPRS DTU发送UDP报文。可以利用UDP报文的端口号,把不同的报文发送到不同的端口中,以方便DTU解析。 图3PPP数据帧的结构及PPP协议标志由于UDP协议不提供可靠性传输,在系统设计时可以通过DTU与数据中心在传输数据时用“发送数据—确认”的应答机制来增加系统传输数据的可靠性。但这种机制会额外增加系统运行的费用。UDP是一个简单的面向数据报的传输层协议。关于UDP协议的详尽描述可以参阅RFC 768 \[Postel 1980\]文档。 (2) IP协议的实现 IP是TCP/IP协议族中最为核心的协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。由于DTU硬件资源的有限性,本系统未实现IP数据报的分片与重组。关于IP协议的详尽描述可以参阅RFC 791\[Postel 1981a\]文档。 (3) PPP数据结构 PPP数据帧的结构及协议标志如图3所示。 每个PPP数据帧的开始和结束都有一个0x7E的数据标志。在开始标志后,紧跟2个HDLC常量:地址常量0xFF和控制常量0x03。协议域长度通常为2字节,表示信息域里包含的是哪种协议以及它的处理信息。随后是代码(Code)、标识符(ID)和长度域(Length)。事实上,它们都是有效数据域(Payload)的一部分。信息域长度最多为1 500字节。代码部分用来指示LCP、PAP、IPCP或者CHAP协议数据包中的某种类型。通常情况下,用来表示IP自寻址信息数据包的标识是0x45。ID对于每一帧来说都是唯一的,所有协议间的商谈和响应都通过ID联系在一起。只有当PPP协议帧被压缩成IP寻址信息包时例外。这个时候,ID表示的是一种服务类型。有效数据部分是可变的,并能随着请求和响应的变化作相应的改变。在IP自寻址情况下,IP数据包的大小与PPP协议帧的大小是兼容的,有效数据包含有关协议的商谈和数据包的保持。然后是一个长度为2字节循环冗余检验码,以检测数据帧中的错误。由于标志字符的值是0x7E,因此当该字符出现在信息字段中时, PPP需要对它进行转义。具体实现过程如下: ① 当遇到字符0x7E时,需连续传送0x7D和0x5E 2个字符,以实现标志字符的转义。 ② 当遇到转义字符0x7D时,需连续传送0x7D和0x5D 两个字符,以实现转义字符的转义。 ③ 默认情况下,如果字符的值小于0x20(例如ASCII控制字符),一般都要进行转义。例如,遇到字符0x01时,需连续传送0x7D和0x21两个字符(这时,第6个比特取补码后变为1,而前面两种情况均把它变为0)。这样做是为了防止它们出现在双方主机的串行接口驱动程序或调制解调器中。因为它们有时会把这些控制字符解释成特殊的含义。另一种可能是用链路控制协议来指定是否需要对这32个字符中的某些值进行转义。默认情况下是对所有的32个字符都进行转义。关于PPP协议的详尽描述可以参阅RFC1661文档。 (4) PPP协议的实现 PPP(Point to Point Protocol)是数据链路层协议中的一种,是目前应用最广的一种广域网协议。PPP协议假定两个对等实体间有一个双向全双工的连接,而且数据包按顺序投递,这正好符合串行口的通信方式。PPP协议不需要差错控制、排序和流量控制,易于实现,而且支持对多种高层协议(如IP、TCP、UDP)的复用。所以使用PPP拨号上网是微控制器实现Internet连接的最佳选择。大部分的ISP也正是通过PPP协议提供网络服务的。 串口中断程序以帧起始和结束符来判断是否有完整的PPP帧,并对PPP帧的内容进行校验,以确定帧的完整性和正确性,然后在主循环中进入PPP数据帧解析模块。在拨号后初次与ISP通信阶段,系统首先要与ISP进行通信链路的协商,即协商点到点的各种链路参数配置。协商过程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等协议。其中LCP协议用于建立、构造、测试链路连接;PAP协议用于处理密码验证部分;IPCP协议用于设置网络协议环境,并分配IP地址。协商机制用有限状态机模型来实现。一旦协商完成,链路已经创建,IP地址已经分配就可以按照协商的标准进行IP报文的传输了。根据应用的不同,IP报文中可以携带UDP报文也可以是TCP或ICMP报文。本系统正是采用UDP报文传送数据信息的。 图4PPP协商的有限状态机系统的难点之一,是微控制器登陆ISP并与ISP的协商过程,其中需要应用到LCP、PAP与IPCP协议。LCP、PAP与IPCP协议的帧结构大同小异,最常用的是请求(REQ)、同意(ACK)和拒绝(NAK)三种帧。微控制器与ISP协商时,任何一方都可以发送REQ帧请求某方面的配置;另一方如果觉得配置不能接受会回应NAK帧,如果可以接受则回应ACK帧。为了节省资源,这里只处理这三种数据帧,其它链路问题都由微控制器在程序控制下自己重新拨号解决。各种配置选项协商好以后,DTU才可以成功登陆GPRS网络。其成功登陆标志是DTU获得ISP分配的IP地址。 在拨号成功连接后,ISP首先返回一个PAPREQ数据帧,微控制器发送一个空LCP REQ帧,以强迫ISP进行协议协商阶段。随后,ISP发送LCP设置帧,微控制器拒绝所有的设置并请求验证模式。ISP选择CHAP或PAP方式验证,这里只接受PAP方式。然后进行PAP验证用户名和密码过程,如果成功,ISP会返回IPCP报文设置IP地址。此时就完成了与ISP的协商过程,可以通过向ISP发送IP报文的方式连接互联网传送数据了。PPP协商的有限状态机如图4所示。 下面的代码为PPP协商有限状态机的实现: void PPPEntry (void) { if (PPPStatus & IsFrame) { switch (*(WORD *)(&InBuffer \[2\])) { case LCP_PACKET: 处理LCP选项; break; case PAP_PACKET: if (InBuffer \[4\] == 0x02) { } break; case IPCP_PACKET: // IPCP Handler 处理IPCP选项; break; case IP_DATAGRAM: // IP Data Handler if (!IPCompare ((BYTE*)&InBuffer \[20\])) { } else switch (InBuffer \[13\]) { case UDP: 处理UDP数据包; break; case TCP: break; case ICMP: 处理ICMP数据报; break; default: break; } break; default: 拒绝其他PPP协议; break; } } } 2.4GPRS DTU参数配置的实现 每个DTU有不同的ID(标识)等配置参数,DTU所有的配置参数存储在C8051F022的内部128字节的Flash中。本系统采用上位机(PC)软件,将用户配置参数通过串口(CONSOLE口)传递给DTU,为提高上位机和DTU串行通信的可靠性,通信双方对配置参数进行CRC16校验。实践表明,这种配置机制可靠,并且便于批量、快速配置DTU。 结语 为实现GPRS DTU在GPRS网络上透明传输数据的功能,并且充分利用8位单片机有限的软硬件资源,提出了一种基于低成本嵌入式系统简化的GPRS DTU设计方法和可行的实现方案。经过优化,GPRS DTU内嵌的软件代码可以精简到20 KB左右(含GPRS和短消息两种工作方式),共使用3 KB左右的数据存储器。实践证明,根据本方案实现的DTU具有稳定、高效、易配置、运行费用低等优点,可以广泛应用于需要远程传送数据的系统中,特别适合远程抄表、远程监控等领域。 参考文献 1Simpson W. The PointtoPoint Protocol (PPP). RFC 1331, Daydreamer, 1992-05 2Reynolds J, Postel J. Assigned Numbers. RFC 1340, USC/Information Sciences Institute, 1992-07 3http://www.mcuweb.com/article/tcpip.htm 4徐爱钧,彭秀华.单片机高级语言C51应用程序设计\[M\].北京:电子工业出版社,2000 高世臣,教授;曾卫华,硕士研究生:主要研究方向为算法分析与设计。魏秋菊:助教,主要研究方向为计算机应用。
|