嵌入式GPS由GPRS接入Internet的實(shí)現(xiàn)
引言
本文引用地址:http://www.ex-cimer.com/article/152587.htm隨著全球定位系統(tǒng)的不斷改進(jìn),軟、硬件的不斷完善,應(yīng)用領(lǐng)域正在不斷地開拓,目前已遍及國民經(jīng)濟(jì)各種部門,并開始逐步深入人們的日常生活。隨著衛(wèi)星導(dǎo)航定位設(shè)備的小型化甚至芯片化,嵌入式GPS產(chǎn)品越來越廣泛的應(yīng)用到人們生活的各個(gè)領(lǐng)域,而嵌入式產(chǎn)品的網(wǎng)絡(luò)化就成為當(dāng)今研究的一個(gè)方向。
1 系統(tǒng)原理及結(jié)構(gòu)
GPS接收機(jī)數(shù)據(jù)有數(shù)據(jù)量小、定時(shí)或非定時(shí)及實(shí)時(shí)發(fā)送等特點(diǎn),一方面需實(shí)現(xiàn)數(shù)據(jù)的上傳,另一方面也需下達(dá)各種傳輸、控制指令,即雙向的數(shù)據(jù)、指令傳輸。傳統(tǒng)的數(shù)據(jù)傳輸主要采用GSM的方法來解決,這種傳輸方式存在覆蓋范圍、實(shí)時(shí)性等問題。目前中國移動(dòng)主推的GPRS通用分組無線業(yè)務(wù)是在現(xiàn)有GSM系統(tǒng)上發(fā)展起來的一種承載業(yè)務(wù),目的是為GSM用戶提供分組形式的數(shù)據(jù)業(yè)務(wù)。GPRS拋棄了傳統(tǒng)的獨(dú)占電路交換模式,采用分組交換技術(shù),每個(gè)用戶可同時(shí)占用多個(gè)無線信道,同一無線信道又可以由多個(gè)用戶共享,有效地利用了信道資源,帶寬最高可達(dá)171.2Kb/s[1]。目前中國移動(dòng)的GPRS覆蓋范圍在中心城市幾乎達(dá)到了100%,在邊遠(yuǎn)地區(qū)也達(dá)到了80%以上,實(shí)際應(yīng)用帶寬大約在20-40Kb/s,特別適合于GPS數(shù)據(jù)通信的需求,可以完全取代過去傳統(tǒng)的有線MODEM、X.25、短信等通信方式[2]。
GPS接收機(jī)應(yīng)用GPRS數(shù)據(jù)傳輸方式及網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示:
通過GPRS服務(wù),GPS設(shè)備可采用互聯(lián)網(wǎng)Internet的標(biāo)準(zhǔn)方式與在互聯(lián)網(wǎng)上的服務(wù)器交換數(shù)據(jù)。GPRS的基礎(chǔ)是以IP包的形式進(jìn)行數(shù)據(jù)的傳輸,GPRS無線終端接入GPRS 網(wǎng)絡(luò)的方法與普通有線MODEM 類似, 都采用建立PPP(Point-to-Point Protocol) 連接方式。PPP協(xié)議是一種被廣泛采用的串行點(diǎn)對(duì)點(diǎn)鏈路上傳輸數(shù)據(jù)報(bào)的方法,包括LCP、PAP、IPCP、NCP等。GPRS MODEM通過PPP協(xié)議獲得動(dòng)態(tài)分配的IP地址。連接建立后,在PPP協(xié)議的基礎(chǔ)上通過數(shù)據(jù)傳輸協(xié)議,該系統(tǒng)采用TCP實(shí)現(xiàn)與互聯(lián)網(wǎng)上其它計(jì)算機(jī)的數(shù)據(jù)通訊。
2 系統(tǒng)硬件組成
本系統(tǒng)采用帶有實(shí)時(shí)操作系統(tǒng)的GPS接收機(jī)內(nèi)嵌通信協(xié)議的方案,在多任務(wù)的系統(tǒng)中增加一個(gè)comm.c通信任務(wù),在該任務(wù)中實(shí)現(xiàn)簡化的TCP/IP協(xié)議棧、PPP協(xié)議及無線GPRS Modem的命令控制。帶實(shí)時(shí)操作系統(tǒng)的GPS接收機(jī)中包括16位VS_DSP處理器,8Mflash,96kRAM,16kROM,兩個(gè)串口UART0 和UART1。其中UART0用于程序的燒寫與輸出數(shù)據(jù)的觀測;UART1用于與無線GPRS Modem連接其中UART0口在設(shè)計(jì)階段主要是用于連接PC機(jī)的串口進(jìn)行程序的編寫及燒制,作為終端機(jī)它可以作為SPI控制。系統(tǒng)硬件組成如圖2所示。
3 系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)
GPS多任務(wù)實(shí)時(shí)操作系統(tǒng)中本身不帶有通信功能,而且為了經(jīng)濟(jì)的考慮,本設(shè)計(jì)采用了不帶協(xié)議棧的無線GPRS Modem,所以在軟件設(shè)計(jì)時(shí),采用在原來任務(wù)基礎(chǔ)上增加一個(gè)通信任務(wù),主要完成微型TCP/IP協(xié)議棧、PPP協(xié)議及無線GPRS Modem的命令控制。
3.1 微型TCP/IP協(xié)議棧的移植
如果在嵌入式系統(tǒng)中實(shí)現(xiàn)一個(gè)完整的TCP/IP協(xié)議棧,其難度可能會(huì)超出應(yīng)用本身,所以本系統(tǒng)選用了一種簡易的免費(fèi)TCP/IP協(xié)議棧uip0.6作為設(shè)計(jì)的核心。uip0.6是瑞典計(jì)算機(jī)科學(xué)研究所Adam Dunkels開發(fā)的源碼公開的免費(fèi)簡易TCP/IP協(xié)議棧[3,4]。uip實(shí)現(xiàn)了TCP/IP協(xié)議集的四個(gè)基本協(xié)議:ARP地址解析,IP網(wǎng)際互聯(lián)協(xié)議,ICMP網(wǎng)絡(luò)控制報(bào)文協(xié)議和TCP傳輸控制協(xié)議;它具備極少的代碼占用量和RAM資源要求,尤其適用于8/16位單片機(jī);支持多個(gè)主動(dòng)連接和被動(dòng)連接并發(fā),支持連接的動(dòng)態(tài)分配和釋放;擁有簡易的應(yīng)用層接口和設(shè)備驅(qū)動(dòng)層接口。由于本系統(tǒng)采用GPRS網(wǎng)絡(luò)方式,所以其四個(gè)協(xié)議集中只保留IP網(wǎng)際互連協(xié)議和TCP傳輸控制協(xié)議,并其進(jìn)行一定的修改。uip協(xié)議棧中實(shí)現(xiàn)IP網(wǎng)際互聯(lián)協(xié)議時(shí)對(duì)原協(xié)議進(jìn)行了極大的簡化,它沒有實(shí)現(xiàn)分片和重組。本設(shè)計(jì)中由于發(fā)送接收數(shù)據(jù)量較小,所以不必進(jìn)行分片與重組,即對(duì)IP網(wǎng)際互聯(lián)協(xié)議的實(shí)現(xiàn)部分不作修改。為了減少存儲(chǔ)器的使用,uip里的TCP沒有實(shí)現(xiàn)發(fā)送和接收數(shù)據(jù)的調(diào)整窗口。輸入的TCP段不會(huì)通過uip緩存,而是由應(yīng)用程序處理。輸出數(shù)據(jù)時(shí),uip不能在每個(gè)連接有超過一個(gè)未解決的TCP段。在本系統(tǒng)的設(shè)計(jì)中,為了避免數(shù)據(jù)丟失,應(yīng)用中設(shè)計(jì)一個(gè)大的緩沖區(qū)send_recbuf[]接收應(yīng)用要發(fā)送的數(shù)據(jù),一個(gè)較小的發(fā)送緩沖區(qū)send_buf[]。對(duì)uipopt.h中的部分內(nèi)容進(jìn)行修改,刪去UIP_IPADDR部分,應(yīng)用文件頭文件改為本系統(tǒng)中的應(yīng)用文件的頭文件#include “appcomm.h”,做為客戶端本系統(tǒng)中定義#define UIP_ACTIVE_OPEN 1。由于數(shù)據(jù)鏈路層采用PPP協(xié)議,所以u(píng)ip_buf[]中IP頭的偏移量定義為:#define UIPLLHLEN 0
3.1.1 uip與PPP的接口
當(dāng)PPP協(xié)議從網(wǎng)絡(luò)接收到一個(gè)IP包時(shí),把它放入到uip_buf中,系統(tǒng)調(diào)用uip_input()函數(shù)。此函數(shù)將處理這個(gè)包,在需要時(shí)會(huì)調(diào)用應(yīng)用程序。當(dāng)uip_input()返回時(shí),uip_buf中放入了一個(gè)輸出包,包的大小由全局變量uip_len約束,若uip_len為0,則說明沒有包要發(fā)送,否則,PPP將此包加上PPP包頭發(fā)送到網(wǎng)上。
3.1.2 uip與應(yīng)用的接口
uip使用基于事件的編程模式,在響應(yīng)一定的事件時(shí),應(yīng)用被當(dāng)作uip調(diào)用的一個(gè)C函數(shù)UIP_APPCALL來實(shí)現(xiàn),故在應(yīng)用中要設(shè)置#define UIP_APPCALL appcomm,在uip中的標(biāo)志uip_flags用于uip與應(yīng)用之間的聯(lián)系,在接收到數(shù)據(jù)、數(shù)據(jù)發(fā)送成功、建立了新的連接或數(shù)據(jù)被重發(fā)時(shí),uip調(diào)用應(yīng)用,應(yīng)用根據(jù)uip_flags標(biāo)志進(jìn)行相應(yīng)的處理。
3.2 PPP協(xié)議的實(shí)現(xiàn)
PPP是運(yùn)行在硬件接口之上的,它提供LCP、PAP和IPCP協(xié)商所需要的合適的機(jī)制。這些協(xié)商由被PPPEntery()函數(shù)調(diào)用的固定的狀態(tài)機(jī)執(zhí)行,它基于接受到的內(nèi)容建立響應(yīng)。而PPPReceived()函數(shù),對(duì)接收到的每個(gè)字節(jié)進(jìn)行轉(zhuǎn)義處理,當(dāng)一個(gè)完整的PPP幀準(zhǔn)備好要處理時(shí),PPPReceived()設(shè)置整幀標(biāo)示Isframe,此標(biāo)志在應(yīng)用主循環(huán)中被PPPEntery()函數(shù)輪詢。PPP包格式如圖1所示:
圖1 PPP包格式
PPP模塊在RAM中定義了兩個(gè)緩沖區(qū)InBuffer[] 和OutBuffer[]分別存儲(chǔ)從PPP來的包或向外輸出的包,該緩沖區(qū)是全局的。為了建立點(diǎn)對(duì)點(diǎn)鏈路通信,在撥號(hào)成功連接后,GGSN發(fā)送LCP設(shè)置包,以便設(shè)定和測試數(shù)據(jù)鏈路,在鏈路建立以后,LCP可選設(shè)備才可以被認(rèn)證,本系統(tǒng)拒絕所有的設(shè)置并請(qǐng)求(REQ)PAP方式驗(yàn)證。然后,進(jìn)行PAP驗(yàn)證用戶名和密碼過程,在GPRS中用戶名和密碼都為空,如果驗(yàn)證成功,GGSN會(huì)返回IPCP報(bào)文,分配動(dòng)態(tài)IP地址。此時(shí),就完成了與GGSN的協(xié)商過程。協(xié)商完成后,進(jìn)入IP數(shù)據(jù)報(bào)通信階段[4]。根據(jù)應(yīng)用的不同,IP報(bào)文可以攜帶UDP報(bào)文,也可以攜帶TCP或ICMP報(bào)文,本系統(tǒng)為了數(shù)據(jù)的可靠傳輸,采用TCP報(bào)文傳輸數(shù)據(jù)。此時(shí),GPS終端向GGSN發(fā)送的所有包含IP報(bào)文的PPP報(bào)文都會(huì)被傳送給Internet網(wǎng)中相應(yīng)的IP地址,此處為GPS監(jiān)控中心的IP地址。中心向GPS終端IP地址發(fā)送的數(shù)據(jù)也會(huì)經(jīng)過GPRS網(wǎng)傳送到GPS終端上,從而實(shí)現(xiàn)GPS終端與遠(yuǎn)程中心主機(jī)通過互聯(lián)網(wǎng)傳送數(shù)據(jù)。PPP協(xié)商過程如圖3所示[5]:
3.3 GPRS Modem命令及串口讀寫
3.3.1 GPRS Modem 命令
若想通過GPRS Modem撥號(hào)上網(wǎng),建立PPP連接,就必須先對(duì)其進(jìn)行配置,本系統(tǒng)中設(shè)置上網(wǎng)用到的主要的AT命令有一下兩個(gè):
1.transmit(AT+CGDCONT=1,IP,CMNET\rn,25); 傳送此命令到GPRS Modem,以設(shè)置中國移動(dòng)GPRS節(jié)點(diǎn)服務(wù)器的APN名稱和屬性,如果設(shè)置成功則返回“OK”,出錯(cuò)返回“ERROR”。其中“CMNET”是登陸GPRS網(wǎng)的缺省APN.
2.transmit(ATD*99***1#rn,13);此命令撥通中國移動(dòng)的GPRS節(jié)點(diǎn)服務(wù)器,如果設(shè)置成功,則返回“CONNECT”,出錯(cuò)返回“ERROR”。程序可以根據(jù)返回值做相應(yīng)處理。
3.3.2 串口讀寫API
GPS多任務(wù)實(shí)時(shí)操作系統(tǒng)中提供了對(duì)串口讀寫的API函數(shù),本系統(tǒng)在用戶初始化時(shí)采用信號(hào)觸發(fā)方式來讀取串口,具體的串口API的應(yīng)用如下所述:
1. 打開串口
PORT __y * _pUserPort; //其中_pUserPort為定義的串口變量
_pUserPort = (PORT __y *)UART_Open(¶mcom);
if (_pUserPort)
{
PORT_SignalWhenDataAvailable(_pUserPort, 1, ISYS_ThisTaskId());
}
以上的功能為打開串口,paramcom為設(shè)定的串口參數(shù)結(jié)構(gòu),其中包括,串口號(hào)、緩沖區(qū)大小、傳輸速率等基本設(shè)置,若打開成功,則在串口每接收到一個(gè)字節(jié)時(shí)就會(huì)發(fā)送一個(gè)信號(hào)給本任務(wù)。
2. 讀串口
PORT_ReadByte(_pUserPort, buf)
在收到有字節(jié)的信號(hào)時(shí),調(diào)用此函數(shù)將串口_pUserPort中的數(shù)據(jù)讀入緩沖區(qū)buf中。
3. 寫串口
PORT_WriteByte(_pUserPort, *data))
此函數(shù)是將data指針?biāo)赶虻臄?shù)據(jù)寫到串口_pUserPort。
4 結(jié)論
本系統(tǒng)通過在GPS多任務(wù)實(shí)時(shí)操作系統(tǒng)中增加一個(gè)通信任務(wù),并成功移植了uip0.6協(xié)議棧,完成了鏈路層PPP協(xié)議及底層硬件的驅(qū)動(dòng)調(diào)用,使得GPS定位數(shù)據(jù)能夠?qū)崟r(shí)、準(zhǔn)確傳輸。經(jīng)過實(shí)踐證明,該系統(tǒng)傳輸過程穩(wěn)定,數(shù)據(jù)傳輸無誤。本系統(tǒng)的實(shí)現(xiàn)為GPS產(chǎn)品的網(wǎng)絡(luò)化及將來GPS產(chǎn)品通過網(wǎng)絡(luò)提高性能奠定了基礎(chǔ)。
本文作者創(chuàng)新點(diǎn)是將TCP/IP協(xié)議棧成功移植到GPS實(shí)時(shí)操作系統(tǒng)中,并在VS_DSP中實(shí)現(xiàn)了鏈路層的點(diǎn)對(duì)點(diǎn)的PPP協(xié)議,節(jié)省了原來利用有協(xié)議棧的Modem進(jìn)行數(shù)據(jù)傳輸?shù)馁M(fèi)用,為以后GPS的廣泛應(yīng)用奠定了工程應(yīng)用基礎(chǔ)。
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論