0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

全硬件TCP/IP協(xié)議棧學習筆記 (第八天:W5500+FPGA實現(xiàn)tcp連接)

學FPGA,慢慢來 ? 2017-12-18 10:28 ? 次閱讀

經(jīng)歷了一個多月的調(diào)試,最終終于使用basys2將tcp模式配置成功了。

首先說一下思路吧,首先W5500的發(fā)送與接收與開發(fā)板的通信使用的是SPI協(xié)議,下降沿發(fā)送,上升沿接收。每次發(fā)送的數(shù)據(jù)格式為前十六位為地址位,之后五位為寄存器區(qū)的選塊,例如常用的為5‘b00000為通用寄存器區(qū),5’b00001為socket1寄存器區(qū)。接下來一位為讀寫操作位,0為讀數(shù)據(jù),1為寫數(shù)據(jù)。接下來兩位是SPI模式選擇,00代表使用SCSN信號確定位寬,01代表一位字長(八個二進制數(shù)),10代表兩位字長(十六個二進制數(shù)),11代表四位字長(32個二進制數(shù))。隨后便是和之前字長相匹配的數(shù)據(jù)位。格式如下:

0000000000000000_ 00000__1_01_00000000

地址位 寄存器區(qū) 寫 一位字長 數(shù)據(jù)

在發(fā)送數(shù)據(jù)與接收數(shù)據(jù)的時候,要保證數(shù)據(jù)位和SCK信號沿對其,同時要保證SCSN為低電平。具體的SPI發(fā)送可以參考之前的博客。

說完了發(fā)送的格式,接下來我們來說一說發(fā)送的數(shù)據(jù)。

首先我們要明確我們要配置數(shù)據(jù),我們要發(fā)送我們的IP,GATEWAY,MAC,端口以及目的IP,端口。實際上我們講的發(fā)送應該是配置寄存器,我們是在將我們發(fā)送所必須的信息寫入寄存器中。在發(fā)送數(shù)據(jù)之前我們要首先將我們W5500通過外邊的接口硬復位,之后對模式寄存器進行讀操作,直到模式寄存器的最低位為0時,即復位完成,我們在進行其他的寫入操作。在復位結(jié)束之后,我們可以將IP,MAC,GATEWAY等數(shù)據(jù)寫入對應的寄存器中,具體的寄存器地址和所屬寄存器區(qū)具體參看W5500的手冊,里邊的東西都寫的非常清楚。

在配置完成這些之后,我們對socket1 mode即1端口的模式選擇寄存器進行書寫,將W5500模式選擇為TCP模式。具體的操作為將對應的后三位寫入為001。之后再對該寄存器進行讀操作,以此來確定模塊卻是在TCP模式運行。確認之后開始配置目標IP,端口,最大字長等信息。之所以先配置TCP模式是因為我們后邊配置的寄存器都屬于端口寄存器區(qū),而我們在配置之前應先配置模式寄存器。

完成這些配置之后,我們來接觸兩個很特殊但是也很重要的寄存器,一個是CR寄存器,另一個是SR寄存器(原諒我平板打字實在不想寫全稱了)。在我們完成以上基礎的寄存器配置之后,我們對CR寄存器寫入對應特定的值,該值可以讓模塊進行對應的操作。而我們要知道該操作是否完成,我們就要對SR寄存器進行讀操作,讀出的對應值代表模塊當前所處在的模式狀態(tài)。如我們最初對CR寄存器寫入值0x01,表示我們將模塊設置為TCP,之后我們對SR寄存器進行讀操作,如果讀出的值是0x13,那么代表模塊當前處在TCP客戶端模式,我們即可進行下一步操作。我們之后再進行對應的操作,例如要將模塊設置為偵聽狀態(tài)下,將CR寄存器寫入0x04,讀SR寄存器值為0x17即為處在偵聽狀態(tài)。接下來我們對發(fā)送區(qū)讀指針寄存器讀操作來獲取當前讀指針,隨后根據(jù)讀指針讀出的數(shù)據(jù)將我們要發(fā)送的數(shù)據(jù)寫入到發(fā)送緩存即可。這樣就完成了數(shù)據(jù)的發(fā)送。

這樣,我們將配置的大概思路講完了。

設計模塊如下

在具體書寫時,我將SPI發(fā)送與接收寫在了一個模塊,而且發(fā)送與接收都只是發(fā)送8位和接收8位。SCSN信號是在該模塊中產(chǎn)生,具體發(fā)送與接收都是使用狀態(tài)機來書寫,SCSN信號在發(fā)送第一位的時候拉低,最后一位發(fā)送結(jié)束之后拉高。(注意,是發(fā)送結(jié)束之后不是發(fā)送最后一位時就拉低。)SPI發(fā)送與接收部分就結(jié)束了,在書寫時要注意接收條件為SCSN信號為低信號同時SCK信號的上升沿,發(fā)送的條件是SCSN信號為低同時SCK信號的下降沿。

8位發(fā)送數(shù)據(jù)波形如下

我們將要發(fā)送的信息寫在一個狀態(tài)機模塊中,通過狀態(tài)機來實現(xiàn)發(fā)送信息的按順序發(fā)送。我們將每次發(fā)送的信息按照8位來拆解,想對應的想發(fā)送一位時就要發(fā)送總共32位,和下來就是發(fā)送四段。兩位時發(fā)送五段,四位時發(fā)送7段。相應的讀操作也是一樣,由于我在我所做的項目中所需讀的數(shù)據(jù)均為一個字長,即為8位,所以我只寫了讀一個字長的操作。拆解的過程就是移位加取高8位,另加一個計數(shù)器即可完成。而每次發(fā)送的觸發(fā)信號即為上邊的SPI控制模塊在接受或者發(fā)送結(jié)束后發(fā)送的結(jié)束信號。當接收到發(fā)送或接收的結(jié)束信號,即可將下一個8位數(shù)據(jù)傳輸給SPI控制模塊。

最后我寫了一個同步FIFO來將幾個拆分的幾位數(shù)據(jù)合并。

合并之后波形如下

其實最初這個FIFO是用來救場的,由于最初書寫的時候沒有認真的研究說明書,想成每次發(fā)送8位,后來意識到這件事情的時候時間有些緊張,就想寫一個FIFO來救個場,就過再后來做的時候,發(fā)現(xiàn)實際上是因禍得福,這種書寫方式可以有效的減少資源,而且在SPI控制模塊也會更加簡單,在最后糾錯時也好找錯誤字段。

到此,設計思路和配置思路均結(jié)束。這幾天還是有些忙,稍后把仿真圖補一下吧。等到元旦后期末結(jié)束了認認真真的將W5500數(shù)據(jù)傳輸從硬件連接到網(wǎng)絡編程寫一篇大報告分享出來。

最后,說個心聲吧,從ping通到今天完成,足足過了5,6這五六周,有躊躇滿志,更多的是茫然無措。但是我就決定一定要做出來?,F(xiàn)在完成之后激動的都不想睡覺了抓緊時間總結(jié)發(fā)出來。代碼量對于我來說感覺仿佛突破了自己,風格可能還很稚嫩,但是真的很有成就感。尤其是在一個問題卡住了2周多的時間結(jié)果一個偶然發(fā)現(xiàn)是配置管腳的UCF錯了但時候,恨透了愚蠢的自己。這段時間的學習真的收獲了太多了,感謝這段時間的自己。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA設計
    +關注

    關注

    9

    文章

    428

    瀏覽量

    26465
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1347

    瀏覽量

    78933
收藏 人收藏

    評論

    相關推薦

    什么是socket編程 socket與tcp/ip協(xié)議的關系

    基于TCP/IP協(xié)議族,這是一組用于網(wǎng)絡通信的協(xié)議,包括傳輸控制協(xié)議TCP)和互聯(lián)網(wǎng)
    的頭像 發(fā)表于 11-01 16:01 ?112次閱讀

    w5500 作為tcp server,客戶端異常發(fā)送【RST,ACK】斷開連接問題

    測試1 w5500 作為tcp server,上位機labveiw程序作為clinet,正常第二次交互結(jié)束后,客戶端發(fā)送一個【RST,ACK】報文斷開了連接; (1)使用wireshark抓取
    發(fā)表于 10-14 14:01

    TCP協(xié)議是什么

    在網(wǎng)絡通信的廣闊領域中,TCP(Transmission Control Protocol,傳輸控制協(xié)議)扮演著舉足輕重的角色。作為TCP/IP協(xié)議
    的頭像 發(fā)表于 10-09 13:54 ?279次閱讀

    EtherNet/IP主站轉(zhuǎn)Modbus-TCP協(xié)議網(wǎng)關

    捷米特JM-EIPM-TCP網(wǎng)關實現(xiàn)連接EtherNet/IP設備和網(wǎng)絡到Modbus TCP網(wǎng)絡系統(tǒng)。該網(wǎng)關可
    的頭像 發(fā)表于 09-25 11:49 ?164次閱讀
    EtherNet/<b class='flag-5'>IP</b>主站轉(zhuǎn)Modbus-<b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>網(wǎng)關

    串口服務器和TCP/IP協(xié)議是什么關系

    串口服務器與TCP/IP協(xié)議之間存在著緊密而復雜的關系。這種關系主要體現(xiàn)在串口服務器如何利用TCP/I
    的頭像 發(fā)表于 08-25 17:35 ?1362次閱讀

    一文了解TCP/IP協(xié)議

    TCP/IP協(xié)議是現(xiàn)代計算機網(wǎng)絡通信的基礎,是互聯(lián)網(wǎng)及局域網(wǎng)廣泛使用的一套協(xié)議。TCP/IP
    的頭像 發(fā)表于 08-07 15:38 ?982次閱讀
    一文了解<b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協(xié)議</b>

    華納云:TCP IP協(xié)議的發(fā)展和優(yōu)勢

    TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)是互聯(lián)網(wǎng)和現(xiàn)代計算機網(wǎng)絡的基礎
    的頭像 發(fā)表于 07-25 16:49 ?412次閱讀

    TCP IP協(xié)議屬性設置中的IP配置

    在現(xiàn)代網(wǎng)絡中,TCP/IP協(xié)議是基礎架構(gòu)的重要組成部分。掌握TCP/IP協(xié)議屬性設置中的
    的頭像 發(fā)表于 07-23 10:10 ?425次閱讀

    TCP/IP協(xié)議的設計與實現(xiàn)_中文

    電子發(fā)燒友網(wǎng)站提供《TCP/IP協(xié)議的設計與實現(xiàn)_中文.pdf》資料免費下載
    發(fā)表于 07-03 11:28 ?4次下載

    LwIP協(xié)議源碼詳解—TCP/IP協(xié)議實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《LwIP協(xié)議源碼詳解—TCP/IP協(xié)議實現(xiàn).pdf》資料免費下載
    發(fā)表于 07-03 11:22 ?3次下載

    Microchip TCP/IP 協(xié)議應用筆記

    電子發(fā)燒友網(wǎng)站提供《Microchip TCP/IP 協(xié)議應用筆記.pdf》資料免費下載
    發(fā)表于 04-17 14:16 ?1次下載

    ethernetif_input和tcpip協(xié)議線程的作用

    tcpip協(xié)議線程是lwIP協(xié)議的核心線程,負責處理TCP/IP
    的頭像 發(fā)表于 03-20 10:01 ?1111次閱讀

    利用 MPLAB? Harmony v3 TCP/IP協(xié)議在SAM E54 MCU 上實現(xiàn)文件傳輸協(xié)議

    電子發(fā)燒友網(wǎng)站提供《利用 MPLAB? Harmony v3 TCP/IP協(xié)議在SAM E54 MCU 上實現(xiàn)文件傳輸
    發(fā)表于 12-18 11:03 ?0次下載
    利用 MPLAB? Harmony v3 <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>在SAM E54 MCU 上<b class='flag-5'>實現(xiàn)</b>文件傳輸<b class='flag-5'>協(xié)議</b>

    tcp/ip協(xié)議包含哪幾層?tcp和udp有什么區(qū)別?

    tcp/ip協(xié)議包含哪幾層?tcp和udp有什么區(qū)別? TCP/IP
    的頭像 發(fā)表于 11-29 17:40 ?1036次閱讀

    TCP協(xié)議連接狀態(tài)

    TCP是一個巨復雜的協(xié)議,因為他要解決很多問題,而這些問題又帶出了很多子問題和陰暗面。所以學習TCP本身是個比較痛苦的過程,但對于學習的過程
    的頭像 發(fā)表于 11-13 15:47 ?1545次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>的<b class='flag-5'>連接</b>狀態(tài)