嵌入式GPS由GPRS接入Internet的实现

引言
随着全球定位系统的不断改进,软、硬件的不断完善,应用领域正在不断地开拓,目前已遍及国民经济各种部门,并开始逐步深入人们的日常生活。随着卫星导航定位设备的小型化甚至芯片化,嵌入式gps产品越来越广泛的应用到人们生活的各个领域,而嵌入式产品的网络化就成为当今研究的一个方向。
1 系统原理及结构
gps接收机数据有数据量小、定时或非定时及实时发送等特点,一方面需实现数据的上传,另一方面也需下达各种传输、控制指令,即双向的数据、指令传输。传统的数据传输主要采用gsm的方法来解决,这种传输方式存在覆盖范围、实时性等问题。目前中国移动主推的gprs通用分组无线业务是在现有gsm系统上发展起来的一种承载业务,目的是为gsm用户提供分组形式的数据业务。gprs抛弃了传统的独占电路交换模式,采用分组交换技术,每个用户可同时占用多个无线信道,同一无线信道又可以由多个用户共享,有效地利用了信道资源,带宽最高可达171.2kb/s[1]。目前中国移动的gprs覆盖范围在中心城市几乎达到了100%,在边远地区也达到了80%以上,实际应用带宽大约在20-40kb/s,特别适合于gps数据通信的需求,可以完全取代过去传统的有线modem、x.25、短信等通信方式[2]。
gps接收机应用gprs数据传输方式及网络结构如图1所示:
通过gprs服务,gps设备可采用互联网internet的标准方式与在互联网上的服务器交换数据。gprs的基础是以ip包的形式进行数据的传输,gprs无线终端接入gprs 网络的方法与普通有线modem 类似, 都采用建立ppp(point-to-point protocol) 连接方式。ppp协议是一种被广泛采用的串行点对点链路上传输数据报的方法,包括lcp、pap、ipcp、ncp等。gprs modem通过ppp协议获得动态分配的ip地址。连接建立后,在ppp协议的基础上通过数据传输协议,该系统采用tcp实现与互联网上其它计算机的数据通讯。
2 系统硬件组成
本系统采用带有实时操作系统的gps接收机内嵌通信协议的方案,在多任务的系统中增加一个comm.c通信任务,在该任务中实现简化的tcp/ip协议栈、ppp协议及无线gprs modem的命令控制。带实时操作系统的gps接收机中包括16位vs_dsp处理器,8mflash,96kram,16krom,两个串口uart0 和uart1。其中uart0用于程序的烧写与输出数据的观测;uart1用于与无线gprs modem连接其中uart0口在设计阶段主要是用于连接pc机的串口进行程序的编写及烧制,作为终端机它可以作为spi控制。系统硬件组成如图2所示。
3 系统软件设计与实现
gps多任务实时操作系统中本身不带有通信功能,而且为了经济的考虑,本设计采用了不带协议栈的无线gprs modem,所以在软件设计时,采用在原来任务基础上增加一个通信任务,主要完成微型tcp/ip协议栈、ppp协议及无线gprs modem的命令控制。
3.1 微型tcp/ip协议栈的移植
如果在嵌入式系统中实现一个完整的tcp/ip协议栈,其难度可能会超出应用本身,所以本系统选用了一种简易的免费tcp/ip协议栈uip0.6作为设计的核心。uip0.6是瑞典计算机科学研究所adam dunkels开发的源码公开的免费简易tcp/ip协议栈[3,4]。uip实现了tcp/ip协议集的四个基本协议:arp地址解析,ip网际互联协议,icmp网络控制报文协议和tcp传输控制协议;它具备极少的代码占用量和ram资源要求,尤其适用于8/16位单片机;支持多个主动连接和被动连接并发,支持连接的动态分配和释放;拥有简易的应用层接口和设备驱动层接口。由于本系统采用gprs网络方式,所以其四个协议集中只保留ip网际互连协议和tcp传输控制协议,并其进行一定的修改。uip协议栈中实现ip网际互联协议时对原协议进行了极大的简化,它没有实现分片和重组。本设计中由于发送接收数据量较小,所以不必进行分片与重组,即对ip网际互联协议的实现部分不作修改。为了减少存储器的使用,uip里的tcp没有实现发送和接收数据的调整窗口。输入的tcp段不会通过uip缓存,而是由应用程序处理。输出数据时,uip不能在每个连接有超过一个未解决的tcp段。在本系统的设计中,为了避免数据丢失,应用中设计一个大的缓冲区send_recbuf[]接收应用要发送的数据,一个较小的发送缓冲区send_buf[]。对uipopt.h中的部分内容进行修改,删去uip_ipaddr部分,应用文件头文件改为本系统中的应用文件的头文件#include “appcomm.h”,做为客户端本系统中定义#define uip_active_open 1。由于数据链路层采用ppp协议,所以uip_buf[]中ip头的偏移量定义为:
#define uipllhlen 0
3.1.1 uip与ppp的接口
当ppp协议从网络接收到一个ip包时,把它放入到uip_buf中,系统调用uip_input()函数。此函数将处理这个包,在需要时会调用应用程序。当uip_input()返回时,uip_buf中放入了一个输出包,包的大小由全局变量uip_len约束,若uip_len为0,则说明没有包要发送,否则,ppp将此包加上ppp包头发送到网上。
3.1.2 uip与应用的接口
uip使用基于事件的编程模式,在响应一定的事件时,应用被当作uip调用的一个c函数uip_appcall来实现,故在应用中要设置#define uip_appcall appcomm,在uip中的标志uip_flags用于uip与应用之间的联系,在接收到数据、数据发送成功、建立了新的连接或数据被重发时,uip调用应用,应用根据uip_flags标志进行相应的处理。
3.2 ppp协议的实现
ppp是运行在硬件接口之上的,它提供lcp、pap和ipcp协商所需要的合适的机制。这些协商由被pppentery()函数调用的固定的状态机执行,它基于接受到的内容建立响应。而pppreceived()函数,对接收到的每个字节进行转义处理,当一个完整的ppp帧准备好要处理时,pppreceived()设置整帧标示isframe,此标志在应用主循环中被pppentery()函数轮询。ppp包格式如表1所示:
表1 ppp包格式
ppp模块在ram中定义了两个缓冲区inbuffer[] 和outbuffer[]分别存储从ppp来的包或向外输出的包,该缓冲区是全局的。为了建立点对点链路通信,在拨号成功连接后,ggsn发送lcp设置包,以便设定和测试数据链路,在链路建立以后,lcp可选设备才可以被认证,本系统拒绝所有的设置并请求(req)pap方式验证。然后,进行pap验证用户名和密码过程,在gprs中用户名和密码都为空,如果验证成功,ggsn会返回ipcp报文,分配动态ip地址。此时,就完成了与ggsn的协商过程。协商完成后,进入ip数据报通信阶段[4]。根据应用的不同,ip报文可以携带udp报文,也可以携带tcp或icmp报文,本系统为了数据的可靠传输,采用tcp报文传输数据。此时,gps终端向ggsn发送的所有包含ip报文的ppp报文都会被传送给internet网中相应的ip地址,此处为gps监控中心的ip地址。中心向gps终端ip地址发送的数据也会经过gprs网传送到gps终端上,从而实现gps终端与远程中心主机通过互联网传送数据。ppp协商过程如图3所示[5]:
3.3 gprs modem命令及串口读写
3.3.1 gprs modem 命令
若想通过gprs modem拨号上网,建立ppp连接,就必须先对其进行配置,本系统中设置上网用到的主要的at命令有一下两个:
1.transmit(at+cgdcont=1,ip,cmnet\rn,25); 传送此命令到gprs modem,以设置中国移动gprs节点服务器的apn名称和属性,如果设置成功则返回“ok”,出错返回“error”。其中“cmnet”是登陆gprs网的缺省apn.
2.transmit(atd*99***1#rn,13);此命令拨通中国移动的gprs节点服务器,如果设置成功,则返回“connect”,出错返回“error”。程序可以根据返回值做相应处理。
3.3.2 串口读写api
gps多任务实时操作系统中提供了对串口读写的api函数,本系统在用户初始化时采用信号触发方式来读取串口,具体的串口api的应用如下所述:
1. 打开串口
port __y * _puserport; //其中_puserport为定义的串口变量
_puserport = (port __y *)uart_open(¶mcom);
if (_puserport)
{
port_signalwhendataavailable(_puserport, 1, isys_thistaskid());
}
以上的功能为打开串口,paramcom为设定的串口参数结构,其中包括,串口号、缓冲区大小、传输速率等基本设置,若打开成功,则在串口每接收到一个字节时就会发送一个信号给本任务。
2. 读串口
port_readbyte(_puserport, &buf)
在收到有字节的信号时,调用此函数将串口_puserport中的数据读入缓冲区buf中。
3. 写串口
port_writebyte(_puserport, *data))
此函数是将data指针所指向的数据写到串口_puserport。
4 结论
本系统通过在gps多任务实时操作系统中增加一个通信任务,并成功移植了uip0.6协议栈,完成了链路层ppp协议及底层硬件的驱动调用,使得gps定位数据能够实时、准确传输。经过实践证明,该系统传输过程稳定,数据传输无误。本系统的实现为gps产品的网络化及将来gps产品通过网络提高性能奠定了基础。
本文作者创新点是将tcp/ip协议栈成功移植到gps实时操作系统中,并在vs_dsp中实现了链路层的点对点的ppp协议,节省了原来利用有协议栈的modem进行数据传输的费用,为以后gps的广泛应用奠定了工程应用基础。
stm32/stm8
意法半导体/st/stm

滤波器介绍及系数设计
新的公式,改变了传统的设立测距雷达站体制
日月光10月营收562亿元新台币,PC封测业务回温
LED车厢照明系统的组成及故障分析
长虹声纹识别人工智能电视有望引领彩电销售热潮
嵌入式GPS由GPRS接入Internet的实现
51单片机矩阵按键的功能应用
智能门禁有何神通,吸引酒店会所竞相采用?
回顾2019年5G全球商用发展情况
浅谈汽车以太网物理层IOP测试
世炬网络荣获“2023 年度广东省知识产权示范企业”
人工智能路径寻求突破 富士康积极布局AI手机
ESD二极管厂家、选型、封装和应用,超详细
随着民用安防市场向智能家居融合,安防企业将进一步拓展视频服务
你知道怎么样给磁致伸缩液位计选型吗
三雄极光与阿里等企业共同探讨智能照明的发展与合作
电子芯闻早报:苹果耳机新专利,Model X将发布
TMS320LF2407A基于CAN总线技术的数字交流伺服系
The MathWorks推出2010a版MATLAB和Si
交流电动机调速变频器的特点