嵌入式GPS由GPRS接入Internet的实现
时间:11-17
来源:互联网
点击:
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数据报通信阶段。根据应用的不同,IP报文可以携带UDP报文,也可以携带TCP或ICMP报文,本系统为了数据的可靠传输,采用TCP报文传输数据。此时,GPS终端向GGSN发送的所有包含IP报文的PPP报文都会被传送给Internet网中相应的IP地址,此处为GPS监控中心的IP地址。中心向GPS终端IP地址发送的数据也会经过GPRS网传送到GPS终端上,从而实现GPS终端与远程中心主机通过互联网传送数据。PPP协商过程如图3所示:

3.3 GPRS Modem命令及串口读写
3.3.1 GPRS Modem 命令
若想通过GPRS Modem拨号上网,建立PPP连接,就必须先对其进行配置,本系统中设置上网用到的主要的AT命令有一下两个:
1.transmit(AT+CGDCONT=1,IP,\CMNET\\r\n,25); 传送此命令到GPRS Modem,以设置中国移动GPRS节点服务器的APN名称和属性,如果设置成功则返回“OK”,出错返回“ERROR”。其中“CMNET”是登陆GPRS网的缺省APN.
2.transmit(ATD*99***1#\r\n,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的广泛应用奠定了工程应用基础。
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数据报通信阶段。根据应用的不同,IP报文可以携带UDP报文,也可以携带TCP或ICMP报文,本系统为了数据的可靠传输,采用TCP报文传输数据。此时,GPS终端向GGSN发送的所有包含IP报文的PPP报文都会被传送给Internet网中相应的IP地址,此处为GPS监控中心的IP地址。中心向GPS终端IP地址发送的数据也会经过GPRS网传送到GPS终端上,从而实现GPS终端与远程中心主机通过互联网传送数据。PPP协商过程如图3所示:

3.3 GPRS Modem命令及串口读写
3.3.1 GPRS Modem 命令
若想通过GPRS Modem拨号上网,建立PPP连接,就必须先对其进行配置,本系统中设置上网用到的主要的AT命令有一下两个:
1.transmit(AT+CGDCONT=1,IP,\CMNET\\r\n,25); 传送此命令到GPRS Modem,以设置中国移动GPRS节点服务器的APN名称和属性,如果设置成功则返回“OK”,出错返回“ERROR”。其中“CMNET”是登陆GPRS网的缺省APN.
2.transmit(ATD*99***1#\r\n,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的广泛应用奠定了工程应用基础。
- 蓝牙无线电调制解调器Siw1701原理与应用(02-19)
- 嵌入式移动数据库的关键技术(03-20)
- 在嵌入式SQL中怎样使用游标(08-12)
- 嵌入式Linux系统软件开发学习思路详细介绍 (08-20)
- 基于AVR单片机的嵌入式“瘦服务器”系统设计思想(03-11)
- 嵌入式系统设计中的存储碎片收集策略(05-04)
