微控制器撥號(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),并通過互聯(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à)格不菲。
本文引用地址:http://www.ex-cimer.com/article/149254.htm本文針對(duì)微控制器上網(wǎng)的問題,提出一種在微控制器中實(shí)現(xiàn)PPP協(xié)議,并通過調(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)證等握手過程,如果成功就可以通過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)。最終只需四根連接線來控制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)用來通知MODEM傳送工作已經(jīng)結(jié)束。微控制器的串行口和I/O口不能直接與標(biāo)準(zhǔn)MODEM相連,需要使用電壓轉(zhuǎn)換芯片,如MAX232等,轉(zhuǎn)換為RS232標(biāo)準(zhǔn)。
為了方便軟件編程,需要針對(duì)硬件編寫一些底層驅(qū)動(dòng)程序。首先是串行口的驅(qū)動(dòng)函數(shù):打開串口(OpenComm)、關(guān)閉串口(CloseComm)、讀串口數(shù)據(jù)(ReadComm)、寫串口數(shù)據(jù)(WriteComm)等。然后在這些串口函數(shù)的基礎(chǔ)上編寫MODEM的驅(qū)動(dòng)函數(shù)。單片機(jī)通過串行口控制MODEM,進(jìn)行撥號(hào)、設(shè)置等操作。控制方法采用AT命令,例如:ATDT命令用來撥號(hào)、ATV命令控制MODEM返回值的格式等。在控制MODEM撥打ISP的電話號(hào)碼后,MODEM就轉(zhuǎn)入在線模式(On-Line),此時(shí)微控制器向串行口發(fā)送的所有數(shù)據(jù)都會(huì)直接傳送給ISP主機(jī)。同樣ISP主機(jī)的回答也傳回微控制器的串行口??梢哉f此時(shí)的MODEM和電話線建立了一個(gè)從微控制器到ISP的透明數(shù)據(jù)連接。當(dāng)數(shù)據(jù)傳送完成需要斷開連接時(shí),微控制器通知MODEM結(jié)束會(huì)話,并從在線模式轉(zhuǎn)回普通的命令模式。這可以通過置高MODEM的DTR線完成。同時(shí),處于在線模式下微控制器也要不斷檢測(cè)CD線是否處于高電平,當(dāng)線路由于異常斷開時(shí),CD線會(huì)回復(fù)到平常的低電平。根據(jù)這些操作,編寫MODEM驅(qū)動(dòng)函數(shù):(1)MODEM初始化函數(shù)(ModemInit);(2)撥號(hào)函數(shù)(ModemDial);(3)斷開與ISP連接(ModemHangUp);(4)檢測(cè)MODEM是否處于在線狀態(tài)(ModemOnLine)等。 這些底層的驅(qū)動(dòng)函數(shù)將會(huì)使上層協(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語言編寫,采用分層結(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所示。
{//串行口中斷處理函數(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)文
}
}
值得注意的是,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)文的基本解析過程如圖3(b)所示。
3.1 登錄ISP的協(xié)議協(xié)商過程
系統(tǒng)的難點(diǎn)之一是微控制器登陸ISP并與ISP的協(xié)商過程,其中需要應(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)求某方面的配制,另一方如果覺得配置不能接受會(huì)回應(yīng)NAK幀,如果可以接受則回應(yīng)ACK幀。為了節(jié)省資源,這里只處理這三種數(shù)據(jù)幀,其它鏈路問題都由微控制器在程序控制下自己重新?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)證用戶名和密碼過程,如果成功,ISP會(huì)返回IPCP報(bào)文設(shè)置IP地址。此時(shí),就完成了與ISP的協(xié)商過程,可以通過向ISP發(fā)送IP報(bào)文的方式連接互聯(lián)網(wǎng)傳送數(shù)據(jù)了。協(xié)商過程的狀態(tài)轉(zhuǎn)換圖如圖4所示。
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論