基于W5300的以太網(wǎng)數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:針對現(xiàn)場采集設(shè)備需要擴(kuò)展網(wǎng)絡(luò)功能以實(shí)現(xiàn)遠(yuǎn)程控制和數(shù)據(jù)傳輸,應(yīng)用硬件協(xié)議棧芯片W5300設(shè)計(jì)并實(shí)現(xiàn)了以太網(wǎng)數(shù)據(jù)傳輸系統(tǒng),該系統(tǒng)由FPGA控制硬件協(xié)議棧芯片W5300,給出了系統(tǒng)總體硬件電路和軟件工作流程,并最終完成了對系統(tǒng)的功能驗(yàn)證。經(jīng)驗(yàn)證,系統(tǒng)穩(wěn)定實(shí)現(xiàn)了與上位機(jī)之間的數(shù)據(jù)傳輸。
關(guān)鍵詞:以太網(wǎng);W5300;TCP/IP;FPGA;數(shù)據(jù)傳輸
現(xiàn)代數(shù)據(jù)采集領(lǐng)域中,越來越多的現(xiàn)場采集設(shè)備需要擴(kuò)展網(wǎng)絡(luò)功能以實(shí)現(xiàn)遠(yuǎn)程控制和數(shù)據(jù)傳輸。以太網(wǎng)以其成本低、易于集成和傳輸距離較遠(yuǎn)的優(yōu)勢得到了廣泛應(yīng)用。傳統(tǒng)的以太網(wǎng)解決方案是利用主控芯片連接物理層接口,在主控芯片內(nèi)編寫以太網(wǎng)協(xié)議來實(shí)現(xiàn)的,這種方法開發(fā)周期較長,難度較大,且由于以太網(wǎng)協(xié)議程序比較繁瑣,運(yùn)行起來不太穩(wěn)定。而利用硬件協(xié)議棧芯片,只需要通過簡單的配置和外部線路連接就可以實(shí)現(xiàn)以太網(wǎng)的數(shù)據(jù)傳輸功能,這種方法開發(fā)難度小、集成度高且運(yùn)行穩(wěn)定,已成為實(shí)現(xiàn)以太網(wǎng)數(shù)據(jù)傳輸?shù)氖走x方案。
鑒于此,文中設(shè)計(jì)了一個(gè)利用可編程邏輯器件控制W5300以TCP/IP為協(xié)議進(jìn)行以太網(wǎng)數(shù)據(jù)傳輸?shù)南到y(tǒng)。其中,TCP/IP協(xié)議棧的處理交由硬件協(xié)議棧芯片W5300來完成,F(xiàn)PGA只需控制W5300即可。
1 芯片介紹
W5300是WIZnet公司的一款單芯片器件,采用0.18μmCMOS工藝,內(nèi)部集成10/100M以太網(wǎng)控制器、MAC層協(xié)議和TCP/IP協(xié)議棧,主要應(yīng)用于高集成、高穩(wěn)定、高性能和低成本的嵌入式系統(tǒng)中。其主要性能特點(diǎn)如下:
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存儲器用于數(shù)據(jù)通信,并可根據(jù)端口數(shù)據(jù)吞吐量靈活分配TX/RX存儲器空間大??;
4)支持2種主機(jī)接口模式(直接尋址模式和間接尋址模式);
5)支持16/8 bit數(shù)據(jù)總線,傳輸速率高達(dá)50 Mbps;
6)支持第三方物理(PHY)接口。
2 系統(tǒng)硬件設(shè)計(jì)
在硬件設(shè)計(jì)時(shí)選擇利用FPGA做為主控芯片,實(shí)現(xiàn)對W5300寄存器的讀寫及功能配置,其系統(tǒng)硬件結(jié)構(gòu)如圖1所示。
W5300與FPGA的接口信號有數(shù)據(jù)總線、地址總線以及一些控制信號線(如/RESET、/CS、/RD、/WR、/INT)。W5300工作在直接尋址模式下,F(xiàn)PGA通過地址總線可直接訪問W5300內(nèi)部的各個(gè)寄存器或存儲器,直接尋址模式比間接尋址模式具有更高的訪問速度。BIT16EN引腳決定數(shù)據(jù)總線模式:BIT16EN拉高時(shí)為16位寬數(shù)據(jù)總線模式,BIT16EN拉低時(shí)為8位寬數(shù)據(jù)總線模式。本設(shè)計(jì)將BIT16EN懸空,即拉高,使其工作在16位寬數(shù)據(jù)總線模式下。TEST_MODE[3:0]4個(gè)引腳用于配置PHY模式和廠商測試模式,這里將其都接地,設(shè)置成使用內(nèi)部集成的PHY模式。在內(nèi)部PHY運(yùn)行控制模式的多種選擇中,將OP_MODE[2:0]3個(gè)引腳接地,固定地選擇了一種模式;自動握手模式。這樣W5300是通過媒體接口的兩路差分信號(RXIP/RXIN和TXOP/TXON)與網(wǎng)絡(luò)隔離變壓器連接。這些差分信號引腳都必須接一個(gè)50 Ω(±1%)的電阻和一個(gè)0.1μF的電容,以達(dá)到良好的阻抗匹配效果。匹配電阻和匹配電容應(yīng)該盡可能靠近W5300,以減少傳輸線上的阻抗和容抗。同時(shí)為了有良好的傳輸效果,兩路差分信號的走線長度應(yīng)相等且盡量靠近。
圖中的網(wǎng)絡(luò)隔離變壓器采用的是CYL公司PH16系列的PH163539集成芯片,它的作用有3點(diǎn):1)傳輸數(shù)據(jù),它把PHY送出來的差分信號用差模耦合線圈耦合濾波以增強(qiáng)信號,并且通過電磁場的轉(zhuǎn)換耦合到不同電平的連接網(wǎng)線的另外一端;2)隔離網(wǎng)絡(luò)上不同網(wǎng)絡(luò)設(shè)備間的不同電平,以防止不同電壓通過網(wǎng)線傳輸損壞設(shè)備:3)能夠?yàn)V除空間的電磁干擾,能對設(shè)備起到一定的防雷保護(hù)作用。
本系統(tǒng)工作在內(nèi)部PHY模式下,只能用25M的無源晶振來提供W5300的工作時(shí)鐘。在工作過程中,W5300需要2種電源:3.3 V和1.8 V,其中1.8 V的內(nèi)核工作電壓由W5300自己產(chǎn)生,不需要外部提供,需要注意的是這種電壓不能提供給W5300以外的其它器件。
3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)的主要任務(wù)是在Quartus II環(huán)境下用硬件描述語言VHDL實(shí)現(xiàn)FPGA對硬件協(xié)議棧芯片W5300的控制,以實(shí)現(xiàn)W5300與上位機(jī)的數(shù)據(jù)傳輸。在本系統(tǒng)的軟件設(shè)計(jì)中,僅選用W5300的8個(gè)SOCKET中的SOCKET0進(jìn)行通訊。W5300軟件流程圖如圖2所示,首先復(fù)位W5300,再依次對W5300、SOCKET0進(jìn)行初始化,然后進(jìn)入數(shù)據(jù)通信狀態(tài)。
3.1 W5300復(fù)位
W5300在工作之前需要進(jìn)行上電復(fù)位,且復(fù)位信號/RESET至少要保持2μs的低電平,然后變?yōu)楦唠娖?,等待至?0 ms使得W5300內(nèi)部鎖相環(huán)穩(wěn)定后,再進(jìn)行W5300初始化等操作。
軟件設(shè)計(jì)時(shí),系統(tǒng)設(shè)置復(fù)位信號的低電平時(shí)間為6μs,通過對30 MHz的時(shí)鐘進(jìn)行計(jì)數(shù)來實(shí)現(xiàn),當(dāng)計(jì)數(shù)值達(dá)到30x6=180時(shí),便將復(fù)位信號拉至高電平;然后接著計(jì)數(shù),當(dāng)計(jì)數(shù)值達(dá)到30x20x103=600 000時(shí),便實(shí)現(xiàn)等待20 ms的要求;最后給出W5300復(fù)位完成信號,啟動下一步工作。
3.2 W5300初始化
初始化W5300就是將相應(yīng)的參數(shù)按照寫時(shí)序要求寫入寄存器即可,初始化分3個(gè)步驟:主機(jī)接口設(shè)置、網(wǎng)絡(luò)信息設(shè)置和內(nèi)部TX/RX存儲器的分配。
在設(shè)置主機(jī)接口時(shí),模式寄存器MR保持默認(rèn)值0xB800,這樣W5300便工作在16位總線寬度的直接訪問模式;中斷屏蔽寄存器IMR寫入0xFF FF,不屏蔽任何中斷。
在設(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所示。
在分配存儲空間時(shí),存儲器單元類型寄存器MTYPER采用默認(rèn)值0x00FF,即將前8個(gè)8k字節(jié)存儲單元分配為TX存儲器,后8個(gè)8k字節(jié)存儲單元分配為RX存儲器;通過TX存儲器大小配置寄存器TMSR和RX存儲器大小配置寄存器RMSR將SOCKET0的發(fā)送和接收存儲器大小都配置為32kB。
3.3 SOCKET0建立連接
完成W5300初始化以后,W5300可以以TCP、UDP、IPRAW或MACRAW的方式打開SOCKET發(fā)送或接收數(shù)據(jù)。在本設(shè)計(jì)中,W5300工作在TCP服務(wù)器模式下。
為了實(shí)現(xiàn)TCP通信,需要對SOCKET0進(jìn)行初始化設(shè)置,然后進(jìn)行偵聽設(shè)置,完成TCP服務(wù)器建立,最后等待建立連接。通過SOCKET0模式寄存器S0_MR(P3:P0)和SOCKET0端口寄存器S0_PORTR分別設(shè)置通信協(xié)議和本機(jī)端口號(在TCP服務(wù)器模式,稱之為偵聽端口號),然后向SOCKET0控制寄存器S0_CR中寫入0x0001執(zhí)行OPEN命令,執(zhí)行完OPEN命令后,如果SOCKET0狀態(tài)寄存器S0_SSR改變?yōu)镾OCK_INIT,則SOCKET0的初始化設(shè)置完成;再向S0_CR中寫入0x0002執(zhí)行偵聽命令,若S0_SSR改變?yōu)镾OCK_LISTEN,則偵聽完成,W5300設(shè)置為TCP服務(wù)器;最后等待S0_SSR改變?yōu)镾OCK_ESTABLISHED,若S0_SSR變?yōu)轭A(yù)期值,則建立了SOCKTEO連接,可以進(jìn)行數(shù)據(jù)通信。
3.4 W5300接收數(shù)據(jù)
當(dāng)W5300控制器收到接收數(shù)據(jù)控制命令時(shí),進(jìn)入接收數(shù)據(jù)狀態(tài)。W5300接收數(shù)據(jù)的程序流程如圖3所示。首先要判斷SOCKET0的RX存儲器中是否有接收到的數(shù)據(jù),即讀取SOCKETO接收數(shù)據(jù)報(bào)長度寄存器S0_RX_RSR的值,并判斷該值是否等于零。如果S0_RX_RSR的值等于零,則繼續(xù)判斷,否則說明SOCKET0的RX存儲器接收到數(shù)據(jù),則進(jìn)入下一步接收數(shù)據(jù)操作。當(dāng)存儲器中接收到數(shù)據(jù)時(shí),要進(jìn)一步判讀SOCKET0模式寄存器S0_MR的對齊控制位,若S0_MR(ALIGN)=0,則從SOCKET0的RX FIFO寄存器S0_RX_FIFOR讀取需要接收的數(shù)據(jù)字節(jié)長度(這樣做是由TCP模式數(shù)據(jù)格式來確定的),否則從S0_RX_RSR中讀取數(shù)據(jù)字節(jié)長度。得到數(shù)據(jù)字節(jié)長度信息后要將其轉(zhuǎn)換為數(shù)據(jù)字長度,作為讀取S0_RX_FIFOR中接收內(nèi)容的循環(huán)控制量。最后,要在向S0_CR寫入0x0040,執(zhí)行REVC命令,告知主機(jī)W5300已經(jīng)完成數(shù)據(jù)的讀取。
3.5 W5300發(fā)送數(shù)據(jù)
當(dāng)W5300控制器收到發(fā)送數(shù)據(jù)控制命令時(shí),進(jìn)入發(fā)送數(shù)據(jù)狀態(tài)。W5300發(fā)送數(shù)據(jù)程序流程如圖4所示。首先要將需要發(fā)送數(shù)據(jù)字通過S0_TX _FIFOR復(fù)制到SOCKET0的TX存儲器中,然后再將發(fā)送數(shù)據(jù)字節(jié)長度值寫入SOCKET0的寫長度寄存器S0_TX_WRSR,告知W5300需要向上位機(jī)發(fā)送數(shù)據(jù)的字節(jié)數(shù)。最后向S0_CR寫入0x0020執(zhí)行SEND命令,W5300收到此命令后對接收到的數(shù)據(jù)進(jìn)行協(xié)議處理,并發(fā)送到網(wǎng)絡(luò)中。數(shù)據(jù)發(fā)送完成后,SOCKET0的中斷寄存器S0_IR會產(chǎn)生發(fā)送完成(SENDOK)中斷,中斷值為0x0010,軟件清除該中斷后表示完成一次發(fā)送。
4 系統(tǒng)功能驗(yàn)證
為了測試網(wǎng)絡(luò)的連通性,最直接的方式就是使用ping命令,向目標(biāo)端發(fā)送ICMP回送請求報(bào)文,看目標(biāo)端是否可達(dá)。在主機(jī)端的DOS命令環(huán)境下輸入命令:ping192.168.0.3(主機(jī)IP地址為192.168.0.2),從圖5可以看出主機(jī)端收到了ICMP回送應(yīng)答,證明目標(biāo)端的IP層以下已經(jīng)連通。
在測試了連通性后,就可以進(jìn)行通信測試了,可通過TCP&UDP測試工具向W5300發(fā)送網(wǎng)絡(luò)控制指令,并接收W5300回傳的數(shù)據(jù)數(shù)據(jù)。如圖6所示TCP&UDP測試工具與W5300通信結(jié)果,通過上位機(jī)的TCP&UDP測試工具向系統(tǒng)網(wǎng)絡(luò)接口發(fā)送一組數(shù)據(jù),系統(tǒng)網(wǎng)絡(luò)接口將收到的數(shù)據(jù)載回傳給上位機(jī),從圖中可以看出,通信測試成功。
5 結(jié)論
經(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)簡單、可靠性強(qiáng)、成本低廉,在無需引入操作系統(tǒng)的條件下,實(shí)現(xiàn)單芯片與Internet的連接,有很高的實(shí)用價(jià)值,可應(yīng)用于現(xiàn)場采集設(shè)備的遠(yuǎn)程控制和數(shù)據(jù)傳輸?shù)阮I(lǐng)域。