以太網接口芯片W5300使用說明


一、芯片簡介

引用百度百科對芯片的一個簡介,我就不再贅述。

W5300的目標是在高性能的嵌入式領域,如多媒體數據流服務。與WIZnet現有的芯片方案相比較,W5300在內存空間和數據處理能力等方面都有很大的提高。
W5300特別適用於IPTV,IP機頂盒和數字電視等大流量多媒體數據的傳輸。通過一個集成有TCP/IP協議和10/100M的以太網MAC和PHY的單芯片可以非常簡單和快捷地實現Internet連接。
W5300與主機(MCU)采用總線接口。通過直接訪問方式或間接訪問方式,W5300可以很容易與主機接口,就像訪問SRAM存儲器。W5300的通信數據可以通過每個端口的TX/RX FIFO寄存器訪問。由於這些特性,即使一個初學者也很容易使用W5300實現Internet連接。

應用領域

W5300在很多嵌入式系統中都非常適用,包括:

  • 家庭網絡設備:機頂盒,PVR和數字多媒體設備。
  • 串口轉以太網:訪問控制,LED顯示等
  • 並行接口轉以太網:POS/微型打印機,復印機
  • USB轉以太網:存儲設備,網絡打印機
  • GPIO轉以太網:家庭網絡傳感器
  • 安防設備:DVR,網絡攝像頭
  • 工廠和建築自動化
  • 醫療監控設備
  • 嵌入式服務器

W5300的使用,和我們常用的協議或者控制芯片一樣,都是采用總線方式對其寄存器進行配置,從而實現相應的功能。W5300的配置,大致分為三個過程:上電初始化、通用寄存器配置和socket寄存器配置三個過程。

二、上電初始化

上電后,利用\RESET管腳對W5300進行初始化。RESET信號低電平至少持續2us,為了使鎖相環邏輯穩定,復位信號恢復高電平后至少等待10ms。

復位完成后,對W5300進行通用寄存器配置。

三、通用寄存器配置

W5300每個通用寄存器的詳細說明及每一位代表什么含義,請參見官方手冊。采用間接地址配置模式,W5300的基地址是0x08000。在FPGA對其配置時,是從上到下的順序。

在通用寄存器配置完成之后,實際上嵌入式系統就可以進行物理連接了,當接入PC時,就可以ping通系統,從而驗證通用寄存器配置是否成功。

四、Socket寄存器配置

完成W5300初始化以后,W5300可以以TCP、UDP、IPRAW或MACRAW的方式打開Socket發送或接收數據。

在本設計中,W5300工作在TCP服務器模式下。為了實現TCP通信,需要對Socket0(W5300可以支持8個獨立socket)進行初始化設置,然后進行偵聽設置,完成TCP服務器建立,最后等待建立連接。

通過Socket0模式寄存器S0_MR(P3:P0)和Socket0端口寄存器S0_PORTR分別設置通信協議和本機端口號(在TCP服務器模式,稱之為偵聽端口號),然后向Socket0控制寄存器S0_CR中寫入0x0001執行OPEN命令,執行完OPEN命令后,如果Socket0狀態寄存器S0_SSR改變為SOCK_INIT(0x13),則Socket0的初始化設置完成;再向S0_CR中寫入0x0002執行偵聽命令,若S0_SSR改變為SOCK_LISTEN(0x14),則偵聽完成,W5300設置為TCP服務器;最后等待S0_SSR改變為SOCK_ESTABLISHED(0x17),若S0_SSR變為預期值,則建立了Socket0連接,可以進行數據通信。

五、接收數據

當W5300控制器收到接收數據控制命令時,進入接收數據狀態。W5300接收數據的程序流程如下圖所示。

首先要判斷Socket0的RX存儲器中是否有接收到的數據,即讀取Socket0接收數據報長度寄存器S0_RX_RSR的值,並判斷該值是否等於零。如果S0_RX_RSR的值等於零,表示沒有數據接收,則繼續判斷,否則說明Socket0的RX存儲器接收到數據,則進入下一步接收數據操作。

當存儲器中接收到數據時,要進一步判斷Socket0模式寄存器S0_MR的對齊控制位(ALIGN),若S0_MR[8] = 0(0表示沒有對齊),則從Socket0的RX_FIFO寄存器S0_RX_FIFOR中讀取需要接收的數據字節長度(這樣做是由TCP/IP協議數據格式來確定的),否則從S0_RX_RSR中讀取數據字節長度。實際上,在對齊的判斷過程中,潛在的判斷了數據字節是不是偶數,對齊則為偶數(S0_MR[8] = 1)。

得到數據字節長度信息后要將其轉換為數據字長度,在TCP通信過程中,當每次收到的數據包的字節數為偶數時,S0_MR[8](ALIGN)為‘1’,刪去附在接收數據包中的PACKET-INFO(數據的字節數),可以使讀取數據的操作大大增強。如果收到的數據長度字節數為奇數,那么將添加一個啞字節,主機必須首先讀取這個啞字節並丟棄它。從PACKET-INFO的字節長度信息可以判斷數據包的最后一個字節是否為啞字節。字數作為讀取S0_RX_FIFOR中接收內容的循環控制量。注意,字數的大小與數據總線寬度有關,本系統采用16位總線,所以包含2個字節。
最后,要在向S0_CR寫入0x0040,執行REVC命令,告知主機W5300已經完成數據的讀取。

六、數據發送

當W5300控制器收到發送數據控制命令時,進入發送數據狀態。W5300發送數據程序流程如圖所示。

首先讀取Socket0剩余存儲空間寄存器S0_TX_FSR,並判斷S0_SSR當前的狀態,若既不處於連接狀態(SOCK_ESTABLISHED),也沒有接收到連接斷開請求(SOCK_CLOSE_WAIT),則直接關閉端口。

判斷要發送數據的字節長度是否小於發送寄存器剩余空間的大小,如果小於等於剩余空間,則將需要發送數據字通過S0_TX _FIFOR復制到Socket0的TX存儲器中,然后再將發送數據字節長度值寫入Socket0的寫長度寄存器S0_TX_WRSR,告知W5300需要向上位機發送數據的字節數。最后向S0_CR寫入0x0020執行SEND命令,W5300收到此命令后對接收到的數據進行協議處理,並發送到網絡中。數據發送完成后,Socket0的中斷寄存器S0_IR會產生發送完成(SEND_OK)中斷(用於檢測上一次是否發送完成),中斷值為0x0010,軟件清除該中斷后表示完成一次發送。如果是第一次發送,則不需要檢測SEND_OK。

七、其他說明

1、作為客戶端

當嵌入式系統作為客戶端時,在配置W5300過程中,唯一與服務器模式不同的是,不用配置socket寄存器S0_CR的監聽模式,改為配置服務器IP和端口號,然后采用寫入連接connect。

2、時鍾信號的選擇

W5300一般選擇內部PHY模式,時鍾信號可以由內部振盪器(外接晶振)或外部振盪器產生。我的設計中外部振盪器由FPGA的PLL產生25MHz的時鍾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM