摘 要:給出單片機(jī)上網(wǎng)的可行方案,采用SST89E564RD單片機(jī),既提供了網(wǎng)關(guān)服務(wù),也實現(xiàn)了在線仿真和下載的功能。由于51單片機(jī)資源有限,精簡了TCP/IP協(xié)議族,在8位單片機(jī)上實現(xiàn)了UDP、TCP、ICMP、IP、ARP協(xié)議,為嵌入式系統(tǒng)通過以太網(wǎng)接入Internet打下了基礎(chǔ)。經(jīng)過幾個月的軟硬件測試表明:系統(tǒng)設(shè)計合理、穩(wěn)定可靠。
關(guān)鍵詞:單片機(jī); 以太網(wǎng); TCP/IP; UDP
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:B
文章編號:1004-373X(2010)10-0198-04
Realization of Embedded TCP/ IP Protocol Stack on MCU
WANG Fang1, ZHOU You-xia2
(1.School of Electronics and Information Engineering, Sanjiang University, Nanjing 210012, China;
2. Property Division of Xisan District, Wuxi 214000, China)
Abstract:A feasible project about MCU access to the Internet is presented, With SST89E564RD, the Ethernet protocol gateway services are provided, and the on-line debugging and downloading functions are realized., The TCP/IP protocol family is simplified because of the limited resources of 51 MCU. The UDP, TCP, ICMP, IP, ARP protocols were achieved on an 8-bit MCU, which lays the good foundation for embedded system to access the Internet through Ethernet. The software and hardware testing in several months shows that the new detection system is reasonable, stable and reliable.
Keywords:MCU; Ethernet; TCP/IP; UDP
隨著嵌入式設(shè)備與網(wǎng)絡(luò)的日益結(jié)合,在單片機(jī)系統(tǒng)中引入TCP/IP協(xié)議棧,以支持單片機(jī)接入網(wǎng)絡(luò),成為嵌入式領(lǐng)域的一個重要方向。在此對基于SST89E516RD單片機(jī)的TCP/IP協(xié)議棧的實現(xiàn)方法給予討論。選用SST89E516RD單片機(jī)實現(xiàn)了在線仿真和編程的功能,大大節(jié)約了開發(fā)成本。采用VB 6.0語言與Window 98/2000/XP等為軟件開發(fā)平臺,對系統(tǒng)進(jìn)行了測試。經(jīng)過幾個月的軟硬件測試表明:系統(tǒng)設(shè)計合理、穩(wěn)定可靠,已基本實現(xiàn)了最初的設(shè)計目標(biāo)。對其他類似系統(tǒng)移植該項技術(shù)奠定了基礎(chǔ),有很好的參考價值。
1 系統(tǒng)硬件實現(xiàn)
整個系統(tǒng)以SST89E516RD單片機(jī)為核心,通過RTL8019AS以太網(wǎng)控制芯片實現(xiàn)遠(yuǎn)程通信。串口完成網(wǎng)卡參數(shù)的修改、在線仿真。在系統(tǒng)中還使用X5045作為外部擴(kuò)展的E2PROM,用來存儲IP地址、物理地址以及網(wǎng)卡的其他配置信息,同時X5045還具有電壓監(jiān)控、看門狗定時器、上電復(fù)位三種功能,使用X5045監(jiān)控系統(tǒng)的運(yùn)行過程,當(dāng)系統(tǒng)不穩(wěn)定時可以進(jìn)行有效地復(fù)位。圖1為系統(tǒng)硬件結(jié)構(gòu)圖。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
2 系統(tǒng)軟件實現(xiàn)
系統(tǒng)軟件主要包括客戶端和服務(wù)器端軟件的設(shè)計,主要有以下幾部分內(nèi)容:
(1)RTL8019AS的初始化和驅(qū)動程序的設(shè)計;
(2)數(shù)據(jù)幀的發(fā)送和接收子程序;
(3)TCP/IP協(xié)議棧程序的設(shè)計;
(4)客戶端和服務(wù)器端程序的設(shè)計;
(5)X5045看門狗和E2PROM程序的設(shè)計。
系統(tǒng)的主程序流程圖如圖2所示。
由圖2可知,系統(tǒng)首先完成對單片機(jī)定時器、串口、網(wǎng)卡芯片和以太網(wǎng)等部分的初始化,然后進(jìn)入以太網(wǎng)處理部分的主程序,通過定時器中斷進(jìn)行網(wǎng)口數(shù)據(jù)的超時出錯處理,并完成TCP定時器?;詈虯RP表生存時間的更新。
圖2 主程序流程圖
2.1 系統(tǒng)初始化
所謂初始化和驅(qū)動程序是指實模式下一組硬件芯片的驅(qū)動子程序,它們屏蔽了底層硬件處理細(xì)節(jié),同時向上層軟件提供與硬件無關(guān)的接口。主要包括定時器初始化,初始化PING表、ARP表,初始化TCP,RTL8019AS的初始化等。RTL8019AS的初始化主要包括網(wǎng)卡的復(fù)位和網(wǎng)卡寄存器的初始化。RTL8019AS的初始化主要包括網(wǎng)卡的復(fù)位和網(wǎng)卡寄存器的初始化。RTL8019AS內(nèi)部寄存器有4頁,與NE2000兼容的有3頁,第4頁不用。頁選擇由CR寄存器的PS1,PS0位確定。在零頁寄存器中可以設(shè)置接收、發(fā)送狀態(tài)配置以及發(fā)送緩存區(qū)的起始頁與接收緩存區(qū)起止頁地址等;在1頁寄存器中可以設(shè)置以太網(wǎng)接口的MAC地址和組播地址。對網(wǎng)卡的初始化就是對相關(guān)寄存器初始化,這些寄存器包括CR,RCR,TCR,PSTART,PSTOP,BNRY,TPSR,ISR,DCR,IMR,CURR,PAG0~PAG5,MAR0~MAR5等。初始化過程如下:
(1) CR=0x21,選擇頁零的寄存器同時使芯片處于停止模式,不會發(fā)送和接收數(shù)據(jù)包;
(2) RCR=0xE0,設(shè)置接收結(jié)構(gòu)寄存器,monitor方式,所有數(shù)據(jù)包都被拒絕;
(3) TCR=0xE2,設(shè)置發(fā)送配置寄存器,工作在內(nèi)部lookback模式;
(4) PSTART=0x4C,接收緩沖區(qū)開始頁面地址;
(5) PSTOP=0x80,接收緩沖區(qū)中止頁面地址;
(6) BNRY=0x4C,接收緩沖區(qū)最后頁面指針;
(7) TPSR=0x40,發(fā)送頁的起始頁地址,初始化為指向第一個發(fā)送緩沖區(qū)的頁即0x40;
(8) ISR=0xFF,清除所有中斷標(biāo)志;
(9) DCR=0xC8,設(shè)置數(shù)據(jù)配置寄存器,使用FIFO緩存,普通模式,8位數(shù)據(jù)DMA;
(10) IMR=0x00,設(shè)置中斷屏蔽寄存器,屏蔽所有中斷;
(11) CR=0x61,選擇頁一的寄存器;
(12) CURR=0x4D,網(wǎng)卡寫內(nèi)存的指針,指向當(dāng)前正在寫的頁的下一頁,初始化時指和0x4C+1=0x4D;
(13) 設(shè)置多址寄存器MAR0~MAR5,均設(shè)置為0x00;
(14) CR=0x22,使網(wǎng)卡芯片開始工作;
(15) 設(shè)置網(wǎng)卡地址寄存器PAR0~PAR5;
(16) CR=0x21,選擇頁零的寄存器;
(17) RCR=0xCC,設(shè)置接收結(jié)構(gòu)寄存器,設(shè)置為使用接收緩沖區(qū),跟外部網(wǎng)絡(luò)連接;
(18) TCR=0xE0,設(shè)置發(fā)送配置寄存器,啟用CRC自動生成和自動校驗,工作在正常模式;
(19) CR=0x22,使網(wǎng)卡芯片開始工作;
(20) ISR=0xFF,清除所有中斷標(biāo)志;
2.2 TCP/IP協(xié)議棧的移植
以太網(wǎng)幀的發(fā)送與接收屬于協(xié)議層中的最底層。發(fā)送前的協(xié)議封裝和接收時的協(xié)議分解都非常簡單。封裝時,只需在上層封裝數(shù)據(jù)前面添加14 B的以太網(wǎng)首部就可以了;接收到數(shù)據(jù)幀之后,根據(jù)頭信息中的幀類型字段判斷是否屬于IP包或ARP包,若是就繼續(xù)相應(yīng)的協(xié)議分解,否則將被丟棄,不予處理。幀的接收工作由網(wǎng)卡自動完成,只需對相關(guān)的寄存器如PSTART,PSTOP,CURR和BNRY進(jìn)行適當(dāng)?shù)某跏蓟纯?。以太網(wǎng)幀的發(fā)送過程如下:
(1) 初始化命令寄存器CR,啟動RTL8019AS;
(2) 設(shè)置數(shù)據(jù)配置寄存器DCR,以字節(jié)方式通信;
(3) 設(shè)置發(fā)送配置寄存器TCR,選擇RTL8019AS數(shù)據(jù)發(fā)送的工作方式;
(4) 設(shè)置遠(yuǎn)程開始地址寄存器RSAR0(低位),RSAR1(高位),指明遠(yuǎn)程DMA操作時所傳送數(shù)據(jù)的起始地址;
(5) 設(shè)置遠(yuǎn)程字節(jié)計數(shù)寄存器RBCR0(低位),RBCR1(高位),指明遠(yuǎn)程DMA操作時所傳送的數(shù)據(jù)的字節(jié)數(shù);
(6) 設(shè)置命令寄存器CR,開始遠(yuǎn)程DMA寫操作。RTL8019AS自動將數(shù)據(jù)I/O端口的數(shù)據(jù)寫入其緩沖區(qū)中;
(7) 開始向數(shù)據(jù)I/O端口傳送需要發(fā)送的數(shù)據(jù);
(8) 數(shù)據(jù)傳送完畢后,設(shè)置發(fā)送頁起始地址寄存器TBCR,指明待發(fā)送數(shù)據(jù)的起始地址;
(9) 設(shè)置發(fā)送字節(jié)計數(shù)寄存器TBCR0(低位),TBCR1(高位),指明待發(fā)送數(shù)據(jù)的字節(jié)數(shù);
(10) 設(shè)置命令寄存器CR,啟動本地DMA操作,把緩沖區(qū)中的數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上;
(11) 結(jié)束。
需要指出的是,數(shù)據(jù)在發(fā)送前必須先由上到下進(jìn)行層層封裝才能正確地發(fā)送出去,同時,接收到的數(shù)據(jù)包還必須自下而上層層解包才能為用戶所識別,即協(xié)議分解。在協(xié)議編程實現(xiàn)中,數(shù)據(jù)封裝與協(xié)議分解互為逆過程。這就是說,必須在數(shù)據(jù)采集子系統(tǒng)中實現(xiàn)嵌入式TCP/IP協(xié)議才能完成數(shù)據(jù)的TCP/IP處理。
2.3 客戶端和服務(wù)器端程序的設(shè)計
分別設(shè)計客戶端和服務(wù)器端程序,適應(yīng)于不同的工作場合。在面向連接的TCP協(xié)議中,服務(wù)器和客戶機(jī)開始通信之前必須首先建立連接。在連接之前,服務(wù)器程序必須正在運(yùn)行并處于監(jiān)聽模式,等待客戶端的連接。TCP的連接是通過3次握手協(xié)議來完成的。首先,客戶端發(fā)送1個SYN標(biāo)志位的TCP段給服務(wù)器,其帶有所選擇段的初始序號。服務(wù)器端收到該報文段后,以1個帶有SYN標(biāo)志的段作為應(yīng)答,其中也給出根據(jù)本身情況選擇的初始序號,并包含對客戶端的確認(rèn)。而客戶端收到服務(wù)器端的應(yīng)答后,再次送回1個報文段,其中帶有對服務(wù)器端SYN的確認(rèn)。這樣雙方的連接就建立了,以后就能開始傳送數(shù)據(jù)。同樣終止1條TCP連接實際上也需3次握手過程。
3 應(yīng)用系統(tǒng)實現(xiàn)
為了驗證系統(tǒng)的可行性,應(yīng)用VB開發(fā)了接口程序,構(gòu)建了軟硬件測試平臺,用來設(shè)置網(wǎng)卡的配置參數(shù)并實現(xiàn)數(shù)據(jù)的發(fā)送與接收。所有配置參數(shù)包括(本地IP地址、服務(wù)器端IP地址、端口號、網(wǎng)卡物理地址、ping的IP地址、串口號等)都能通過串口動態(tài)地更改。系統(tǒng)能實現(xiàn)Ping的功能,以方便檢查以太網(wǎng)的狀態(tài)。
3.1 參數(shù)設(shè)置界面
用串口線將測試板(數(shù)據(jù)采集和控制系統(tǒng)模塊,下同)與計算機(jī)連接起來,選擇好串口號,然后按“連接單片機(jī)”按鈕,連接狀態(tài)工具欄里出現(xiàn)“已經(jīng)連接”,說明測試板與計算機(jī)已經(jīng)連接上,然后就可以修改配置參數(shù)了。在參數(shù)設(shè)置欄中填寫正確的參數(shù)值后,按“設(shè)定”按鈕,接收狀態(tài)欄中會提示參數(shù)設(shè)置成功,然后按測試板上的復(fù)位鍵,網(wǎng)卡的參數(shù)配置
就被寫到了X5045中。參數(shù)設(shè)置界面如圖3所示。
3.2 數(shù)據(jù)收發(fā)測試界面
分別測試客戶端和服務(wù)器端軟件通信是否正常。
(1) 服務(wù)器端程序的測試
打開客戶端測試界面,如圖4所示,設(shè)置連接IP地址為192.168.0.44(該地址必須與服務(wù)器端的IP地址一致),設(shè)置連接端口號為3330(該端口號必須與服務(wù)器端端口號一致)。將作為服務(wù)器端的程序燒入到測試板的微處理器中,通過圖3修改配置界面,將服務(wù)器端需要的參數(shù)寫入X5045,參數(shù)配置包括:“單片機(jī)IP地址”(指的是測試板自身的IP地址)為192.168.0.44,“服務(wù)器端IP地址”可以不用設(shè)置(因為測試板本身就即服務(wù)器端);如果是新網(wǎng)卡芯片,還需要設(shè)置MAC地址,這里設(shè)為121314151617(一般選擇任意的12位數(shù)即可);“服務(wù)器端口號”設(shè)為3330(必須與客戶端一致);網(wǎng)關(guān)設(shè)為192.168.0.1(要與上位機(jī)保持在同一個網(wǎng)段內(nèi))。設(shè)置好所有參數(shù)后,可以進(jìn)行數(shù)據(jù)的收發(fā)了。
圖3 修改配置參數(shù)界面
圖4 客戶端測試界面
(2) 客戶端程序的測試
打開服務(wù)器端測試界面,如圖5所示。
圖5 服務(wù)器端測試界面
設(shè)置連接IP地址為192.168.0.44(該地址指的是上位機(jī)自身的IP,必須與客戶端設(shè)置的“服務(wù)器端IP地址”一致),設(shè)置連接端口號為3330(該端口號須與客戶端設(shè)置的“服務(wù)器端口號”一致)。將作為客戶端的程序燒入到系統(tǒng)的微處理器中,參數(shù)配置:“服務(wù)器IP地址”(指的是上位機(jī)的IP地址)為192.168.0.44,“單片機(jī)IP地址”可以不用設(shè)置(因為系統(tǒng)僅作為客戶端),“服務(wù)器端口號”設(shè)為3330(必須與客戶端一致),網(wǎng)關(guān)設(shè)為192.168.0.1(要與上位機(jī)保持在同一個網(wǎng)段內(nèi))。設(shè)置好所有參數(shù)之后,即可進(jìn)行數(shù)據(jù)收發(fā)。服務(wù)器端的數(shù)據(jù)可以被發(fā)送到串口,同樣,數(shù)據(jù)也可以從串口發(fā)送到服務(wù)器端。
測試表明:上位機(jī)通過以太網(wǎng)與系統(tǒng)之間的通信正常。
4 結(jié) 語
在此實現(xiàn)了TCP/IP協(xié)議棧在單片機(jī)上的移植,完成了系統(tǒng)的硬件電路和相關(guān)嵌入式軟件的設(shè)計,應(yīng)用VB開發(fā)了上位機(jī)修改參數(shù)界面,通過串口完成對網(wǎng)卡等參數(shù)的配置和修改,解決了數(shù)據(jù)包的超時重發(fā)、定時保活、參數(shù)配置、硬件看門狗復(fù)位等一系列問題。實驗表明,整套程序比較穩(wěn)定,收發(fā)數(shù)據(jù)正常,TCP超時重傳效果很好。經(jīng)過近1個月的測試,沒有出現(xiàn)任何丟包和堵塞的現(xiàn)象。
參考文獻(xiàn)
[1]熊育悅,趙哲分.工業(yè)以太網(wǎng)在控制系統(tǒng)中的應(yīng)用前景[J].儀表技術(shù),2002(3):37-39.
[2]陳積明,王智,孫優(yōu)賢.工業(yè)以太網(wǎng)的研究現(xiàn)狀及展望[J].化工自動化及儀表,2001,28(6):1-4.
[3]馬利,李佐儒,楊四海.實現(xiàn)電子設(shè)備的網(wǎng)絡(luò)化解決方案[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2002(2):8-10.
[4]李廣弟,朱月秀,王秀山.單片機(jī)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2003.
[5]康華光.電子技術(shù)基礎(chǔ)(模擬部分)[M].北京:高等教育出版社,1998.
[6]微型計算機(jī)及外部設(shè)備常用芯片手冊編輯委員會.微型計算機(jī)及外部設(shè)備常用芯片手冊[M].北京:清華大學(xué)出版社,1999.
[7]周立功.單片機(jī)實驗與實踐[M].北京:北京航空航天大學(xué)出版社,2004.
[8]趙海蘭,錢國寶,徐煜祥.利用SST89C58的IAP/ISP實現(xiàn)的在線仿真技術(shù)[J].沙洲職業(yè)工學(xué)院學(xué)報,2003,6(5):8-11.
[9]周向紅.X5045芯片在單片機(jī)系統(tǒng)中的應(yīng)用[J].現(xiàn)代電子技術(shù),2006,29(5):111-112,116.
[10]魏計林,邱選兵,王青獅,等.單芯片嵌入式網(wǎng)關(guān)在煤礦井下人員定位中的應(yīng)用[J].現(xiàn)代電子技術(shù),2008,31(21):143-145,149.
[11]馮麗慧,陳愛國,張磊.一種基于內(nèi)嵌TCP/IP的抄表器的設(shè)計[J].現(xiàn)代電子技術(shù),2008,31(14):33-34,40.
[12]武永梅.基于嵌入式的以太網(wǎng)與現(xiàn)場總線協(xié)議網(wǎng)關(guān)的設(shè)計[D].太原:太原理工大學(xué),2006.
[13]吳艷光.嵌入式TCP/IP協(xié)議棧設(shè)計方法的研究[D].太原:太原理工大學(xué),2004.