汪文濤 徐 貴 巨永龍 施良偉 湯 超
(安徽工程大學電氣工程學院,安徽 蕪湖 241000)
隨著網絡技術的迅速發展,網絡用戶呈指數增長,在使用計算機進行網絡連互的同時,小至各類家電、儀器儀表設備大至工業生產過程中數據采集、控制設備都在逐步趨向網絡化。網絡數據傳輸技術具有傳輸距離遠、傳輸速率高、信息共享程度高等優點,因此對嵌入式設備增加網絡功能有著深遠的意義。
目前在工業控制領域底層的儀器儀表、各類傳感器的參數等數據幾乎都是通過現場總線的方式進行上傳,但是現場總線的協議并不是統一的,故而在生產過程中帶來極大的不便。由于TCP/IP協議在行業內已有統一的標準,故而利用嵌入式芯片內嵌TCP/IP精簡協議與以太網接口芯片RTL8019AS協同工作便能很好地解決這個問題。這種方法的顯著優點就是成本低、實現簡單。可以說通過以太網進行通信是工業控制領域一大趨勢。
本文以遠程數據傳輸和控制指令傳輸為應用背景,設計了一套基于嵌入式系統的以太網通信模塊。
本系統采用的核心嵌入式控制芯片是C8051F020,該單片機使用美國Cygnal公司的CIP-51微控制器內核。它采用PQFP-100的封裝形式,內部集成了ADC、DAC、PCA、模擬比較器以及多種節電休眠和停機方式,工作頻率高達25MHz。
以太網接口芯片是采用采用RealTek公司生產的RTL8019AS,它符合EthernetII與IEEE802.3標準;全雙工,收發可同時進行,內置16KB的SRAM,用于收發緩沖,降低了對處理器的速度要求;支持8/16位的數據總線;采用了100腳PQFP封裝。
系統主要是由單片機C8051F020來驅動以太網接口芯片RTL8019AS,完成遠程數據的交換和控制指令的交換,從而由單片機發出指令使執行機構進行相應的指令操作。系統結構簡圖如圖1所示:

圖1 系統結構簡圖
從信號采集裝置采集而來的模擬信經過單片機C8051F020內部的AD裝換器變成后續器件能夠處理的數字信號,之后將其按照系統所需要的TCP/IP精簡協議規范要求,逐層進行封裝,得到一個標準的以太網數據幀送往 RTL8019AS,然后數據幀便會按照 IEEE802.3標準經過以太網絡發送到目的地址。接收數據的過程與發送數據過程類似,不再詳述。
由圖1系統結構簡圖易知,硬件設計的主要部分是單片機及其模數信號相互轉換以及以太網通信部分組成。
嵌入式控制器模塊核心采用美國Cygnal公司生產的高性能片上處理系統C8051F020,單個芯片上集成了大量的模擬、數字設備資源,主要包括8路12位逐次逼近型ADC,具有100kbps的最大可編程轉換速率和2.4V的內部電壓基準,也可以選用外部電壓基準;具有多達64個數字I/O端口,支持TTL信號電平;具有多于5個16位定時器/計數器資源;內部集成64KB的 flash程序存儲器;片內集成了符合IEEE1149.1標準的JTAG編程掃描和調試電路,即使不用仿真器,也可以實現全速、非侵入式在系統程序調試。這些單片機資源,降低了成本,并簡化了系統設計的復雜性。
一方面在嵌入式系統中以太網芯片是不允許經常插拔的;另一方面為了精簡系統、降低成本和減少連線,所以本設計方案中使RTL8019AS工作于跳線工作方式,在這種模式下通過連接RTL8019AS的一些引腳來設定其工作方式,省去了要通EEPROM中的內容來決定其工作方式,從而使控制程序變得精簡。如圖2所示其具體實現方式如下:
(1)讓JP腳接高電平,使其工作在跳線工作方式下;
(2)C8051F20的數據總線與芯片RTL8019AS的 SD0-SD7口相連,用于8位數據交換;
(3)地址線A0-A4與芯片RTL8019AS的SA0-SA4地址線相連,用于單片機訪問不同的寄存器;
(4)RD、WR分別為讀、寫信號,RST是芯片RTL8019AS的復位操作,AEN接地,使地址信號有效;
(5)INT0為定時器中斷,用于通知C8051F20讀取RTL8019AS緩沖中的數據;
(6)最后是RTL8019AS經過網絡濾波芯片LPT連接到RJ45接頭。

圖2 RTL8019AS與C8051F20的連接電路圖
軟件部分主要由兩個部分組成,其中包括 TCP/IP精簡協議[1]的實現和RTL8019AS的驅動程序。
TCP/IP實質上是一系列協議的總稱,是實現Internet通訊必不可少的部分,其中包括十幾個協議標準,在本研究課題中僅僅只需要實現嵌入式芯片連機通信,故而只需要選用其中部分即可,選用的標準是使代碼最簡,執行效率最高。以下作出了詳細的介紹。
OSI七層網絡模型理論[3-4]中指出,物理層是提供相鄰設備的比特流傳輸;數據鏈路層負責在兩個相鄰節點間線路上無差錯地傳送以幀為單位的數據,采用IEEE802.3標準的以太網協議;網絡層主要負責處理數據包在網絡中的協議封裝,該層選用IP協議,同時選用ARP協議實現IP地址到MAC物理地址的轉換;傳輸層主要為兩臺主機上的應用程序提供端到端的通信,選用TCP傳輸層協議,但針對底層的采集裝置進行適當的簡化以適應嵌入式要求;應用層則定義了運行在不同端系統上的應用程序進程如何相互傳遞報文,根據本系統的實際需求選用應用層協議中的DNS、FTP以及SNMP三個協議。
RTL8019AS的驅動程序[5]主要由初始化、數據包的收發兩個部分組成,初始化是用來具體RTL8019AS的工作方式,設置一些必要的工作寄存器等;RTL8019AS對于數據包的收發均是采用 IEEE802.3協議,發送部分只要把數據寫入緩沖區,啟動執行命令,芯片會自動發送。通常情況下會在其內部RAM中開辟2個以太網數據包的空間作為發送緩沖區。數據的發送校驗和總線數據包的碰撞檢測與避免都是由芯片自身獨立完成的,只需要配置發送數據的源地址、物理層地址、目的地址、數據包類型和發送的數據即可;RTL8019AS在接收到以太網數據包后自動將其存在接收緩沖區并發出中斷信號,在中斷服務程序中通過DMA就可接收到數據,即通過遠端DMA把數據從以太網接口芯片RTL8019AS的RAM空間讀回單片機中處理。
由于篇幅有限,本文只附上數據發送子程序。在本程序主要是發送一個數據包的命令,數據包的長度最小為60個字節,最大1514個字節,需要發送的數據包要先存放在txdnet緩沖區中,然后遠端通過DMA從緩沖區中讀走數據。C程序[6]如下所示:
void send packet(union netcard*txdnet,unsigned int length)
{
unsigned char i;
unsigned int j;
page(0); //選擇頁零的寄存器
if(length<60)
length=60;
for(i=0;i<3;i++)
txdnet->etherframe.sourcenodeid[i]=ethernet_address.words[i];
txd_buffer=!txd_buffer;
if(txd_buffer)
reg09=0x40;
else
reg09=0x46;
reg08=0x00;
reg0b=length>>8;
reg0a=length&0xFF;
reg00=0x12;
for(j=4;j reg10=txdnet->bytes.bytebuf[j]; for(i=0;i<6;i++) //重發最多6次 { for(j=0;j<1000;j++)//檢查txp為是否為低 if((reg00&0x04)==0)break; if((reg04&0x01)!=0)break;//發送成功 reg00=0x3E; } if(txd_buffer) reg04=0x40; else reg04=0x46; reg06=length>>8; reg05=length&0xFF; reg00=0x3E; } 程序說明:本程序中未定義的變量均在主程序中有所定義。 本文中最大創新之處是通過嵌入式芯片C8051F20內嵌TCP/IP精簡協議以驅動以太網接口芯片RTL8019AS構成以太網通信接口。它只需要將外部的模擬信號直接通過接口就可以實現聯機上網。這是一個通用型的設計,它相對于傳統的以太網通信接口模塊而言成本低、實現方便。非常適合工業控制現場和家電物聯網等方面的應用,具有良好的應用前景。 [1]蘇錦秀,楊慶江,張廣璐.以太網控制芯片 RTL8019AS詳細配置[J].廣州:現代電子技術出版社,2007:151-1531. [2]陳立家,焦戰立,熊文龍.基于精簡TCP/IP協議棧網絡服務器的實現[J].武漢理工大學學報,2007:565-5681. [3]W.Richard Stevens.TCP/IP 詳解卷 1:協議[M].范建華,等,譯.北京:機械工業出版,2000:15-170. [4]W.Richard Stevens.TCP/IP 詳解卷 2:實現[M].范建華,等,譯.北京:機械工業出版社,2001:54-170. [5]趙建領.51 系列單片機開發寶[M].北京:電子工業出版社,2007. [6]譚浩強.C 語言程序設計[M].3 版.北京:清華大學出版社,2005:29-31.4 結論