<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 微控制器撥號上網(wǎng)的實(shí)現

微控制器撥號上網(wǎng)的實(shí)現

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

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

本文引用地址:http://dyxdggzs.com/article/149254.htm

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

1 硬件連接與底層驅動(dòng)

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


為了方便軟件編程,需要針對硬件編寫(xiě)一些底層驅動(dòng)程序。首先是串行口的驅動(dòng)函數:打開(kāi)串口(OpenComm)、關(guān)閉串口(CloseComm)、讀串口數據(ReadComm)、寫(xiě)串口數據(WriteComm)等。然后在這些串口函數的基礎上編寫(xiě)MODEM的驅動(dòng)函數。單片機通過(guò)串行口控制MODEM,進(jìn)行、設置等操作??刂品椒ú捎茫粒悦?,例如:ATDT命令用來(lái)?yè)芴?、ATV命令控制MODEM返回值的格式等。在控制MODEM撥打ISP的電?huà)號碼后,MODEM就轉入在線(xiàn)模式(On-Line),此時(shí)微控制器向串行口發(fā)送的所有數據都會(huì )直接傳送給ISP主機。同樣ISP主機的回答也傳回微控制器的串行口??梢哉f(shuō)此時(shí)的MODEM和電話(huà)線(xiàn)建立了一個(gè)從微控制器到ISP的透明數據連接。當數據傳送完成需要斷開(kāi)連接時(shí),微控制器通知MODEM結束會(huì )話(huà),并從在線(xiàn)模式轉回普通的命令模式。這可以通過(guò)置高MODEM的DTR線(xiàn)完成。同時(shí),處于在線(xiàn)模式下微控制器也要不斷檢測CD線(xiàn)是否處于高電平,當線(xiàn)路由于異常斷開(kāi)時(shí),CD線(xiàn)會(huì )回復到平常的低電平。根據這些操作,編寫(xiě)MODEM驅動(dòng)函數:(1)MODEM初始化函數(ModemInit);(2)撥號函數(ModemDial);(3)斷開(kāi)與ISP連接(ModemHangUp);(4)檢測MODEM是否處于在線(xiàn)狀態(tài)(ModemOnLine)等。 這些底層的驅動(dòng)函數將會(huì )使上層協(xié)議的編寫(xiě)很方便;更重要的是,它提供了一個(gè)硬件抽象層。當底層硬件改動(dòng)時(shí),只需要對底層的驅動(dòng)函數改動(dòng),而上層函數的代碼不變。

2 軟件整體結構

2.1 軟件層次結構

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

可以看出,為了盡量簡(jiǎn)化,在傳輸層使用了UDP協(xié)議而非TCP協(xié)議。其實(shí)大多數情況下使用無(wú)連接的UDP協(xié)議已經(jīng)足夠,而且會(huì )使程序大幅簡(jiǎn)化。
2.2 串口接收中斷的處理
為了節省代碼空間,軟件未使用實(shí)時(shí)操作系統,例如μC/OS等,而是利用多個(gè)有限狀態(tài)機來(lái)控制程序的運行。其中最重要的就是MODEM狀態(tài)機。MODEM可以處在兩個(gè)狀態(tài):命令狀態(tài)和在線(xiàn)狀態(tài)。當處于命令狀態(tài)時(shí),串行口接收MODEM的返回值信息。而當微控制器進(jìn)行撥號命令之后,MODEM轉而處于在線(xiàn)狀態(tài),此時(shí)微控制器與ISP直接連接,它們之間的通信要符合PPP報文協(xié)議。因此,串行口接收的是PPP報文。在本程序中,串口使用中斷接收模式,因此在串口接收中斷處理函數中,首先要判斷MODEM是處于命令狀態(tài)還是在線(xiàn)狀態(tài)。如果處于在線(xiàn)狀態(tài),則要按照PPP報文格式處理。找到一個(gè)完整的PPP報文后則通知主循環(huán)處理。中斷處理程序的總體結構如下:
void serial0() interrupt 4 using 2
{//串行口中斷處理函數
unsigned char c;
EA = 0;
if(RI) 
{
RI = 0;
c = SBUF;//獲得串口數據
if(ModemState == COM) 
ProModemCommand(c);//處于命令狀態(tài)
else
ProPPPReceive(c);//處于在線(xiàn)狀態(tài),尋找完整
的PPP報文
}
}
3 PPP協(xié)議的實(shí)現
PPP(Point to Point Protocol)是數據鏈路層協(xié)議中的一種,是目前應用最廣的一種廣域網(wǎng)協(xié)議。PPP協(xié)議假定兩個(gè)對等實(shí)體間有一個(gè)雙向全雙工的連接,而且數據包按順序投遞,這正好符合串行口的通信方式。PPP協(xié)議不需要差錯控制、排序和流量控制,易于實(shí)現,而且支持對多種高層協(xié)議(如IP、TCP、UDP)的復用。所以使用PPP撥號上網(wǎng)是微控制器實(shí)現Internet連接的最佳選擇。大部分的ISP也正是通過(guò)PPP協(xié)議提供網(wǎng)絡(luò )服務(wù)的。
PPP協(xié)議的幀結構如圖3(a)所示。串口中斷程序以包起始和結束符來(lái)判斷是否有完整的PPP包,并對PPP包的內容進(jìn)行校驗以確定數據包的完整性和正確性。然后在主循環(huán)中進(jìn)入PPP報文解析模塊,在撥號后初次與ISP通信階段,系統首先要與ISP進(jìn)行通信鏈路的協(xié)商,即協(xié)商點(diǎn)到點(diǎn)的各種鏈路參數配置。協(xié)商過(guò)程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等協(xié)議。其中LCP協(xié)議用于建立、構造、測試鏈路連接;PAP協(xié)議用于處理密碼驗證部分;IPCP協(xié)議用于設置網(wǎng)絡(luò )協(xié)議環(huán)境,并分配IP地址。協(xié)商機制用有限狀態(tài)機的模型來(lái)實(shí)現。一旦協(xié)商完成,鏈路已經(jīng)創(chuàng )建,IP地址已經(jīng)分配就可以按照協(xié)商的標準進(jìn)行IP報文的傳輸了。根據應用的不同,IP報文中可以攜帶UDP報文也可以是TCP或ICMP報文。本系統正是采用UDP報文傳送數據信息的。數據傳輸完成后,下位機會(huì )向ISP發(fā)送LCP的斷開(kāi)連接報文以終止網(wǎng)絡(luò )連接。

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

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

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

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

3.2 IP與UDP報文的解析

協(xié)商完成后進(jìn)入IP數據報通信階段。此時(shí),微控制器向ISP發(fā)送的所有包含IP報文的PPP報文都會(huì )被ISP傳送給IP報文內的相應IP地址,而遠端所有向微控制器IP地址發(fā)送的報文也都會(huì )經(jīng)ISP傳送到單片機,從而完成微控制器與遠程主機通過(guò)互聯(lián)網(wǎng)的數據傳輸。 為了使程序盡量簡(jiǎn)化,選用IP承載UDP協(xié)議發(fā)送數據。在程序中實(shí)現IP與UDP報文的數據結構,向指定的主機IP地址發(fā)送UDP報文較易實(shí)現。但應注意,在應用層需要用戶(hù)實(shí)現自己的協(xié)議。例如對于遠程讀表系統,要規定儀表的數據傳輸協(xié)議;根據協(xié)議把相應的儀表數據放入UDP報文中,傳給主機;同時(shí),主機也可以按照協(xié)議向單片機發(fā)送UDP報文??梢岳茫眨模袌笪牡亩丝谔?,把不同的報文發(fā)送到不同的端口中以方便單片機的解析。
經(jīng)過(guò)優(yōu)化,本系統的軟件代碼可以精簡(jiǎn)到6K字節左右,共使用不到300字節的數據存儲器。由于程序使用C語(yǔ)言編寫(xiě),稍加改動(dòng)就可以在各種系列的微控制器上實(shí)現。微控制器通過(guò)MODEM撥號上網(wǎng)技術(shù),可以廣泛應用于需要遠程傳送數據的系統中,特別適合遠程抄表、遠程監控等領(lǐng)域。

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>