- 相關(guān)推薦
基于8051嵌入式系統(tǒng)的GPRS終端實(shí)現(xiàn)
摘要:介紹了基于GPRS網(wǎng)的數(shù)據(jù)傳輸、嵌入式實(shí)時(shí)操作系統(tǒng)u/OS-II以及小型TCP/IP協(xié)議棧uIP;深入論述了基于8051嵌入式系統(tǒng)的GPRS終端的實(shí)現(xiàn)。提供了一種羅為簡(jiǎn)單、廉價(jià)和實(shí)用的GPRS終端的實(shí)現(xiàn)方案,說(shuō)明了在8051中如何進(jìn)行uC/OS-II和uIP的移植。關(guān)鍵詞:GPRS終端 嵌入式系統(tǒng) 實(shí)時(shí)操作系統(tǒng) TCP/IP
隨著數(shù)據(jù)無(wú)線傳輸需求的驟增和中畫移動(dòng)GPRS業(yè)務(wù)全面投入運(yùn)營(yíng),無(wú)線數(shù)據(jù)通信的應(yīng)用越來(lái)越廣泛。GPRS網(wǎng)不但具有覆蓋范圍廣、數(shù)據(jù)傳輸速度快、通信質(zhì)量高、永遠(yuǎn)在線和按流量計(jì)費(fèi)等優(yōu)點(diǎn),且其本身就是一個(gè)分組型數(shù)據(jù)網(wǎng),支持TCP/IP協(xié)議,無(wú)需經(jīng)過(guò)PSTN等網(wǎng)絡(luò)的轉(zhuǎn)接,可直接與Internet網(wǎng)互通。因此GPRS業(yè)務(wù)在無(wú)線上網(wǎng)、環(huán)境監(jiān)測(cè)、交通監(jiān)控、移動(dòng)辦公等行業(yè)中具有無(wú)可比擬的性價(jià)比優(yōu)勢(shì)。
為了滿足GPRS終端的低成本、小型化和移動(dòng)靈活等要求,現(xiàn)在廣泛采用單片機(jī)對(duì)GPRS終端進(jìn)行控制,并且引入嵌入式系統(tǒng)實(shí)現(xiàn)TCP/IP協(xié)議棧。目前主要的困難在于:運(yùn)行TCP/IP協(xié)議對(duì)計(jì)算機(jī)存儲(chǔ)器、運(yùn)算速度等要求較高,會(huì)占用大量的系統(tǒng)資源;而嵌入式系統(tǒng)大多采用8位單片機(jī),硬件資源非常有限,支持TCP/IP協(xié)議非常困難。本文采用了在嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II中移植一種小型TCP/IP協(xié)議棧uIP的方法,使基于8051嵌入式系統(tǒng)的GPRS終端能夠在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)傳輸;同時(shí)改善了系統(tǒng)的性能,提高了系統(tǒng)的可靠性,增強(qiáng)了系統(tǒng)的可擴(kuò)展性和產(chǎn)品開(kāi)發(fā)的可延續(xù)性。
圖1
1 基于GPRS網(wǎng)的數(shù)據(jù)傳輸
GPRS是在GSM的基礎(chǔ)上引入了分組控制單元(PCU)、服務(wù)支持節(jié)點(diǎn)(SGSN)和網(wǎng)關(guān)支持節(jié)點(diǎn)(GGSN)等新部件而構(gòu)成的無(wú)線數(shù)據(jù)傳輸系統(tǒng),其用戶能夠在端到端分組方式下發(fā)送和接收數(shù)據(jù);贕PRS網(wǎng)的數(shù)據(jù)傳輸系統(tǒng)如圖1所示。具體的數(shù)據(jù)傳輸流程為:
·GPRS終端通過(guò)接口從客戶系統(tǒng)中取出用戶數(shù)據(jù);
·處理后以GPRS分組數(shù)據(jù)的形式發(fā)送到GSM基站(BSS);
·分組數(shù)據(jù)經(jīng)SGSN封裝后,發(fā)送到GPRS IP骨干網(wǎng);
·若分組數(shù)據(jù)是發(fā)送到另一GPRS終端,則先發(fā)送到目的SGSN,再經(jīng)BSS發(fā)送到CPBS終端;若分組數(shù)據(jù)是發(fā)送到外部網(wǎng)絡(luò)(如Internet),則將分組數(shù)據(jù)包經(jīng)GGSN進(jìn)行協(xié)議轉(zhuǎn)換后,發(fā)送到外部網(wǎng)絡(luò)。
2 嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II
uC/OS-II是由Jean J.Labrosse先生編寫的、現(xiàn)在流行的一種免費(fèi)公開(kāi)源代碼的實(shí)時(shí)操作系統(tǒng)。它可廣泛應(yīng)用于從8位到64位單片機(jī)的各種不同類型、不同規(guī)模的嵌入式系統(tǒng)。帶有詳細(xì)注解的uC/OS-II源代碼只有200頁(yè)左右;其中95%左右是用C語(yǔ)言編寫的,與MCU類型相關(guān)的代碼用8088匯編寫成,不超過(guò)200行。uC/OS-II不僅具有結(jié)構(gòu)小巧、可固化、可裁剪、多任務(wù)和可剝奪型的實(shí)時(shí)內(nèi)核等特點(diǎn);而且其實(shí)時(shí)性、穩(wěn)定性裙可靠性也得到了廣泛認(rèn)可。uC/OS-II的最小內(nèi)核可編譯至2KB,一般情況占用內(nèi)存在10KB數(shù)量級(jí),適用基于8051的嵌入式系統(tǒng)的需要。在系統(tǒng)中嵌入uC/OS-II可以把整個(gè)程序分成許多任務(wù),每個(gè)任務(wù)相對(duì)獨(dú)立,然后在每個(gè)任務(wù)中設(shè)置超時(shí)函數(shù),時(shí)間用完后,必須交出MCU的使用權(quán)。即使一個(gè)任務(wù)發(fā)生問(wèn)題,也不會(huì)影響其他任務(wù)的運(yùn)行。在單片機(jī)系統(tǒng)中嵌入uC/OS-II提高了系統(tǒng)的可靠性,并使調(diào)試程序變得簡(jiǎn)單,同時(shí)也增強(qiáng)了系統(tǒng)的可擴(kuò)展性和產(chǎn)品開(kāi)發(fā)的可延續(xù)性。
不過(guò)uC/OS-II僅僅是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,與商業(yè)實(shí)時(shí)操作系統(tǒng)軟件包比較,它缺少Utilities部分,如文件系統(tǒng)、遠(yuǎn)程函數(shù)調(diào)用庫(kù)、通信軟件庫(kù)。通信軟件包括:TCP/IP軟件庫(kù)、藍(lán)牙通信軟件庫(kù)、IrDA紅外通信軟件庫(kù)等。這一類軟件的解決有兩種途徑:一個(gè)是購(gòu)買第三方軟件;另一個(gè)是自己編寫。如果只是用單片機(jī)實(shí)現(xiàn)TCP/IP協(xié)議中的某些功能,可以選用免費(fèi)公開(kāi)源代碼的小型TCP/IP協(xié)議棧,把它移植到uC/OS-II。 目前uC/OS-II的最新版本為V2.70,但現(xiàn)在廣泛學(xué)習(xí)和應(yīng)用的是V2.52。
(范文先生網(wǎng)www.gymyzhishaji.com收集整理)
3 小型TCP/IP協(xié)議棧uIP
uIP是由瑞士計(jì)算機(jī)科學(xué)院的Adam Dunkels等開(kāi)發(fā)的一種免費(fèi)公開(kāi)源代碼的小型TCP/IP協(xié)議棧,它專門為8位和16位MCU編寫。uIP完全是用C語(yǔ)言編寫,它在保證一個(gè)完整的TCP/IP棧的前提下,只保留了最必要的一系列特征,使其代碼最少、占用的RAM最小;它只能處理單一的網(wǎng)絡(luò)接口。通常的TCP/IP棧采用BSD socket API,需要來(lái)自下層的多任務(wù)操作系統(tǒng)的支持,而且任務(wù)管理、語(yǔ)境切換以及堆棧空間的分配都要占用很大的開(kāi)銷,超出了8位機(jī)系統(tǒng)的能力。uIP采用了一個(gè)事件驅(qū)動(dòng)接口,通過(guò)調(diào)用應(yīng)用程序響應(yīng)事件。而相應(yīng)的應(yīng)用程序作為C函數(shù)調(diào)用。通常情況下,uIP的源代碼雖然只有幾KB,RAM占用僅幾百字節(jié),但uIP提供了網(wǎng)絡(luò)通信所必須的協(xié)議,包括:ARP、SLIP、IP、UDP、ICMP(PINC)和TCP;能夠滿足8位MCU接入TCP/IP網(wǎng)絡(luò)(如Internet)的需要。目前uIP最新的版本為V0.9,符合Internet標(biāo)準(zhǔn)。
4 GPRS終端的工作原理及硬件實(shí)現(xiàn)
GPRS終端由控制模塊控制TCP/IP模塊和無(wú)線發(fā)送模塊實(shí)現(xiàn)。其結(jié)構(gòu)框圖如圖2所示。
4.1 控制模塊
控制模塊的作用主要有:
·控制模塊通過(guò)AT指令初始化GPRS無(wú)線模塊,使之附著在GPRS網(wǎng)上,獲得網(wǎng)絡(luò)運(yùn)營(yíng)商動(dòng)態(tài)分配給GPRS終端的IP地址,并與目的終端或服務(wù)器之間建立連接;
·控制模塊通過(guò)RS232串口向客戶系統(tǒng)收發(fā)數(shù)據(jù)或指令;
·控制模塊通過(guò)RS232串口向TCP/IP模塊收發(fā)數(shù)據(jù);
·控制模塊自主或根據(jù)遠(yuǎn)程控制指令采取其他操作。
控制模塊的MCU選用華邦的八位機(jī)WINBOODW77E58。W77E58是臺(tái)灣華邦公司生產(chǎn)的、與MCS51系列單片機(jī)兼容的、可多次編程的快速微處理器,在其內(nèi)部集成有32KB的可重復(fù)編程的Flash ROM、256字節(jié)的片內(nèi)存儲(chǔ)器、IKB用MOVX指令訪問(wèn)的SRAM、可編程看門狗定時(shí)器、三個(gè)16位定時(shí)器、二個(gè)增強(qiáng)型的全雙工串行口、片內(nèi)RC振蕩器、雙16位數(shù)據(jù)指針等諸多功能。在很多場(chǎng)合,幾乎不用擴(kuò)展外圍芯片就能夠滿足系統(tǒng)要求。由于其采用了全新設(shè)計(jì)的微處理器內(nèi)核,去除多余的時(shí)鐘和存儲(chǔ)周期,在相同的晶振頻率下,根據(jù)不同的指令類型,其運(yùn)行速度一般比傳統(tǒng)8051系列快1.5~3倍。一般情況下,平均可達(dá)2.5倍以上。另外,由于W77E58采用全靜態(tài)CMOS設(shè)計(jì),能工作在低速晶振頻率下。與普通的8051相比,若W77E58采用低速工作頻率,在相同的指令吞吐量下,W77E58的節(jié)電性能也將大大提高。
4.2 TCP/IP模塊
TCP/IP模塊通過(guò)RS232串口與GPRS無(wú)線模塊通信,提供非透明和透明兩路通道。相對(duì)應(yīng)地,該模塊有兩種傳輸模式:透明模式和非透明模式。通過(guò)軟件切換,模塊在處于不同的傳輸模式時(shí),數(shù)據(jù)流向也有所不同。當(dāng)傳送AT指令集時(shí),模塊進(jìn)入透明模式,可以直接訪問(wèn)GPRS無(wú)線模塊;當(dāng)模塊進(jìn)人非透明傳輸方式時(shí),用戶數(shù)據(jù)從串口進(jìn)入TCP/IP模塊后,先十丁成TCP/IP包,再經(jīng)串口發(fā)送給GPRS模塊;GPRS無(wú)線模塊把其封裝成GPRS分組數(shù)據(jù)包傳到GPRS網(wǎng)上。TCP/IP模塊由基于單片機(jī)8051的嵌入式系統(tǒng)實(shí)現(xiàn)。選用WINBOODW77E58作為嵌入式系統(tǒng)的微處理器,嵌入式實(shí)時(shí)操作系統(tǒng)選用uC/OS-II,然后在uC/OS-II中移植uIP實(shí)現(xiàn)TCP/IP協(xié)議棧。
4.3 GPRS無(wú)線模塊
GPRS無(wú)線模塊作為GPRS終端的無(wú)線收發(fā)模塊,把從TCP/IP模塊接收的TCP/IP包和從基站接收的GPRS分組數(shù)據(jù)進(jìn)行相應(yīng)的協(xié)議處理后再轉(zhuǎn)發(fā)。GPRS無(wú)線模塊采用了SIEMENS公司的MC35 GPRS模塊。MC35模塊主要由射頻天線、內(nèi)部Flash、SRAM、GSM基帶處理器、匹配電源和一個(gè)40腳的ZIF插座組成。GSM基帶處理器是核心部件,其作用相當(dāng)于一個(gè)協(xié)議處理器,用來(lái)處理外部系統(tǒng)通過(guò)串口發(fā)送過(guò)來(lái)的AT指令。射頻天線部分主要實(shí)現(xiàn)信號(hào)的調(diào)制與解調(diào),以及外部射頻信號(hào)與內(nèi)部基帶處理器之間的信號(hào)轉(zhuǎn)換。匹配電源為處理器及射頻部分提供所需的電源。MC35 GPRS模塊支持GSM900和GSMl800雙頻網(wǎng)絡(luò),接收速率可達(dá)86.20kbps,發(fā)送速率可達(dá)21.5kbps,并且很容易集成。當(dāng)然最大的數(shù)據(jù)吞吐量還要依賴于GPRS網(wǎng)絡(luò)的支持。
5 TCP/IP模塊的軟件實(shí)現(xiàn)
5.1 uC/OS-II在8051上的移植
uC/OS-II是自由軟件,非商業(yè)的運(yùn)用如科研、教學(xué)都是免費(fèi)的。任何使用者都可以從互聯(lián)網(wǎng)上下載其源代碼,通過(guò)適當(dāng)?shù)男薷募右砸浦,使其滿足自己硬件和系統(tǒng)的需要。為了移植,需要先了解uC/OS-II操作系統(tǒng)的總體結(jié)構(gòu),圖3所示是uC/OS-II的結(jié)構(gòu)及與硬件的關(guān)系。
與處理器無(wú)關(guān)的代碼中包含了uC/OS-II的系統(tǒng)函數(shù),在進(jìn)行系統(tǒng)移植時(shí)一般不需要對(duì)這部分進(jìn)行修改;只要將UCOS-II.C文件包含在自己的項(xiàng)目中,即可將uC/OS-II中所有與MCU無(wú)關(guān)的代碼包含到移植的代碼中。
與應(yīng)用相關(guān)的代碼是用戶根據(jù)自己的應(yīng)用系統(tǒng)定制合適的內(nèi)核服務(wù)功能,它包括兩個(gè)文件:OS_CFG.H、INCLUDES.H。其中OS_CFG.H用來(lái)配置內(nèi)核,用戶根據(jù)需要對(duì)內(nèi)核進(jìn)行定制,設(shè)置系統(tǒng)的基本情況,例如系統(tǒng)可提供的最大任務(wù)數(shù)量、是否定制郵箱服務(wù)、是否需要系統(tǒng)提供任務(wù)掛起功能、是否提供任務(wù)優(yōu)先級(jí)動(dòng)態(tài)改變功能等。而INCLUDES.H則是系統(tǒng)頭文件。
處理器相關(guān)的代碼中包含了對(duì)各種不同類型MCU的支持,需要根據(jù)自己的MCU對(duì)這部分進(jìn)行修改。針對(duì)Keil C51編譯器和8051芯片的技術(shù)特點(diǎn),uC/OS-Ⅱ的移植與三個(gè)文件相關(guān):處理器相關(guān)C文件(OS_CPU.H、OS_CPU_C.C)和匯編文件(OS_CPU_A.ASM)。
(1)修改OS_CPU。H
文件OS_CPU.H中包括了用#define語(yǔ)句定義的與處理器相關(guān)的常數(shù)、宏以及類型。移植時(shí)主要修改的內(nèi)容有
:
·與編譯器相關(guān)的數(shù)據(jù)類型的設(shè)定。參考Keil C51編譯器中的幫助文件C51.PDF,具體路徑為\C51\HLP\C51.PDF。
·用#define語(yǔ)句定義了兩個(gè)宏開(kāi)關(guān)中斷,具體實(shí)現(xiàn)為:
#define OS_ENTER_CRITICAL()EA=0//關(guān)中斷
#define OS_EXIT_CRITICAL() EA=1 //開(kāi)中斷
·根據(jù)8051堆棧的方向定義OS_STK_GROWTH。
#define OS_STK_GROWTH 0 //8051堆棧從下向上遞增
置OS_STK_GROWTH為0,表示堆棧從下(低地址)向上(高地址)遞增;置OS_STK_GROWTH為1,表示堆棧從上(高地址)向下(低地址)遞減。
·uC/OS-II從低優(yōu)先級(jí)任務(wù)切換到高優(yōu)先級(jí)任務(wù)時(shí)需要用到OS_STK_SW(),通過(guò)執(zhí)行OS_STK_SW()模仿中斷的產(chǎn)生。絕大多數(shù)CPU會(huì)提供軟中斷或指令陷阱(TRAP)完成這項(xiàng)功能。中斷服務(wù)子程序或指令陷阱處理函數(shù)(也叫異常處理函數(shù))的中斷向量地址必須指向匯編語(yǔ)言函數(shù)OSCtxSw()。因?yàn)?051沒(méi)有軟中斷指令,所以用程序調(diào)用代替。
#define OS_TASK_SW() OSCtxSw()
(2)修改OS_CPU_C.C
uC/OS-II的移植范例要求用戶編寫10個(gè)簡(jiǎn)單的C函數(shù),其中OSTaskStklnit()是必要的,其他9個(gè)函數(shù)必須聲明,但不一定包含任何代碼。因?yàn)镵eil C51在缺省情況下把函數(shù)編譯為不可重入的結(jié)構(gòu),而多任務(wù)系統(tǒng)要求并發(fā)操作導(dǎo)致重入,所以要在每個(gè)C函數(shù)及其聲明后標(biāo)注reentrant關(guān)鍵字,使編譯器生成的代碼在運(yùn)行中支持函數(shù)可重入。另外"pdata"、"data"在uC/OS-II中用做一些函數(shù)的形參,但它同時(shí)又是Keil C51的關(guān)鍵字,這樣會(huì)導(dǎo)致編譯錯(cuò)誤。通?砂"pdata''改成"ppdala","data"改成"ddata"解決此問(wèn)題。具體修改的代碼如下:
void * OSTaskStkInit(void (*task)(void *pd),
void *ppdata,
void *ptos,
INT16U opt)reentrant
在基于8051的uC/OS-II中,移植uIP不需要對(duì)現(xiàn)有的TCP/IP源代碼做任何修改,但是必須為網(wǎng)絡(luò)設(shè)備(如網(wǎng)卡芯片、串口等)寫一個(gè)驅(qū)動(dòng)程序。同時(shí),現(xiàn)有系統(tǒng)的集成部分也要進(jìn)行相應(yīng)的處理,例如當(dāng)有數(shù)據(jù)到達(dá)或者周期性的定時(shí)器計(jì)數(shù)滿等情況下,主控制系統(tǒng)應(yīng)該調(diào)用uIP函數(shù)[劉。移植的具體步驟如下:
·在目錄uip-0.9/下創(chuàng)建一個(gè)自己的目錄,例如uip-0.9/8051/;
·把uip_arch.c文件從目錄uip-0.9/unix/中復(fù)制到目錄uip-0.9/8051中;它包含了用C語(yǔ)言實(shí)現(xiàn)的32位加法、校驗(yàn)和算法;
·把uipopt.h文件從目錄uip-0.9/unix中復(fù)制到目錄uip-0.9/8051中,并對(duì)其進(jìn)行修改,以滿足系統(tǒng)的需要。uipopt.h是ulP的配置文件,其中不僅包含了諸如uIP網(wǎng)點(diǎn)的IP地址和同時(shí)可連接的最大值等設(shè)置選項(xiàng),而且還有系統(tǒng)結(jié)構(gòu)和C編譯器的特殊選項(xiàng);
·參考例子unix/tapdev.c和uip/slipdev.c,為串口編寫驅(qū)動(dòng)程序;
·參考例子unix/main.c,寫自己的主控制系統(tǒng),以便在適當(dāng)?shù)臅r(shí)候可以調(diào)用ulP函數(shù);
·編譯源代碼。
本文闡述了基于8051嵌入式系統(tǒng)的GPRS終端的實(shí)現(xiàn),并詳細(xì)介紹了嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II基于8051的移植以及小型TCP/IP協(xié)議棧uIP的移植:該GPRS終端利用GPRS網(wǎng)和Internet能夠與相應(yīng)的GPRS終端以及相應(yīng)的Internet終端進(jìn)行數(shù)據(jù)傳輸。在GPRS終端的TCP/IP模塊中引入時(shí)實(shí)操作系統(tǒng)不但改善了系統(tǒng)的性能,提高了系統(tǒng)的可靠性,而且增強(qiáng)了系統(tǒng)的可擴(kuò)展性和產(chǎn)品開(kāi)發(fā)的可延續(xù)性。
【基于8051嵌入式系統(tǒng)的GPRS終端實(shí)現(xiàn)】相關(guān)文章:
用GPRS modem實(shí)現(xiàn)嵌入式Internet接入系統(tǒng)04-12
基于Winodws CE的嵌入式網(wǎng)絡(luò)監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)08-06
基于ARM-μCLinux嵌入式系統(tǒng)啟動(dòng)引導(dǎo)的實(shí)現(xiàn)08-06
基于嵌入式PC的PIII計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)08-06
基于C8051F021的定位和報(bào)警移動(dòng)終端設(shè)計(jì)08-06
基于FRAM的公交收費(fèi)系統(tǒng)的實(shí)現(xiàn)08-06
基于DSP的Bluetooth嵌入式系統(tǒng)應(yīng)用08-06