關鍵字:嵌入式 網絡接口 控制器
1前言
以太網作為目前應用最為廣泛的局域網技術,在工業自動化和過程控制領域得到了越來越的應用。傳統的控制系統在信息層大都采用以太網,而在控制層和設備層一般采用不同的現場總線或其他專用網絡。目前,隨著工業以太網技術的發展,以太網已經滲透到了控制層和設備層。基于以太網的控制網絡最典型的應用形式是Ethernet+ICP/IP,它的底層是Ethernet,網絡層和傳輸層采用國際公認的標準TCP/IP.然而大量的工業現場設備,如數控機床、機械手等設備,這些設備最常用的通訊方式為RS-232/485/422串行接口,不具備網絡接口,以至無法直接接到以太網。
隨著半導體產業和集成電路技術的發展,以微控制器/微處理為硬件核心的嵌入式系統得到迅速發展,并在無線通訊、網絡設備、工業控制等領域得到廣泛應用。本文選用基于ARM9和armlinux開發嵌入式網絡接口控制器,實現串行口數據與以太網數據的相互轉換,通過這種方式,可以使傳統串口設備成為具有網絡接口的設備,直接接入工業以太網。
2嵌入式網絡接口控制器工作原理
嵌入式網絡接口器選用DM9000E芯片作以太網控制器,來完成與上級以太網的數據交換,采用32位微處理器s3c2410和嵌入式Linux進行協議實現和數據處理,然后將處理過的數據下傳給底層設備終端;把從底層終端設備接收的數據,進行數據處理和協議實現,通過DM900E傳輸到Internet上。工作原理如1所示
3 嵌入式網絡接口控制器硬件平臺
嵌入式網絡接口控制器硬件平臺的整體連接框圖如圖 2 所示。本文選用基于ARM9內核ARM9TDMI的32位微處理器s3c2410作為主控芯片。S3C2410處理器是Samsung公司基于ARM公司的ARM920T處理器核,采用0.18um制造工藝的32位微控制器。該處理器擁有:獨立的16KB指令Cache和16KB數據Cache,MMU,支持TFT的LCD控制器,NAND閃存控制器,3路UART,4路DMA,4路帶PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2個USB主機,1個USB設備,SD主機和MMC接口,2路SPI。S3C2410處理器最高可運行在203MHz。本系統的FLASH存儲器選INTEL公司的28F128,SDRAM芯片選用兩片HY57V561620構成32位的存儲器系統. 以太網控制器芯片選擇DM9000,它是完全綜合的、成本較低的單一快速,具有通用的處理器接口,10/100M自適應,以及4K雙字節靜態存取存儲器。它被設計為低功耗、高處理性能,支持3.3V到5V的容差。DM9000提供一個MII接口來連接HPNA設備或者其他支持MII接口的收發器,并支持8位、16位、32位的接口來適應不同的處理器對內部存儲器的訪問,它支持IEEE802.3u規格,還支持IEEE 802.3x全雙工流控制。在DM9000和RJ45接口之間需要用漢仁電子有限公司的網絡隔離變壓器HR601627來連接,網絡隔離變壓器起信號傳輸、阻抗匹配、波形修復、雜波抑制以及高電壓隔離等作用,以保護系統的安全。
圖1嵌入式網絡接口控制器工作原理
圖 2嵌入式網絡接口控制器硬件框
4 嵌入式操作系統的選擇
本系統的設計,網卡驅動和TCP/IP協議的實現是重點,選擇嵌入式Linux,它已經嵌入了TCP/IP協議棧,使TCP/IP協議得以實現。嵌入式Linux系統支持多種類型的網卡如各種lOM/lOOM,1000M 的Ethemet網卡等。對于 DM9000E以太網控制器,嵌入式Linux已經提供了很好的支持,移植過程中只需要修改源代碼和配置相應模塊即可實現對網絡的支持。
5以太網數據與串口數據轉換實現
本文開發的接口控制器主要完成兩個功能,即將串口接收到的數據通過網卡發送至以太網,將網卡接收到的數據通過串口發送至另一串口端。工作模式上可以選擇為服務器或客戶端模式,數據傳輸協議可以選擇為TCP(Transmission Control Protocol,傳輸控制協議)方式或UDP(User Datagram Protocol,用戶數據報協議)方式。其中TCP和UDP是以太網數據的兩種傳輸協議,TCP是基于連接的協議,在正式收發數據前,必須和對方建立可靠的連接,而UDP是面向非連接的數據直接傳輸協議,不需要對方的回答確認。
5.1應用程序的開發環境和網絡編程
由于嵌人式系統程序的開發和執行是在PC和ARM 兩個不同的平臺上進行的,因此需要進行交叉編譯和連接。用串口和以太網將宿主機和目標板連接起來,程序開發在RedHat9.0 Linux操作系統下編輯,調試通過后,加入自己開發的程序重新編譯armlinux內核,并將編譯好的二進制文件固化到開發板的ROM中,使其開機后自動運行。
TCP/IP處理模塊采用SOCKET套接字編程實現。SOCKET最早是在UNIX系統上為TCP/IP網絡通信而開發的一個接口程序,后來被成功移植到DOS、Windows等操作系統上,成為Internet上網絡開發最為通用的API函數。用于網絡開發的SOCKET主要有Stream Sockets(流格式)和Datagram Sockets(數據報格式)兩種類型,流格式Socket與TCP協議對應,數據報格式Socket與UDP協議對應。
5.2 軟件設計
本系統采用工作模式TCP Server服務器,等待客戶端請求連接,實現數據傳輸功能。本程序的流程圖如圖3所示。首先,打開串口,在Linux下打開串口是通過標準的文件打開函數
圖3 功能實現流程圖
圖4 以太網數據通過串口發送
圖5 串口數據通過網卡發送
操作,程序代碼如下: int fd; fd=open(“/dev/ttyS0”,O_RDWR); if(fd==-1) {perror(“提示錯誤!”);} 然后設置串口的波特率、校驗位和停止位。要用網卡接收發送數據,就要首先創建套接字,程序代碼如下: int sock_fd; sock_fd=socket(AF_INET,SOCK_STREAM,O) if(sock_fd==-1) {perror(“socket”); exit(1);} 然后設置屬性,然后等待客戶端的連接,一旦建立連接,就可以實現數據的接收和傳送。
數據處理在整個程序中是十分關鍵的一環,該環節中實現的是在網絡數據和串口數據之間的相互交換,根據實際需要也可以將網絡數據轉換成并行數據或者其他類型接口的數據;這里網絡和串口數據交互處理分成兩部分,一部份是網絡數據轉變成串口數據,另一部份是串口數據發送到網絡上,其流程圖如圖4、5所示。為了充分利用系統資源,在數據處理程序中調用select()函數。Select函數原型為:int select(int numfds,fd_set *readfds,fd_set *writeset,fd_set *exceptset,const struct timeval *timeout); 返回:準備好的文件描述符個數(可以是0),-1表示出錯。
6結束語
本文作者創新點:本文采用性價比高的32位微處理器s3c2410作為主控芯片,移植了源代碼開放的Linux,它易于實現了TCP/IP處理模塊,這樣大大縮短了產品開發周期,并有利于提高了串口數據和以太網數據的轉換速率,提高數據傳輸的實時性,使傳統串口設備方便接入以太網,為以太網在控制層和設備層的應用奠定了基礎。