新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 微控制器的GPRS無(wú)線(xiàn)上網(wǎng)方法

        微控制器的GPRS無(wú)線(xiàn)上網(wǎng)方法

        作者: 時(shí)間:2011-04-27 來(lái)源:網(wǎng)絡(luò) 收藏

        介紹一種在微控制器上實(shí)現(xiàn)PPP協(xié)議,并使其控制GPRS模塊通過(guò)GPRS連入Internet的方法;介紹GPRS技術(shù)和GPRS模塊的使用方法;重點(diǎn)介紹微控制器軟件的層次結(jié)構(gòu)和PPP協(xié)議的實(shí)現(xiàn)方法。

        關(guān)鍵詞微控制器點(diǎn)對(duì)點(diǎn)協(xié)議GPRS互聯(lián)網(wǎng)

        引言

          微控制器以其體積小、功耗低、使用方便等特點(diǎn),廣泛應(yīng)用于各種工業(yè)、民用的嵌入式系統(tǒng)中;而隨著互聯(lián)網(wǎng)(Internet)的興起與普及,使微控制器通過(guò)互聯(lián)網(wǎng)傳送數(shù)據(jù)就變得非常有意義。目前使微控制器上網(wǎng)的解決方案一般有兩種:一種是采用微控制器驅(qū)動(dòng)網(wǎng)卡,通過(guò)以太網(wǎng)連接Internet;另一種是使微控制器直接驅(qū)動(dòng)調(diào)制解調(diào)器(MODEM)通過(guò)電話(huà)線(xiàn)向ISP撥號(hào)上網(wǎng)。這兩種方案的缺點(diǎn)在于都要使用有線(xiàn)的網(wǎng)絡(luò),無(wú)法應(yīng)用于在邊遠(yuǎn)地區(qū)或可移動(dòng)系統(tǒng)中。
        針對(duì)這一問(wèn)題,本文提出一種基于GPRS的微控制器上網(wǎng)的解決方案,即在微控制器中實(shí)現(xiàn)PPP協(xié)議,并通過(guò)驅(qū)動(dòng)GPRS模塊經(jīng)過(guò)GPRS無(wú)線(xiàn)網(wǎng)連接到Internet實(shí)現(xiàn)上網(wǎng)。這種方案的優(yōu)點(diǎn)在于:①覆蓋面廣,適用于廣大偏遠(yuǎn)地區(qū);②無(wú)線(xiàn)上網(wǎng),適用于可移動(dòng)目標(biāo);③使用廉價(jià)的微控制器實(shí)現(xiàn)簡(jiǎn)單、成本低;④安裝簡(jiǎn)便,維護(hù)方便。

        1GPRS技術(shù)及其特點(diǎn)

          GPRS(GeneralPacketRadioService)是通用分組無(wú)線(xiàn)業(yè)務(wù)的簡(jiǎn)稱(chēng),是在GSM基礎(chǔ)上發(fā)展起來(lái)的一種分組交換的數(shù)據(jù)承載和傳輸方式。與原有的GSM比較,GPRS在數(shù)據(jù)業(yè)務(wù)的承載和支持上具有非常明顯的優(yōu)勢(shì):通過(guò)多個(gè)GSM時(shí)隙的復(fù)用,支持的數(shù)據(jù)傳輸速率更高,理論峰值達(dá)115kb/s;不同的網(wǎng)絡(luò)用戶(hù)共享同一組GPRS信道,但只有當(dāng)某一個(gè)用戶(hù)需要發(fā)送或接收數(shù)據(jù)時(shí)才會(huì)占用信道資源。這樣,通過(guò)多用戶(hù)的業(yè)務(wù)復(fù)用,更有效地利用無(wú)線(xiàn)網(wǎng)絡(luò)信道資源,特別適合突發(fā)性、頻繁的小流量數(shù)據(jù)傳輸,很好地適應(yīng)數(shù)據(jù)業(yè)務(wù)的突發(fā)性特點(diǎn);GPRS計(jì)費(fèi)方式更加靈活,可以支持按數(shù)據(jù)流量來(lái)進(jìn)行計(jì)費(fèi);與無(wú)線(xiàn)應(yīng)用協(xié)議(WAP)技術(shù)不同,GPRS能夠隨時(shí)為用戶(hù)提供透明的IP通道,可直接訪問(wèn)Internet中的所有站點(diǎn)和資源;采用信道復(fù)用技術(shù),每一個(gè)GPRS用戶(hù)都能夠?qū)崿F(xiàn)永遠(yuǎn)在線(xiàn);另外,GPRS還能支持在進(jìn)行數(shù)據(jù)傳輸?shù)耐瑫r(shí)進(jìn)行語(yǔ)音通話(huà)等等,而且相對(duì)于短消息等其它無(wú)線(xiàn)數(shù)據(jù)通信業(yè)務(wù),GPRS的價(jià)格優(yōu)勢(shì)比較明顯。目前,我國(guó)移動(dòng)推出的GPRS上網(wǎng)業(yè)務(wù)最高每千字節(jié)也只有3分錢(qián),而且用戶(hù)可以根據(jù)自己的需要,以月租、包月等多種形式進(jìn)一步降低GPRS通信的費(fèi)用。

          因此使用GPRS實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)的傳送是非常經(jīng)濟(jì)實(shí)用的,特別是對(duì)于不易架設(shè)有線(xiàn)網(wǎng)絡(luò)的邊遠(yuǎn)地區(qū)和可移動(dòng)裝置。

        2硬件連接和GPRS模塊設(shè)置

          通過(guò)GPRS網(wǎng)進(jìn)行數(shù)據(jù)傳輸一般需要使用GPRS模塊。目前,GPRS模塊一般是指帶有GPRS功能的GSM模塊,可以利用GPRS網(wǎng)進(jìn)行數(shù)據(jù)通信。其中比較流行的有法國(guó)Wave公司的WISMO系列和西門(mén)子公司的S系列等等。WAVECOM的WISMO模塊接口簡(jiǎn)單、使用方便且功能非常強(qiáng)大,它與微控制器、SIM卡、電源之間的連接如圖1所示。

        微控制器的GPRS無(wú)線(xiàn)上網(wǎng)方法

        圖1GPRS模塊的硬件連接圖

          其中GPRS模塊與微控制器間是通過(guò)串行口進(jìn)行通信的,通信速率最快可以達(dá)到115200b/s。模塊與控制器間的通信協(xié)議是AT命令集,其中大部分命令是符合協(xié)議“ATcommandsetforGSMMobileEquipment(ME)(GSM07.07version6.4.0Release1997)”的,但也有一些是Wavecom自己定義的AT命令。除了串口發(fā)送(TX)、串口接收(RX)之外,微控制器與GPRS模塊之間還有一些硬件握手信號(hào),如DTR、CTS、DCD等。為了簡(jiǎn)化微控制器的控制,硬件設(shè)計(jì)時(shí)沒(méi)有使用全部的硬件握手信號(hào),而只使用數(shù)據(jù)載波檢測(cè)(DataCarrierDetect,DCD)和終端準(zhǔn)備(DataTerminalReady,DTR)信號(hào)。DCD信號(hào)可以檢測(cè)GPRS模塊是處于數(shù)據(jù)傳送狀態(tài)還是處于AT命令傳送狀態(tài)。DTR信號(hào)用來(lái)通知GPRS模塊傳送工作已經(jīng)結(jié)束。

          硬件連接完成后,在進(jìn)行GPRS上網(wǎng)操作之前,首先要對(duì)GPRS模塊進(jìn)行一定的設(shè)置。主要的設(shè)置工作有:①設(shè)置通信波特率,可以使用AT+IPR=38400命令,把波特率設(shè)為38400b/s或其它合適的波特率,默認(rèn)的通信速度為9600b/s。②設(shè)置接入網(wǎng)關(guān),通過(guò)AT+CGDCONT=1,“IP”,“CMNET”命令設(shè)置GPRS接入網(wǎng)關(guān)為移動(dòng)夢(mèng)網(wǎng)。③設(shè)置移動(dòng)終端的類(lèi)別,通過(guò)AT+CGCLASS=“B”設(shè)置移動(dòng)終端的類(lèi)別為B類(lèi),即同時(shí)監(jiān)控多種業(yè)務(wù);但只能運(yùn)行一種業(yè)務(wù),即在同一時(shí)間只能使用GPRS上網(wǎng),或者使用GSM的語(yǔ)音通信。④測(cè)試GPRS服務(wù)是否開(kāi)通,使用AT+CGACT=1,1命令激活GPRS功能。如果返回OK,則GPRS連接成功;如果返回ERROR,則意味著GPRS失敗。這時(shí)應(yīng)檢查一下SIM卡的GPRS業(yè)務(wù)是否已經(jīng)開(kāi)通,GPRS模塊天線(xiàn)是否安裝正確等問(wèn)題。(其它相關(guān)的AT命令請(qǐng)參閱文獻(xiàn)3。)

          中國(guó)移動(dòng)在GPRS與Internet網(wǎng)中間建立了許多相當(dāng)于ISP的網(wǎng)關(guān)支持節(jié)點(diǎn)(GGSN),以連接GPRS網(wǎng)與外部的Internet網(wǎng)。GPRS模塊可以通過(guò)撥“*99***1#”登錄到GGSN上動(dòng)態(tài)分配到Internet網(wǎng)的IP地址。其間GPRS模塊與網(wǎng)關(guān)的通信要符合點(diǎn)對(duì)點(diǎn)協(xié)議(PointtoPointProtocol,PPP),其中身份驗(yàn)證時(shí)用戶(hù)名、密碼都為空。使用PPP協(xié)議登錄上之后,就可以通過(guò)GGSN接上Internet了。
        3軟件整體結(jié)構(gòu)

        3.1軟件層次結(jié)構(gòu)

          程序中的所有代碼都是由C語(yǔ)言編寫(xiě)的,并采用分層的結(jié)構(gòu),從底到上分別為:串口驅(qū)動(dòng)層、GPRS模塊驅(qū)動(dòng)層、PPP協(xié)議層、IP協(xié)議層、UDP協(xié)議層與應(yīng)用層。上層函數(shù)的實(shí)現(xiàn)需要應(yīng)用到底層函數(shù),而底層函數(shù)的任務(wù)就是為上層函數(shù)提供服務(wù),最終完成應(yīng)用層任務(wù)——傳送數(shù)據(jù)。各層的主要函數(shù)如圖2所示。

        按此在新窗口瀏覽圖片

        圖2軟件層次結(jié)構(gòu)

        3.2驅(qū)動(dòng)程序編寫(xiě)

          首先是串行口驅(qū)動(dòng)層。它實(shí)現(xiàn)打開(kāi)串口(OpenComm)、關(guān)閉串口(CloseComm)、讀串口數(shù)據(jù)(ReadComm)、寫(xiě)串口數(shù)據(jù)(WriteComm)等函數(shù)。例如WriteComm函數(shù)向串口發(fā)送一個(gè)字節(jié)的數(shù)據(jù),而transmit函數(shù)向串口發(fā)送一個(gè)字符串的數(shù)據(jù):

        voidWriteComm(charc){
          ES=0;
          SBUF=c;
          while(TI==0);
          TI=0;
          ES=1;
        }
        voidtransmit(char*data){
          Delay(250);
          while(*data){
            WriteComm(*data++);
          }
        }

          然后,在這些串口函數(shù)的基礎(chǔ)上編寫(xiě)GPRS模塊的驅(qū)動(dòng)函數(shù)。微控制器通過(guò)串行口控制GPRS模塊,進(jìn)行撥號(hào)、設(shè)置等操作。控制的方法是采用AT命令。在控制GPRS模塊撥打移動(dòng)夢(mèng)網(wǎng)GGSN的登錄號(hào)碼“*99***1#”之后,GPRS模塊就轉(zhuǎn)入在線(xiàn)模式(On-Line)。此時(shí)微控制器向串行口發(fā)送的所有數(shù)據(jù)都透明地傳送給了GGSN,同樣GGSN的回答也傳回的串行口。當(dāng)數(shù)據(jù)傳送完成后,微控制器需要通知GPRS模塊結(jié)束會(huì)話(huà),并從在線(xiàn)模式轉(zhuǎn)回普通的命令模式,這可以通過(guò)置高DTR線(xiàn)完成。同時(shí),如果線(xiàn)路由于異常斷開(kāi),CD線(xiàn)會(huì)回復(fù)到平常的低電平,所以處于在線(xiàn)模式下也要不斷檢測(cè)CD線(xiàn)是否處于高電平。根據(jù)這些操作,可以編寫(xiě)GPRS驅(qū)動(dòng)函數(shù):初始化GPRS模塊函數(shù)(GPRSInit)、撥號(hào)函數(shù)(GPRSDial)、斷開(kāi)連接函數(shù)(GPRSHangup)、檢測(cè)是否處于在線(xiàn)狀態(tài)函數(shù)(GPRSOnline)。其中,GPRS的撥號(hào)和掛斷代碼如下:

        BYTEGPRSDial(void){
          signedchardelayCount=80;
          transmit("ATV0r");//要求返回?cái)?shù)字表示的回答
          if(!Waitfor("0",30)){//等待OK回答
            return-1;
          }
          DTR_ON;
          transmit("ATD*99***1#r");//撥GGSN的號(hào)碼
          GPRSBuffFlush();//清空buffer
          //等待回答
          while((!GPRSBuffNotEmpty())(--delayCount>0)){
            Delay(250);
          }
          if(delayCount){
            returnGPRSGetch();//返回回答的數(shù)字
          }
          return-1;//沒(méi)有返回,錯(cuò)誤
        }

        voidGPRSHangup(void){
          DTR_ON;//置高DTR
          Delay(40);//保持一定時(shí)間
          DTR_OFF;//完成連接的斷開(kāi)
        }

          這些底層的驅(qū)動(dòng)函數(shù)將會(huì)使上層協(xié)議的編寫(xiě)很方便,更重要的是,它為我們提供了一個(gè)驅(qū)動(dòng)抽象層。當(dāng)?shù)讓佑布龀龈膭?dòng)的時(shí)候,只需要對(duì)底層的驅(qū)動(dòng)函數(shù)進(jìn)行改動(dòng),而上層函數(shù)的代碼不變。


        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 安岳县| 通榆县| 鹤岗市| 集安市| 旺苍县| 新郑市| 安远县| 北票市| 耿马| 伊川县| 兴国县| 金塔县| 吉水县| 青神县| 长治市| 沂源县| 张家界市| 娱乐| 武义县| 静乐县| 鸡东县| 昌图县| 密云县| 海伦市| 河曲县| 张北县| 西青区| 黄冈市| 铜山县| 花莲县| 新龙县| 天长市| 察隅县| 南安市| 西和县| 泰宁县| 宁远县| 安塞县| 呼玛县| 华安县| 常山县|