吳昊,嚴(yán)勝剛,薛雙喜
(西北工業(yè)大學(xué) 航海學(xué)院,陜西 西安 710072)
現(xiàn)代數(shù)據(jù)采集領(lǐng)域中,越來(lái)越多的現(xiàn)場(chǎng)采集設(shè)備需要擴(kuò)展網(wǎng)絡(luò)功能以實(shí)現(xiàn)遠(yuǎn)程控制和數(shù)據(jù)傳輸。以太網(wǎng)以其成本低、易于集成和傳輸距離較遠(yuǎn)的優(yōu)勢(shì)得到了廣泛應(yīng)用[1]。傳統(tǒng)的以太網(wǎng)解決方案是利用主控芯片連接物理層接口,在主控芯片內(nèi)編寫(xiě)以太網(wǎng)協(xié)議來(lái)實(shí)現(xiàn)的,這種方法開(kāi)發(fā)周期較長(zhǎng),難度較大,且由于以太網(wǎng)協(xié)議程序比較繁瑣,運(yùn)行起來(lái)不太穩(wěn)定。而利用硬件協(xié)議棧芯片,只需要通過(guò)簡(jiǎn)單的配置和外部線路連接就可以實(shí)現(xiàn)以太網(wǎng)的數(shù)據(jù)傳輸功能,這種方法開(kāi)發(fā)難度小、集成度高且運(yùn)行穩(wěn)定,已成為實(shí)現(xiàn)以太網(wǎng)數(shù)據(jù)傳輸?shù)氖走x方案[2]。
鑒于此,文中設(shè)計(jì)了一個(gè)利用可編程邏輯器件控制W5300以TCP/IP為協(xié)議進(jìn)行以太網(wǎng)數(shù)據(jù)傳輸?shù)南到y(tǒng)。其中,TCP/IP協(xié)議棧的處理交由硬件協(xié)議棧芯片W5300來(lái)完成,F(xiàn)PGA只需控制W5300即可[3]。
W5300是WIZnet公司的一款單芯片器件,采用0.18μm CMOS工藝,內(nèi)部集成10/100M以太網(wǎng)控制器、MAC層協(xié)議和TCP/IP協(xié)議棧,主要應(yīng)用于高集成、高穩(wěn)定、高性能和低成本的嵌入式系統(tǒng)中。其主要性能特點(diǎn)[4-5]如下:
1)支持硬件 TCP/IP 協(xié)議棧:TCP、UDP、ICMP、IPv4、ARP,IGMP、PPPoE;
2)支持8路獨(dú)立的網(wǎng)絡(luò)連接端口SOCKETs同時(shí)工作;
3)內(nèi)部擁有128 k字節(jié)TX/RX存儲(chǔ)器用于數(shù)據(jù)通信,并可根據(jù)端口數(shù)據(jù)吞吐量靈活分配TX/RX存儲(chǔ)器空間大小;
4)支持2種主機(jī)接口模式(直接尋址模式和間接尋址模式);
5)支持16/8 bit數(shù)據(jù)總線,傳輸速率高達(dá)50 Mbps;
6)支持第三方物理(PHY)接口。
在硬件設(shè)計(jì)時(shí)選擇利用FPGA做為主控芯片,實(shí)現(xiàn)對(duì)W5300寄存器的讀寫(xiě)及功能配置,其系統(tǒng)硬件結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖Fig.1 Structure diagram of the hardware system
W5300與FPGA的接口信號(hào)有數(shù)據(jù)總線、地址總線以及一些控制信號(hào)線(如/RESET、/CS、/RD、/WR、/INT)。 W5300 工作在直接尋址模式下,F(xiàn)PGA通過(guò)地址總線可直接訪問(wèn)W5300內(nèi)部的各個(gè)寄存器或存儲(chǔ)器,直接尋址模式比間接尋址模式具有更高的訪問(wèn)速度。BIT16EN引腳決定數(shù)據(jù)總線模式:BIT16EN拉高時(shí)為16位寬數(shù)據(jù)總線模式,BITI6EN拉低時(shí)為8位寬數(shù)據(jù)總線模式。本設(shè)計(jì)將BIT16EN懸空,即拉高,使其工作在16位寬數(shù)據(jù)總線模式下。TEST_MODE[3:0]4個(gè)引腳用于配置PHY模式和廠商測(cè)試模式,這里將其都接地,設(shè)置成使用內(nèi)部集成的PHY模式。在內(nèi)部PHY運(yùn)行控制模式的多種選擇中,將OP_MODE[2:0]3個(gè)引腳接地,固定地選擇了一種模式:自動(dòng)握手模式。這樣W5300是通過(guò)媒體接口的兩路差分信號(hào)(RXIP/RXIN和TXOP/TXON)與網(wǎng)絡(luò)隔離變壓器連接。這些差分信號(hào)引腳都必須接一個(gè)50Ω(±1%)的電阻和一個(gè)0.1μF的電容,以達(dá)到良好的阻抗匹配效果。匹配電阻和匹配電容應(yīng)該盡可能靠近W5300,以減少傳輸線上的阻抗和容抗。同時(shí)為了有良好的傳輸效果,兩路差分信號(hào)的走線長(zhǎng)度應(yīng)相等且盡量靠近[1-6]。
圖中的網(wǎng)絡(luò)隔離變壓器采用的是CYL公司PH16系列的PH163539集成芯片,它的作用有3點(diǎn):1)傳輸數(shù)據(jù),它把PHY送出來(lái)的差分信號(hào)用差模耦合線圈耦合濾波以增強(qiáng)信號(hào),并且通過(guò)電磁場(chǎng)的轉(zhuǎn)換耦合到不同電平的連接網(wǎng)線的另外一端;2)隔離網(wǎng)絡(luò)上不同網(wǎng)絡(luò)設(shè)備間的不同電平,以防止不同電壓通過(guò)網(wǎng)線傳輸損壞設(shè)備;3)能夠?yàn)V除空間的電磁干擾,能對(duì)設(shè)備起到一定的防雷保護(hù)作用[7]。
本系統(tǒng)工作在內(nèi)部PHY模式下,只能用25M的無(wú)源晶振來(lái)提供W5300的工作時(shí)鐘。在工作過(guò)程中,W5300需要2種電源:3.3 V和1.8 V,其中1.8 V的內(nèi)核工作電壓由W5300自己產(chǎn)生,不需要外部提供,需要注意的是這種電壓不能提供給W5300以外的其它器件。
系統(tǒng)軟件設(shè)計(jì)的主要任務(wù)是在Quartus II環(huán)境下用硬件描述語(yǔ)言VHDL實(shí)現(xiàn)FPGA對(duì)硬件協(xié)議棧芯片W5300的控制,以實(shí)現(xiàn)W5300與上位機(jī)的數(shù)據(jù)傳輸。在本系統(tǒng)的軟件設(shè)計(jì)中,僅選用W5300的8個(gè)SOCKET中的SOCKET0進(jìn)行通訊。W5300軟件流程圖如圖2所示,首先復(fù)位W5300,再依次對(duì)W5300、SOCKET0進(jìn)行初始化,然后進(jìn)入數(shù)據(jù)通信狀態(tài)。
W5300在工作之前需要進(jìn)行上電復(fù)位,且復(fù)位信號(hào)/RESET至少要保持2μs的低電平,然后變?yōu)楦唠娖?,等待至?0 ms使得W5300內(nèi)部鎖相環(huán)穩(wěn)定后,再進(jìn)行W5300初始化等操作。
軟件設(shè)計(jì)時(shí),系統(tǒng)設(shè)置復(fù)位信號(hào)的低電平時(shí)間為6μs,通過(guò)對(duì)30 MHz的時(shí)鐘進(jìn)行計(jì)數(shù)來(lái)實(shí)現(xiàn),當(dāng)計(jì)數(shù)值達(dá)到30×6=180時(shí),便將復(fù)位信號(hào)拉至高電平;然后接著計(jì)數(shù),當(dāng)計(jì)數(shù)值達(dá)到30×20×103=600 000時(shí),便實(shí)現(xiàn)等待20 ms的要求;最后給出W5300復(fù)位完成信號(hào),啟動(dòng)下一步工作。
圖2 系統(tǒng)軟件流程圖Fig.2 Flow chart of the software system
初始化W5300就是將相應(yīng)的參數(shù)按照寫(xiě)時(shí)序要求寫(xiě)入寄存器即可,初始化分3個(gè)步驟:主機(jī)接口設(shè)置、網(wǎng)絡(luò)信息設(shè)置和內(nèi)部TX/RX存儲(chǔ)器的分配。
在設(shè)置主機(jī)接口時(shí),模式寄存器MR保持默認(rèn)值0xB800,這樣W5300便工作在16位總線寬度的直接訪問(wèn)模式;中斷屏蔽寄存器IMR寫(xiě)入0xFFFF,不屏蔽任何中斷。
在設(shè)置網(wǎng)絡(luò)信息時(shí),重復(fù)發(fā)送超時(shí)寄存器RTR與重復(fù)發(fā)送計(jì)數(shù)寄存器RCR采用默認(rèn)值,默認(rèn)值分別為0x07D0和0x0008,即重復(fù)發(fā)送超時(shí)時(shí)間為200 ms,重復(fù)發(fā)送次數(shù)為9次;本機(jī)硬件地址寄存器SHAR、網(wǎng)關(guān)IP地址寄存器GAR、子網(wǎng)掩碼寄存器SUBR和本機(jī)IP地址寄存器SIPR配置參數(shù)如表1所示。
表1 網(wǎng)絡(luò)參數(shù)配置Tab.1 Configuration of network parameters
在分配存儲(chǔ)空間時(shí),存儲(chǔ)器單元類型寄存器MTYPER采用默認(rèn)值0x00FF,即將前8個(gè)8k字節(jié)存儲(chǔ)單元分配為TX存儲(chǔ)器,后8個(gè)8k字節(jié)存儲(chǔ)單元分配為RX存儲(chǔ)器;通過(guò)TX存儲(chǔ)器大小配置寄存器TMSR和RX存儲(chǔ)器大小配置寄存器RMSR將SOCKET0的發(fā)送和接收存儲(chǔ)器大小都配置為32 kB。
完成 W5300初始化以后,W5300可以以 TCP、UDP、IPRAW或MACRAW的方式打開(kāi)SOCKET發(fā)送或接收數(shù)據(jù)。在本設(shè)計(jì)中,W5300工作在TCP服務(wù)器模式下。
為了實(shí)現(xiàn)TCP通信,需要對(duì)SOCKET0進(jìn)行初始化設(shè)置,然后進(jìn)行偵聽(tīng)設(shè)置,完成TCP服務(wù)器建立,最后等待建立連接。通過(guò) SOCKET0模式寄存器 S0_MR(P3:P0)和SOCKET0端口寄存器S0_PORTR分別設(shè)置通信協(xié)議和本機(jī)端口號(hào)(在TCP服務(wù)器模式,稱之為偵聽(tīng)端口號(hào)),然后向SOCKET0控制寄存器S0_CR中寫(xiě)入0x0001執(zhí)行OPEN命令,執(zhí)行完OPEN命令后,如果SOCKET0狀態(tài)寄存器S0_SSR改變?yōu)镾OCK_INIT,則SOCKET0的初始化設(shè)置完成;再向S0_CR中寫(xiě)入0x0002執(zhí)行偵聽(tīng)命令,若S0_SSR改變?yōu)镾OCK_LISTEN,則偵聽(tīng)完成,W5300設(shè)置為TCP服務(wù)器;最后等待S0_SSR改變?yōu)镾OCK_ESTABLISHED,若S0_SSR變?yōu)轭A(yù)期值,則建立了SOCKTE0連接,可以進(jìn)行數(shù)據(jù)通信。
當(dāng)W5300控制器收到接收數(shù)據(jù)控制命令時(shí),進(jìn)入接收數(shù)據(jù)狀態(tài)。W5300接收數(shù)據(jù)的程序流程如圖3所示。首先要判斷SOCKET0的RX存儲(chǔ)器中是否有接收到的數(shù)據(jù),即讀取SOCKET0接收數(shù)據(jù)報(bào)長(zhǎng)度寄存器S0_RX_RSR的值,并判斷該值是否等于零。如果S0_RX_RSR的值等于零,則繼續(xù)判斷,否則說(shuō)明SOCKET0的RX存儲(chǔ)器接收到數(shù)據(jù),則進(jìn)入下一步接收數(shù)據(jù)操作。當(dāng)存儲(chǔ)器中接收到數(shù)據(jù)時(shí),要進(jìn)一步判讀SOCKET0模式寄存器S0_MR的對(duì)齊控制位,若S0_MR(ALIGN)=0,則從 SOCKET0的 RX FIFO寄存器 S0_RX_FIFOR讀取需要接收的數(shù)據(jù)字節(jié)長(zhǎng)度(這樣做是由TCP模式數(shù)據(jù)格式來(lái)確定的),否則從S0_RX_RSR中讀取數(shù)據(jù)字節(jié)長(zhǎng)度。得到數(shù)據(jù)字節(jié)長(zhǎng)度信息后要將其轉(zhuǎn)換為數(shù)據(jù)字長(zhǎng)度,作為讀取S0_RX_FIFOR中接收內(nèi)容的循環(huán)控制量。最后,要在向S0_CR寫(xiě)入0x0040,執(zhí)行REVC命令,告知主機(jī)W5300已經(jīng)完成數(shù)據(jù)的讀取。
圖3 W5300接收數(shù)據(jù)流程圖Fig.3 Flow chart of W5300 receiving data
當(dāng)W5300控制器收到發(fā)送數(shù)據(jù)控制命令時(shí),進(jìn)入發(fā)送數(shù)據(jù)狀態(tài)。W5300發(fā)送數(shù)據(jù)程序流程如圖4所示。首先要將需要發(fā)送數(shù)據(jù)字通過(guò)S0_TX_FIFOR復(fù)制到SOCKET0的TX存儲(chǔ)器中,然后再將發(fā)送數(shù)據(jù)字節(jié)長(zhǎng)度值寫(xiě)入SOCKET0的寫(xiě)長(zhǎng)度寄存器S0_TX_WRSR,告知W5300需要向上位機(jī)發(fā)送數(shù)據(jù)的字節(jié)數(shù)。最后向S0_CR寫(xiě)入0x0020執(zhí)行SEND命令,W5300收到此命令后對(duì)接收到的數(shù)據(jù)進(jìn)行協(xié)議處理,并發(fā)送到網(wǎng)絡(luò)中。數(shù)據(jù)發(fā)送完成后,SOCKET0的中斷寄存器S0_IR會(huì)產(chǎn)生發(fā)送完成(SENDOK)中斷,中斷值為0x0010,軟件清除該中斷后表示完成一次發(fā)送。
圖4 W5300發(fā)送數(shù)據(jù)流程圖Fig.4 Flow chart of W5300 sending data
為了測(cè)試網(wǎng)絡(luò)的連通性,最直接的方式就是使用ping命令,向目標(biāo)端發(fā)送ICMP回送請(qǐng)求報(bào)文,看目標(biāo)端是否可達(dá)[8]。在主機(jī)端的DOS命令環(huán)境下輸入命令:ping192.168.0.3(主機(jī)lP地址為192.168.0.2),從圖5可以看出主機(jī)端收到了ICMP回送應(yīng)答,證明目標(biāo)端的IP層以下已經(jīng)連通。
圖5 DOS操作環(huán)境下測(cè)試結(jié)果Fig.5 Test results in DOSoperation system
在測(cè)試了連通性后,就可以進(jìn)行通信測(cè)試了,可通過(guò)TCP&UDP測(cè)試工具向W5300發(fā)送網(wǎng)絡(luò)控制指令,并接收W5300回傳的數(shù)據(jù)數(shù)據(jù)。如圖6所示TCP&UDP測(cè)試工具與W5300通信結(jié)果,通過(guò)上位機(jī)的TCP&UDP測(cè)試工具向系統(tǒng)網(wǎng)絡(luò)接口發(fā)送一組數(shù)據(jù),系統(tǒng)網(wǎng)絡(luò)接口將收到的數(shù)據(jù)載回傳給上位機(jī),從圖中可以看出,通信測(cè)試成功。
圖6 TCP&UDP測(cè)試工具與W5300通信結(jié)果Fig.6 Communication results between TCP&UDP testing tools and W5300
經(jīng)實(shí)驗(yàn)驗(yàn)證,系統(tǒng)運(yùn)行穩(wěn)定,實(shí)現(xiàn)了以太網(wǎng)的數(shù)據(jù)傳輸功能。系統(tǒng)結(jié)構(gòu)簡(jiǎn)單、可靠性強(qiáng)、成本低廉,在無(wú)需引入操作系統(tǒng)的條件下,實(shí)現(xiàn)單芯片與Internet的連接,有很高的實(shí)用價(jià)值,可應(yīng)用于現(xiàn)場(chǎng)采集設(shè)備的遠(yuǎn)程控制和數(shù)據(jù)傳輸?shù)阮I(lǐng)域。
[1]王少克.基于W5300的高速硬件以太網(wǎng)解決方案[J].電子設(shè)計(jì)應(yīng)用,2009,7(4):95-96.WANG Shao-ke.Solution of high-speed hardware Ethernet based on W5300[J].Electronic Design&Application,2009,7(4):95-96.
[2]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].北京:電子工業(yè)出版社,2008.
[3]胡為.基于FPGA的嵌入式系統(tǒng)Internet接入方案[D].西安:西安電子科技大學(xué),2006.
[4]WIZnet.W5300 Datasheet Ver1.2.2[R].2008.
[5]High-Performance Internet Connectivity Solution W5300[S].WIZnet Inc,2008.
[6]柏軍,張爭(zhēng)氣,王奇,等.基于網(wǎng)卡的某型聲納目標(biāo)模擬系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2010,18(4):854-856.PAI Jun,ZHANG Zheng-qi,WANG Qi,et al.Design of sonar target simulation system based on net card[J].Computer Measurement&Control,2010,18(4):854-856.
[7]吳金星.某雷達(dá)數(shù)據(jù)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2011.
[8]胡達(dá).基于嵌入式平臺(tái)的USB和以太網(wǎng)技術(shù)研究[D].哈爾濱:哈爾濱工程大學(xué),2009.