《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > 微控制器撥號上網(wǎng)的實現(xiàn)

微控制器撥號上網(wǎng)的實現(xiàn)

2008-08-12
作者:黃承安, 張 躍

  摘? 要: 介紹了一種在微控制器" title="微控制器">微控制器(單片機)上實現(xiàn)PPP協(xié)議,并使其通過ISP連入Internet的方法。分析了PPP協(xié)議,論述了軟件系統(tǒng)的層次結(jié)構(gòu)和實現(xiàn)難點,重點介紹了協(xié)議的簡化方法以適應(yīng)單片機有限的存儲資源。

  關(guān)鍵詞: PPP? 微控制器? 單片機上網(wǎng)? 調(diào)制解調(diào)器

?

  微控制器(也稱單片機)把所有常用的資源,如存儲器、模數(shù)轉(zhuǎn)換器、通用輸入輸出口、定時器等,與CPU集成在一個芯片上,具有體積小、功耗低、使用方便的特點,廣泛應(yīng)用于各種嵌入式系統(tǒng)中。隨著互聯(lián)網(wǎng)(Internet)的興起與普及,使微控制器也接入到互聯(lián)網(wǎng),并通過互聯(lián)網(wǎng)傳送數(shù)據(jù)。但是實現(xiàn)單片機與互聯(lián)網(wǎng)通信的前提是需要在單片機上實現(xiàn)多種繁雜的互聯(lián)網(wǎng)協(xié)議。而微控制器一般處理能力較低、程序存儲器和數(shù)據(jù)存儲器資源有限,這就使微控制器上網(wǎng)變得非常困難。目前,一般采用微控制器直接驅(qū)動網(wǎng)卡芯片的方案。網(wǎng)卡芯片封裝了底層的以太網(wǎng)協(xié)議(如IEEE802.3),微控制器只需控制網(wǎng)卡芯片并實現(xiàn)傳輸層與網(wǎng)絡(luò)層協(xié)議(例如TCP、IP協(xié)議)即可以上網(wǎng)。但其缺點是必須應(yīng)用在已經(jīng)擁有局域網(wǎng)的地方,且網(wǎng)卡芯片(例如RTL8019等)價格不菲。

  本文針對微控制器上網(wǎng)的問題,提出一種在微控制器中實現(xiàn)PPP協(xié)議,并通過調(diào)制解調(diào)器(MODEM)連接到ISP(Internet Service Provider)實現(xiàn)上網(wǎng)的解決方案:微控制器控制MODEM撥號連接到ISP上,然后根據(jù)PPP協(xié)議(Point to Point Protocol)進行通信協(xié)商、密碼認證等握手過程,如果成功就可以通過ISP上網(wǎng)傳送數(shù)據(jù)。這種方案的優(yōu)點在于:(1)可以應(yīng)用于任何覆蓋電話網(wǎng)的地區(qū),適用于廣大偏遠地區(qū);(2)硬件實現(xiàn)比較簡單,程序比較短小;(3)只需外接電話線,安裝簡便。

1 硬件連接與底層驅(qū)動

  微控制器撥號上網(wǎng)解決方案中的硬件連接非常簡單,只需使用微控制器的標(biāo)準(zhǔn)串行口和I/O總線與MODEM相連。為了使程序更為簡化,在硬件設(shè)計中可以不使用MODEM的硬件握手信號。最終只需四根連接線來控制MODEM(如圖1所示):串口" title="串口">串口發(fā)送(TXD)、串口接收(RXD)、載波檢測CD(Carrier Detect)和終端準(zhǔn)備DTR(Data Terminal Ready)信號。CD信號可以檢測MODEM是處于數(shù)據(jù)傳送狀態(tài)還是AT命令傳送狀態(tài)。DTR信號用來通知MODEM傳送工作已經(jīng)結(jié)束。微控制器的串行口和I/O口不能直接與標(biāo)準(zhǔn)MODEM相連,需要使用電壓轉(zhuǎn)換芯片,如MAX232等,轉(zhuǎn)換為RS232標(biāo)準(zhǔn)。

?

  為了方便軟件編程,需要針對硬件編寫一些底層驅(qū)動程序。首先是串行口的驅(qū)動函數(shù):打開串口(OpenComm)、關(guān)閉串口(CloseComm)、讀串口數(shù)據(jù)(ReadComm)、寫串口數(shù)據(jù)(WriteComm)等。然后在這些串口函數(shù)的基礎(chǔ)上編寫MODEM的驅(qū)動函數(shù)。單片機通過串行口控制MODEM,進行撥號、設(shè)置等操作。控制方法采用AT命令,例如:ATDT命令用來撥號、ATV命令控制MODEM返回值的格式等。在控制MODEM撥打ISP的電話號碼后,MODEM就轉(zhuǎn)入在線模式(On-Line),此時微控制器向串行口發(fā)送的所有數(shù)據(jù)都會直接傳送給ISP主機。同樣ISP主機的回答也傳回微控制器的串行口。可以說此時的MODEM和電話線建立了一個從微控制器到ISP的透明數(shù)據(jù)連接。當(dāng)數(shù)據(jù)傳送完成需要斷開連接時,微控制器通知MODEM結(jié)束會話,并從在線模式轉(zhuǎn)回普通的命令模式。這可以通過置高MODEM的DTR線完成。同時,處于在線模式下微控制器也要不斷檢測CD線是否處于高電平,當(dāng)線路由于異常斷開時,CD線會回復(fù)到平常的低電平。根據(jù)這些操作,編寫MODEM驅(qū)動函數(shù):(1)MODEM初始化函數(shù)(ModemInit);(2)撥號函數(shù)(ModemDial);(3)斷開與ISP連接(ModemHangUp);(4)檢測MODEM是否處于在線狀態(tài)(ModemOnLine)等。

  這些底層的驅(qū)動函數(shù)將會使上層協(xié)議的編寫很方便;更重要的是,它提供了一個硬件抽象層。當(dāng)?shù)讓佑布膭訒r,只需要對底層的驅(qū)動函數(shù)改動,而上層函數(shù)的代碼不變。

2 軟件整體結(jié)構(gòu)

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

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

?

  可以看出,為了盡量簡化,在傳輸層使用了UDP協(xié)議而非TCP協(xié)議。其實大多數(shù)情況下使用無連接的UDP協(xié)議已經(jīng)足夠,而且會使程序大幅簡化。

2.2 串口接收中斷的處理

  為了節(jié)省代碼空間,軟件未使用實時操作系統(tǒng),例如μC/OS等,而是利用多個有限狀態(tài)機來控制程序的運行。其中最重要的就是MODEM狀態(tài)機。MODEM可以處在兩個狀態(tài):命令狀態(tài)和在線狀態(tài)。當(dāng)處于命令狀態(tài)時,串行口接收MODEM的返回值信息。而當(dāng)微控制器進行撥號命令之后,MODEM轉(zhuǎn)而處于在線狀態(tài),此時微控制器與ISP直接連接,它們之間的通信要符合PPP報文協(xié)議。因此,串行口接收的是PPP報文。在本程序中,串口使用中斷接收模式,因此在串口接收中斷處理函數(shù)中,首先要判斷MODEM是處于命令狀態(tài)還是在線狀態(tài)。如果處于在線狀態(tài),則要按照PPP報文格式處理。找到一個完整的PPP報文后則通知主循環(huán)處理。中斷處理程序的總體結(jié)構(gòu)如下:

  void serial0() interrupt 4 using 2

  { //串行口中斷處理函數(shù)

  unsigned char c;

?????? EA = 0;

?????? if(RI)

?????? {

????????????? RI = 0;

????????????? c = SBUF;  //獲得串口數(shù)據(jù)

????????????? if(ModemState == COM)

???????????????????? ProModemCommand(c);  //處于命令狀態(tài)

????????????? else

???????????????????? ProPPPReceive(c);   //處于在線狀態(tài),尋找完整的PPP報文

?????? }

??? }

3 PPP協(xié)議的實現(xiàn)

  PPP(Point to Point Protocol)是數(shù)據(jù)鏈路" title="鏈路">鏈路層協(xié)議中的一種,是目前應(yīng)用最廣的一種廣域網(wǎng)協(xié)議。PPP協(xié)議假定兩個對等實體間有一個雙向全雙工的連接,而且數(shù)據(jù)包按順序投遞,這正好符合串行口的通信方式。PPP協(xié)議不需要差錯控制、排序和流量控制,易于實現(xiàn),而且支持對多種高層協(xié)議(如IP、TCP、UDP)的復(fù)用。所以使用PPP撥號上網(wǎng)是微控制器實現(xiàn)Internet連接的最佳選擇。大部分的ISP也正是通過PPP協(xié)議提供網(wǎng)絡(luò)服務(wù)的。

  PPP協(xié)議的幀結(jié)構(gòu)如圖3(a)所示。串口中斷程序以包起始和結(jié)束符來判斷是否有完整的PPP包,并對PPP包的內(nèi)容進行校驗以確定數(shù)據(jù)包的完整性和正確性。然后在主循環(huán)中進入PPP報文解析模塊,在撥號后初次與ISP通信階段,系統(tǒng)首先要與ISP進行通信鏈路的協(xié)商,即協(xié)商點到點的各種鏈路參數(shù)配置。協(xié)商過程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等協(xié)議。其中LCP協(xié)議用于建立、構(gòu)造、測試鏈路連接;PAP協(xié)議用于處理密碼驗證部分;IPCP協(xié)議用于設(shè)置網(wǎng)絡(luò)協(xié)議環(huán)境,并分配IP地址。協(xié)商機制用有限狀態(tài)機的模型來實現(xiàn)。一旦協(xié)商完成,鏈路已經(jīng)創(chuàng)建,IP地址已經(jīng)分配就可以按照協(xié)商的標(biāo)準(zhǔn)進行IP報文的傳輸了。根據(jù)應(yīng)用的不同,IP報文中可以攜帶UDP報文也可以是TCP或ICMP報文。本系統(tǒng)正是采用UDP報文傳送數(shù)據(jù)信息的。數(shù)據(jù)傳輸完成后,下位機會向ISP發(fā)送LCP的斷開連接報文以終止網(wǎng)絡(luò)連接。

?

  值得注意的是,PPP報文、LCP、PAP、IP報文與UDP報文是互相嵌套的。即PPP報文中嵌入了IP報文和LCP、PAP等報文,而IP報文中嵌入了UDP報文。當(dāng)PPP報文的協(xié)議符為0021時表示嵌入了IP數(shù)據(jù)報,為C021時表示嵌入LCP數(shù)據(jù)報,而為C023表示嵌入PAP數(shù)據(jù)報。PPP報文的基本解析過程如圖3(b)所示。

3.1 登錄ISP的協(xié)議協(xié)商過程

  系統(tǒng)的難點之一是微控制器登陸ISP并與ISP的協(xié)商過程,其中需要應(yīng)用到LCP、PAP與IPCP協(xié)議。LCP、PAP與IPCP協(xié)議的幀結(jié)構(gòu)大同小異,最常用的是請求(REQ)、同意(ACK)和拒絕(NAK)三種幀。微控制器與ISP協(xié)商時,任何一方都可以發(fā)送REQ幀請求某方面的配制,另一方如果覺得配置不能接受會回應(yīng)NAK幀,如果可以接受則回應(yīng)ACK幀。為了節(jié)省資源,這里只處理這三種數(shù)據(jù)幀,其它鏈路問題都由微控制器在程序控制下自己重新?lián)芴柦鉀Q。各種配置選項協(xié)商好以后,PPP才可以成功登陸。

  在撥號成功連接后,ISP首先返回一個PAP REQ數(shù)據(jù)幀,微控制器發(fā)送一個空LCP REQ幀以強迫ISP進行協(xié)議協(xié)商階段;隨后ISP發(fā)送LCP設(shè)置幀,微控制器拒絕所有的設(shè)置并請求驗證模式。ISP選擇CHAP或PAP方式驗證,這里只接受PAP方式。然后進行PAP驗證用戶名和密碼過程,如果成功,ISP會返回IPCP報文設(shè)置IP地址。此時,就完成了與ISP的協(xié)商過程,可以通過向ISP發(fā)送IP報文的方式連接互聯(lián)網(wǎng)傳送數(shù)據(jù)了。協(xié)商過程的狀態(tài)轉(zhuǎn)換圖如圖4所示。

?

3.2 IP與UDP報文的解析

  協(xié)商完成后進入IP數(shù)據(jù)報通信階段。此時,微控制器向ISP發(fā)送的所有包含IP報文的PPP報文都會被ISP傳送給IP報文內(nèi)的相應(yīng)IP地址,而遠端所有向微控制器IP地址發(fā)送的報文也都會經(jīng)ISP傳送到單片機,從而完成微控制器與遠程主機通過互聯(lián)網(wǎng)的數(shù)據(jù)傳輸。

  為了使程序盡量簡化,選用IP承載UDP協(xié)議發(fā)送數(shù)據(jù)。在程序中實現(xiàn)IP與UDP報文的數(shù)據(jù)結(jié)構(gòu),向指定的主機IP地址發(fā)送UDP報文較易實現(xiàn)。但應(yīng)注意,在應(yīng)用層需要用戶實現(xiàn)自己的協(xié)議。例如對于遠程讀表系統(tǒng),要規(guī)定儀表的數(shù)據(jù)傳輸協(xié)議;根據(jù)協(xié)議把相應(yīng)的儀表數(shù)據(jù)放入UDP報文中,傳給主機;同時,主機也可以按照協(xié)議向單片機發(fā)送UDP報文。可以利用UDP報文的端口號,把不同的報文發(fā)送到不同的端口中以方便單片機的解析。

????經(jīng)過優(yōu)化,本系統(tǒng)的軟件代碼可以精簡到6K字節(jié)左右,共使用不到300字節(jié)的數(shù)據(jù)存儲器。由于程序使用C語言編寫,稍加改動就可以在各種系列的微控制器上實現(xiàn)。微控制器通過MODEM撥號上網(wǎng)技術(shù),可以廣泛應(yīng)用于需要遠程傳送數(shù)據(jù)的系統(tǒng)中,特別適合遠程抄表、遠程監(jiān)控等領(lǐng)域。

?

參考文獻

1 Simpson W. The Point to Point Protocol(PPP). RFC1661, 1994

2 PPP in HDLC-Like Framing. RFC1662, 1994

3 PPP LCP Extensions.RFC1570,1994

4 李 藝. 面向機頂盒的PPP模塊的設(shè)計.小型微型計算機系統(tǒng), 2001;1

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美视频第二页| 在线观看日韩专区| 久久久人成影片一区二区三区 | 亚洲欧美成人综合| 一本大道av伊人久久综合| 在线看国产日韩| 精品动漫3d一区二区三区| 国产乱人伦精品一区二区| 国产精品久久久久久久app| 欧美视频一区在线| 欧美日一区二区在线观看 | 国产日韩欧美一二三区| 国产伦精品一区二区三区四区免费 | 国产乱码精品1区2区3区| 国产精品久久毛片a| 国产精品拍天天在线| 国产精品毛片va一区二区三区 | 国产欧美日韩| 国产一区二区三区久久悠悠色av| 国产三区二区一区久久| 国产午夜精品理论片a级大结局| 国产欧美一区二区精品秋霞影院| 国产精品日韩精品欧美精品| 国产精品一区二区你懂的| 国产精品一二三四区| 国产欧美视频一区二区| 国产综合18久久久久久| 在线播放国产一区中文字幕剧情欧美 | 在线免费不卡视频| 亚洲国产一成人久久精品| 日韩午夜精品视频| 亚洲一区二区三区三| 先锋资源久久| 91久久久久| 亚洲视频一二三| 欧美在线综合| 久久视频在线看| 欧美久久久久久蜜桃| 国产精品久久久久久久久久久久| 国产日韩欧美| 亚洲国产成人午夜在线一区 | 久久精品国产综合| 一二三区精品| 久久成人免费日本黄色| 免费美女久久99| 国产精品va在线播放| 国产午夜亚洲精品不卡| 亚洲国产91精品在线观看| 99热免费精品在线观看| 欧美福利视频在线| 狠狠色丁香婷婷综合影院| 国产精品美女久久| 精品成人在线观看| 一区二区三区高清在线观看| 欧美一区二区三区在线观看| 亚洲精品社区| 欧美资源在线| 欧美美女视频| 国产视频欧美| 亚洲最新视频在线| 久久成人人人人精品欧| 亚洲无限乱码一二三四麻| 久久av一区| 欧美另类videos死尸| 国产噜噜噜噜噜久久久久久久久| 亚洲丁香婷深爱综合| 亚洲影视在线播放| 亚洲伦理在线| 久久国产加勒比精品无码| 欧美精品自拍偷拍动漫精品| 国产一区二区日韩精品欧美精品| 亚洲伦理在线免费看| 欧美一级播放| 亚洲视频在线观看网站| 麻豆精品在线播放| 国产欧美日韩免费看aⅴ视频| 91久久精品一区二区三区| 午夜精品福利一区二区三区av | 欧美激情精品久久久久久大尺度 | 伊人久久综合97精品| 亚洲一区二区少妇| 亚洲精品免费一区二区三区| 欧美一区国产一区| 欧美日韩小视频| 伊人婷婷久久| 欧美一级片久久久久久久| 亚洲午夜精品一区二区| 免费久久久一本精品久久区| 国产精一区二区三区| 99精品久久| 亚洲精品在线电影| 夜夜嗨av一区二区三区四季av| 久久精品青青大伊人av| 国产精品久久二区| 亚洲精品国产精品乱码不99| 久久国产精品一区二区| 欧美亚洲一区二区在线观看| 欧美日韩一区二区三区在线视频 | 欧美一级久久久| 午夜精品久久久久久久| 欧美日本一道本| 在线免费日韩片| 亚洲电影免费观看高清| 欧美一区二区成人6969| 欧美三级电影一区| 亚洲精品国偷自产在线99热| 最新成人av在线| 久久综合狠狠综合久久综合88| 国产精品一区二区久久久| 一区二区三区成人| 亚洲私人黄色宅男| 欧美日韩高清免费| 亚洲人成在线观看网站高清| 亚洲欧洲精品一区二区三区| 久久婷婷国产麻豆91天堂| 国产日韩欧美成人| 欧美一区二区三区四区在线观看地址 | 久久久久久久久岛国免费| 国产欧美一区二区精品婷婷| 亚洲一区二区在线观看视频| 亚洲尤物在线视频观看| 欧美色图天堂网| 日韩图片一区| 一区二区欧美视频| 欧美日韩国产一级| 99这里有精品| 亚洲欧美日韩中文在线制服| 国产精品免费aⅴ片在线观看| 亚洲午夜久久久久久久久电影网| 亚洲欧美中文日韩在线| 国产欧美va欧美不卡在线| 亚洲欧美制服另类日韩| 久久久久久69| 亚洲国产成人高清精品| 99国产精品国产精品久久 | 欧美视频观看一区| 亚洲永久精品大片| 欧美伊人精品成人久久综合97| 国产欧美综合在线| 久久国产欧美| 女女同性精品视频| 亚洲精品乱码视频| 亚洲永久精品国产| 国产日韩精品久久久| 久久国产主播| 欧美黄在线观看| 亚洲图片欧美午夜| 久久久精品国产免大香伊| 亚洲丶国产丶欧美一区二区三区| 日韩视频免费在线观看| 欧美日韩综合视频| 午夜精品国产精品大乳美女| 久久人人97超碰精品888| 亚洲丰满在线| 亚洲无线视频| 国产一区二区成人| 亚洲精品男同| 国产精品视频大全| 亚洲国产精品成人久久综合一区| 欧美日韩二区三区| 香蕉久久国产| 欧美精品日韩三级| 亚洲午夜久久久| 美日韩精品视频| 夜夜躁日日躁狠狠久久88av| 欧美一区二区三区男人的天堂| 在线观看国产成人av片| 一区二区三区欧美亚洲| 国产日韩综合一区二区性色av| 亚洲三级免费电影| 国产精品久久久久婷婷| 91久久国产自产拍夜夜嗨| 国产精品第一区| 亚洲激情在线观看| 国产精品久久久久国产精品日日 | 老鸭窝亚洲一区二区三区| 艳女tv在线观看国产一区| 久久久xxx| 亚洲毛片在线免费观看| 久久精品系列| 99精品国产热久久91蜜凸| 久久婷婷久久一区二区三区| 99re6热在线精品视频播放速度| 久久久久成人精品免费播放动漫| 亚洲精品资源| 快播亚洲色图| 亚洲欧美在线视频观看| 欧美欧美天天天天操| 欧美在线亚洲在线| 国产精品福利网| 亚洲片在线观看| 国产视频一区二区在线观看| 亚洲视频你懂的| 亚洲成色www8888| 欧美在线免费播放| 野花国产精品入口| 欧美不卡视频一区发布| 香蕉国产精品偷在线观看不卡| 欧美日韩在线一二三| 亚洲日本中文字幕免费在线不卡|