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