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