摘要:將TCP/IP協(xié)議移植到8位MCU上,同時在傳輸?shù)奈募屑尤際TML代碼,實現(xiàn)了一個WEBSERVER,并用其對一個液晶顯示屏進行控制和監(jiān)視。本系統(tǒng)用雙絞線代替RS232、RS485、CAN等總線進行組網(wǎng),可以廣泛應(yīng)用在各種嵌入式系統(tǒng)中。
關(guān)鍵詞:TCP/IP;8051MCU;HTML
中圖分類號:TP36文獻標識碼:A文章編號:1009-3044(2008)31-0863-04
Transplant and Application of TCP/IP Protocol Based on 8051MCU
WANG Xiao-min, NA Wen-peng
(Information Science Enginneering College, Liaoning University of Techology, Jinzhou 121001, China)
Abstract: A WEBSERVER is designed by transplanting TCP/IP protocol to 8 bit MCU and transmitting file with HTML code.The WEBSERVER is used to control a LED.This system in which RS232,RS485,CAN bus is replaced by UTP-5 cable can be universally used in Embedded System.
Key words: TCP/IP; 8051MCU; HTML
1 引言
隨著電子信息技術(shù)的迅猛發(fā)展,嵌入式系統(tǒng)已經(jīng)在社會生活的各個方面得到廣泛的應(yīng)用。為了實現(xiàn)多個嵌入式系統(tǒng)的互聯(lián),工程師們利用RS232、RS485及CAN等進行組網(wǎng)。這樣組成的網(wǎng)絡(luò)覆蓋范圍有限,而且成本也較高。另一方面,INTERNET技術(shù)飛速發(fā)展,它已成為社會最主要的信息基礎(chǔ)設(shè)施,它具有覆蓋范圍廣,技術(shù)成熟,數(shù)據(jù)傳輸速度快,價格低廉等優(yōu)點。針對這種情況,我們設(shè)計一個系統(tǒng),將應(yīng)用最廣泛的INTERNET協(xié)議即TCP/IP協(xié)議移植到8位MCU上,同時在傳輸?shù)奈募屑尤際TML代碼,實現(xiàn)了一個WEBSERVER,并用其對一個液晶顯示屏進行控制和監(jiān)視。這一系統(tǒng)保證了數(shù)據(jù)傳輸?shù)目煽啃裕岣吡藬?shù)據(jù)傳輸?shù)乃俣龋昧朔植紡V泛的INTERNET,同時也為用戶提供了一個友好的操作界面,可以很方便的利用PC機上的瀏覽器對MCU進行遠程控制。
2 系統(tǒng)的硬件結(jié)構(gòu)
系統(tǒng)結(jié)構(gòu)如圖1所示。STC89C516RD+是一款高性能的MCU,它具有64K的片內(nèi)FLASH和1280BYTE的片內(nèi)RAM,最高時鐘頻率可達80M。與之相連的RTL8019AS是以太網(wǎng)控制器,它為系統(tǒng)提供最基本的網(wǎng)絡(luò)物理層接口。HM62256是32K的外部RAM,主要用于存放網(wǎng)絡(luò)上來的數(shù)據(jù)和即將發(fā)送到網(wǎng)絡(luò)上的數(shù)據(jù)。RS232接口用于下載程序和調(diào)試程序。外部設(shè)備指一些被系統(tǒng)控制著的設(shè)備,如傳感器,液晶屏等,本文系統(tǒng)使用的是液晶屏。
3 系統(tǒng)的工作流程
系統(tǒng)上電后首先初始化液晶顯示器,根據(jù)最初的顯示參數(shù)調(diào)用display( )函數(shù)控制液晶屏的顯示,接著初始化TCP/IP協(xié)議棧和RTL8019AS,之后MCU開始監(jiān)聽80端口,若收到請求則發(fā)送一個登錄頁面給客戶端,繼續(xù)監(jiān)聽,用戶在瀏覽器輸入用戶名及密碼發(fā)送,MCU收到正確用戶名和密碼后發(fā)送主頁面,主頁面中包含液晶顯示器狀態(tài)及配置選項。MCU收到配置信息后修改顯示參數(shù)并調(diào)用display( )控制液晶屏的顯示,然后發(fā)送修改過的主頁面給客戶端,客戶可以在瀏覽器中的顯示狀態(tài)區(qū)看到配置后的顯示狀態(tài)以確定配置是否生效。流程圖如圖2所示。
4 RTL8019AS簡介
RTL8019AS是由臺灣REALTEK公司生產(chǎn)的以太網(wǎng)控制芯片。
RTL8019AS由接收邏輯控制器、接收CRC校驗、接收計數(shù)器、FIFO邏輯隊列、發(fā)送邏輯控制器、發(fā)送CRC校驗、內(nèi)部總線、IO緩沖區(qū)等組成。它的工作流程是:接收邏輯在接收時鐘的控制下將串行數(shù)據(jù)組成字節(jié)送到FIFO和CRC,發(fā)送邏輯將FIFO送來的字節(jié)在發(fā)送時鐘的控制下逐位移出并送到CRC,CRC邏輯在接收是對輸入的數(shù)據(jù)進行CRC校驗并將結(jié)果與幀尾的CRC比較,如不同該幀數(shù)據(jù)將被拋棄,在發(fā)送時CRC對幀數(shù)據(jù)產(chǎn)生CRC校驗碼并附加在數(shù)據(jù)尾傳送,地址識別邏輯對接收幀的目的地址與預(yù)先設(shè)置的物理地址(又叫MAC地址)
進行比較,如不同且不是廣播地址,該幀將被拋棄。
RTL8019AS片內(nèi)有16KB的RAM,地址為0X4000—0X7FFF,每256個字節(jié)稱為一頁,共64頁。頁的地址就是地址的高8位,頁地址為0X40—0X7F。這16K的RAM一部分用來存放接收的數(shù)據(jù)包,一部分用來存儲待發(fā)送的數(shù)據(jù)包。RTL8019AS還提供32個IO端口地址,地址偏移量為00H—1FH。其中,00H—1FH為特殊功能寄存器地址,10H—17H為DMA地址,18H—1FH為復(fù)位端口。特殊功能寄存器分為四頁,我們只用到前三頁。下面介紹幾個重要的寄存器。
CR是控制寄存器,其各位的定義如下所示。
■
PS1和PS0用來選擇寄存器頁,例如:寫入10表示選擇第二頁。
RD2、RD1、RD0表示執(zhí)行的功能,如表1所示。
TXP在發(fā)送數(shù)據(jù)包時置1,發(fā)送完成自動置0。
最后兩位用來啟動和停止命令。
CURR和BNRY用來控制緩沖區(qū)的存取過程,保證能順次寫入和讀出。
PAR0—PAR5用來存放MAC地址。
10H—17H為DMA地址,只需取一個進行使用,我們?nèi)?0H,向10H中寫數(shù)據(jù)就是向16K的RAM寫數(shù)據(jù)。
18H—1FH復(fù)位端口,對其中的偶數(shù)地址讀或?qū)憯?shù)據(jù),都會引起芯片復(fù)位,可以通過讀或?qū)戇@個端口來軟件復(fù)位。
本系統(tǒng)中RTL8019AS的IO端口的基地址為240H(對網(wǎng)卡來說),對應(yīng)的MCU尋址地址為8000H—8F00H。MCU與RTL8019AS連接如圖3所示。
5 TCP/IP協(xié)議的移植
TCP/IP是一個龐大的協(xié)議棧,8位MCU資源有限,這里我們選擇移植部分協(xié)議,移植的協(xié)議有ARP協(xié)議,IP協(xié)議,ICMP協(xié)議,TCP協(xié)議,HTTP協(xié)議以及為以上各協(xié)議服務(wù)的以太網(wǎng)協(xié)議。
5.1 以太網(wǎng)協(xié)議
以太網(wǎng)協(xié)議直接對以太網(wǎng)芯片進行操作并為上層協(xié)議提供服務(wù),本文使用DIX ETHERNET V2幀結(jié)構(gòu),如下所示。
■
以太網(wǎng)協(xié)議提供一個函數(shù)query_8019( ),主函數(shù)調(diào)用query_8019( )時,query_8019( )檢查CURR=BNRY+1是否成立,若成立則說明無新到數(shù)據(jù)包,若不成立則說明有新到的數(shù)據(jù)包。若有新到數(shù)據(jù)包,主函數(shù)調(diào)用以太網(wǎng)協(xié)議提供的rcve_frame( )函數(shù)為以太幀分配存儲空間并將其讀入,之后調(diào)用太網(wǎng)協(xié)議提供的
eth_rcve( )函數(shù),該函數(shù)對幀類型字段進行檢查,把符合要求的幀去掉幀頭后送給IP或ARP協(xié)議處理。發(fā)送數(shù)據(jù)時,eth_send( )函數(shù)為上層來的數(shù)據(jù)包增加幀頭,并調(diào)用send_frame( )函數(shù)通過遠程DMA寫操作將幀發(fā)送出去。
5.2 IP協(xié)議
IP協(xié)議提供的是一種無連接不可靠的數(shù)據(jù)傳輸方式,它只提供傳輸服務(wù),可靠性由TCP保證。IP協(xié)議調(diào)用ip_rcve( )函數(shù)對網(wǎng)絡(luò)上來的IP包進行校驗,比較IP地址,檢測協(xié)議類型,然后轉(zhuǎn)到TCP或ICMP進一步處理。IP協(xié)議調(diào)用ip_send( )函數(shù)為上層來的數(shù)據(jù)包增加IP數(shù)據(jù)報報頭,然后交給以太網(wǎng)協(xié)議處理。
5.3 ARP協(xié)議
ARP協(xié)議實現(xiàn)從IP地址到MAC地址的對應(yīng),當(dāng)系統(tǒng)要發(fā)送一個IP包時,首先到ARP地址緩存中查詢該IP地址對應(yīng)的MAC地址,然后才能生成以太網(wǎng)幀發(fā)送出去。ARP報文格式如下所示:
■
當(dāng)收到一個ARP請求,ARP協(xié)議調(diào)用arp_send( )發(fā)送一個ARP應(yīng)答,并檢查地址緩存中是否有請求方的IP和MAC,若沒有則將其加入。當(dāng)發(fā)送一個IP數(shù)據(jù)包時,系統(tǒng)首先在地址緩存中查找IP地址對應(yīng)的MAC地址,若找到則用該MAC地址生成以太網(wǎng)幀,若沒找到則發(fā)送ARP請求,然后等待ARP應(yīng)答,若收到應(yīng)答則將其加入地址緩存,若經(jīng)過一個等待時間后沒收到應(yīng)答則重發(fā)請求,經(jīng)兩次重發(fā)還沒收到應(yīng)答則放棄這一次IP包的發(fā)送。
5.4 ICMP協(xié)議
本系統(tǒng)的ICMP協(xié)議用于實現(xiàn)PING功能,當(dāng)用戶要檢查系統(tǒng)是否連接正常時,可以用PING命令向系統(tǒng)發(fā)送ICMP包,系統(tǒng)收到后則發(fā)回一個ICMP應(yīng)答包,用戶據(jù)此可以判斷系統(tǒng)是否連通。ICMP報文格式如下所示。
■
5.5 TCP協(xié)議
TCP協(xié)議是面向連接的協(xié)議,它采用三次握手建立連接。
TCP將用戶數(shù)據(jù)打包構(gòu)成報文段,它發(fā)送后啟動一個定時器,另一端對收到的數(shù)據(jù)進行確認,對失序的數(shù)據(jù)重新排序,丟失重復(fù)數(shù)據(jù),TCP計算和驗證一個端到端的檢驗和以保證傳輸?shù)目煽俊?/p>
5.6 HTTP協(xié)議
系統(tǒng)啟動后,等候瀏覽器的請求報文。瀏覽器發(fā)出的HTTP請求報文格式如下所示。
■
請求行中包含方法字段、統(tǒng)一資源標識字段和HTTP版本字段,其中方法字段包括GET和POST等。GET方法取回由統(tǒng)一資源標識標識的信息。POST方法可以請求服務(wù)器接收包含在請求中的實體信息,可以用于提交信息。系統(tǒng)在HTTP報文中檢查方法字段,若方法為GET則發(fā)送HTML網(wǎng)頁代碼。若方法為POST則根據(jù)接收到的參數(shù)調(diào)用與參數(shù)對應(yīng)的函數(shù)調(diào)整對設(shè)備的控制,并修改要發(fā)送的HTML網(wǎng)頁代碼,然后發(fā)送。發(fā)出的HTTP報文由以下兩部分組成。
char code header[] = {
\"HTTP/1.1 200 OK\\"
\"Cache-control: no-cache\\"
\"Connection: Keep-Alive\\"
\"Content-Length: TAG:LEN1\\"
\"Content-Type: text/html\\r\\\r\\" };
char code web_page[] = {……………..}
header[]是HTTP報文頭,其中的TAG:LEN需要由HTML代碼的長度來替換,web_page[]是報文主體,省略的部分是HTML代碼。
6 HTML的應(yīng)用
在瀏覽器輸入WEBSERVER的IP后首先得到的是如下的登錄界面。
■
圖4 登錄界面
其HTML代碼如下
<html>
<head><title>輸入用戶姓名</title></head>
<body>
<form >
請輸入你的姓名:
<input type=tex name=yourname><br>
請輸入你的密碼:
<input type=text name=password>
<input type=submit value=提交>
</form>
</body>
</html>
用戶提交名字和密碼后點擊提交,WEBSERVER檢查其正確與否,若錯誤則發(fā)回一個網(wǎng)頁提示用戶重新輸入,若正確則發(fā)送如下的HTML代碼
<html>
<body>
顯示屏狀態(tài):<br>
<table width=\"350\" border=\"1\">
<tr>
<th align=\"center\">顯示參數(shù)類型</th>
<th align=\"center\">參數(shù)值</th>
</tr>
<tr>
<td align=\"left\">文字內(nèi)容</td>
<td align=\"right\">text</td>
</tr>
<tr>
<td align=\"left\">字體大小</td>
<td align=\"right\">size</td>
</tr>
<tr>
<td align=\"left\">移動方向</td>
<td align=\"right\">direction</td>
</table><br><br><br>
顯示屏參數(shù)設(shè)置:
<form >
文字內(nèi)容:
<input type=text name=neirong><br>
字體大小:
<input type=text name=daxiao><br>
移動方向:
<input type=text name=fangxiang><br>
<input type=submit value=提交>
</form>
</body>
</html>
瀏覽器收到后顯示如圖5參數(shù)設(shè)置和狀態(tài)顯示頁面。
用戶輸入?yún)?shù)并提交,WEBSERVER收到參數(shù)后調(diào)用顯示函數(shù)對液晶屏進行控制并發(fā)回一個網(wǎng)頁,在此網(wǎng)頁中的顯示屏狀態(tài)欄中的text等參數(shù)將被替換為用戶設(shè)置的參數(shù)。
7 結(jié)束語
本系統(tǒng)完成了TCP/IP協(xié)議在8051MCU中的移植,實現(xiàn)了通過瀏覽器這一廣泛使用的工具對液晶屏的遠程控制,對系統(tǒng)稍作修改就可以將其應(yīng)用到其他各種各樣的控制系統(tǒng)中,它具有很好的穩(wěn)定性和很高的傳輸速度,由于其基于廣泛使用的INTERNET,所以其組網(wǎng)的成本也比較低廉,可以取代傳統(tǒng)的總線,具有很好的應(yīng)用前景。
參考文獻:
[1] 周曉峰.單片機上簡單TCP/IP協(xié)議的實現(xiàn)[J].微電子學(xué)與計算機,2004(2):100-102.
[2]REALTEK SEMICONDUCTOR CO.RTL8019AS SPECIFICATION[S].2001.
[3] 李群芳,肖看.單片機原理、接口及應(yīng)用-嵌入式系統(tǒng)技術(shù)基礎(chǔ)[M]. 北京:清華大學(xué)出版社,2005.