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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

學(xué)FPGA,慢慢來(lái) ? 2017-12-18 10:28 ? 次閱讀

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

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

0000000000000000_ 00000__1_01_00000000

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

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

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

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

在配置完成這些之后,我們對(duì)socket1 mode即1端口的模式選擇寄存器進(jìn)行書(shū)寫(xiě),將W5500模式選擇為T(mén)CP模式。具體的操作為將對(duì)應(yīng)的后三位寫(xiě)入為001。之后再對(duì)該寄存器進(jìn)行讀操作,以此來(lái)確定模塊卻是在TCP模式運(yùn)行。確認(rèn)之后開(kāi)始配置目標(biāo)IP,端口,最大字長(zhǎng)等信息。之所以先配置TCP模式是因?yàn)槲覀兒筮吪渲玫募拇嫫鞫紝儆诙丝诩拇嫫鲄^(qū),而我們?cè)谂渲弥皯?yīng)先配置模式寄存器。

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

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

設(shè)計(jì)模塊如下

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

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

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

最后我寫(xiě)了一個(gè)同步FIFO來(lái)將幾個(gè)拆分的幾位數(shù)據(jù)合并。

合并之后波形如下

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

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

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

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

    關(guān)注

    9

    文章

    428

    瀏覽量

    26447
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1337

    瀏覽量

    78863
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    w5500 作為tcp server,客戶(hù)端異常發(fā)送【RST,ACK】斷開(kāi)連接問(wèn)題

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

    TCP協(xié)議是什么

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    電子發(fā)燒友網(wǎng)站提供《利用 MPLAB? Harmony v3 TCP/IP協(xié)議在SAM E54 MCU 上實(shí)現(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'>實(shí)現(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 ?989次閱讀

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

    TCP是一個(gè)巨復(fù)雜的協(xié)議,因?yàn)樗鉀Q很多問(wèn)題,而這些問(wèn)題又帶出了很多子問(wèn)題和陰暗面。所以學(xué)習(xí)TCP本身是個(gè)比較痛苦的過(guò)程,但對(duì)于學(xué)習(xí)的過(guò)程
    的頭像 發(fā)表于 11-13 15:47 ?1342次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>的<b class='flag-5'>連接</b>狀態(tài)

    TCP協(xié)議詳細(xì)解析

    TCPTCP/IP協(xié)議族中一個(gè)最核心的協(xié)議,它向下使用網(wǎng)絡(luò)層IP
    的頭像 發(fā)表于 11-03 09:14 ?4111次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>詳細(xì)解析

    TCP/IP 協(xié)議通信接口的實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《TCP/IP 協(xié)議通信接口的實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-26 09:21 ?1次下載
    <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b> <b class='flag-5'>協(xié)議</b>通信接口的<b class='flag-5'>實(shí)現(xiàn)</b>