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