當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]微控制器撥號(hào)上網(wǎng)的實(shí)現(xiàn)

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

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

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

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


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

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

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

程序中的所有代碼都由C語(yǔ)言編寫(xiě),采用分層結(jié)構(gòu),從底到上分別為:串口驅(qū)動(dòng)層、MODEM驅(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所示。

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

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

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

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

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

3.2 IP與UDP報(bào)文的解析
 

 

協(xié)商完成后進(jìn)入IP數(shù)據(jù)報(bào)通信階段。此時(shí),微控制器向ISP發(fā)送的所有包含IP報(bào)文的PPP報(bào)文都會(huì)被ISP傳送給IP報(bào)文內(nèi)的相應(yīng)IP地址,而遠(yuǎn)端所有向微控制器IP地址發(fā)送的報(bào)文也都會(huì)經(jīng)ISP傳送到單片機(jī),從而完成微控制器與遠(yuǎn)程主機(jī)通過(guò)互聯(lián)網(wǎng)的數(shù)據(jù)傳輸。 為了使程序盡量簡(jiǎn)化,選用IP承載UDP協(xié)議發(fā)送數(shù)據(jù)。在程序中實(shí)現(xiàn)IP與UDP報(bào)文的數(shù)據(jù)結(jié)構(gòu),向指定的主機(jī)IP地址發(fā)送UDP報(bào)文較易實(shí)現(xiàn)。但應(yīng)注意,在應(yīng)用層需要用戶實(shí)現(xiàn)自己的協(xié)議。例如對(duì)于遠(yuǎn)程讀表系統(tǒng),要規(guī)定儀表的數(shù)據(jù)傳輸協(xié)議;根據(jù)協(xié)議把相應(yīng)的儀表數(shù)據(jù)放入UDP報(bào)文中,傳給主機(jī);同時(shí),主機(jī)也可以按照協(xié)議向單片機(jī)發(fā)送UDP報(bào)文??梢岳茫眨模袌?bào)文的端口號(hào),把不同的報(bào)文發(fā)送到不同的端口中以方便單片機(jī)的解析。
 
經(jīng)過(guò)優(yōu)化,本系統(tǒng)的軟件代碼可以精簡(jiǎn)到6K字節(jié)左右,共使用不到300字節(jié)的數(shù)據(jù)存儲(chǔ)器。由于程序使用C語(yǔ)言編寫(xiě),稍加改動(dòng)就可以在各種系列的微控制器上實(shí)現(xiàn)。微控制器通過(guò)MODEM撥號(hào)上網(wǎng)技術(shù),可以廣泛應(yīng)用于需要遠(yuǎn)程傳送數(shù)據(jù)的系統(tǒng)中,特別適合遠(yuǎn)程抄表、遠(yuǎn)程監(jiān)控等領(lǐng)域。
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉