女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

第四章 W55MH32 TCP Server示例

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-07-24 09:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗——W55MH32高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業控制中多樣化的連接需求,無論是與各類傳感器、執行器的通信,還是對復雜工業協議的支持,都能游刃有余,成為復雜工控領域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網關模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32L這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZPGiBh02AFdVeAACJdwYamko071.png

第四章 W55MH32 TCP Server示例

本篇文章,我們將詳細介紹如何在W55MH32芯片上面實現TCP通信。并通過實戰例程,為大家講解如何使用W55MH32作為TCP Server進行數據回環測試,有關TCP協議的簡介以及特點,請參考TCP Client章節。

該例程用到的其他網絡協議,例如DHCP,請參考相關章節。有關W55MH32的初始化過程,也請參考相關章節,這里將不再贅述。

1 TCP協議簡介

TCP (Transmission Control Protocol)是一種面向連接的、可靠的傳輸層協議,它用于在網絡中可靠地傳輸數據。TCP是互聯網協議族中的核心協議之一,通常與 IP協議(Internet Protocol)一起使用,形成套接字通信。

2 TCP協議特點

面向連接:在傳輸數據之前,TCP需要建立一個連接,保證發送方與接收方能夠彼此通信。通過三次握手(Three-Way Handshake)過程來建立連接,確保雙方的通信是可靠的。

可靠性:TCP提供可靠的數據傳輸,確保數據完整并且按順序到達接收端。如果數據丟失或出錯,TCP會自動重傳丟失的數據包。

流量控制:TCP使用流量控制機制來調節數據的發送速度,防止接收方處理不過來導致數據丟失。常用的流量控制方法是滑動窗口(Sliding Window)。

擁塞控制:TCP可以動態調整傳輸速率,以避免網絡擁塞。采用算法如慢啟動、擁塞避免、快速重傳等。

全雙工通信:在 TCP連接建立后,數據可以在兩個方向同時進行傳輸,支持雙向通信。

有序數據傳輸:TCP會對數據包進行編號,確保數據按順序傳輸,即使網絡發生延遲,接收端也能按順序接收到數據。

字節流服務:TCP傳輸的數據是字節流,不關心應用層數據的邊界,應用層需要自己解析數據邊界。

3 TCP與 UDP的區別

TCP是可靠的、面向連接的協議,適合需要數據完整性和順序保證的應用,如網頁瀏覽、文件傳輸等。

UDP(User Datagram Protocol)是無連接、不可靠的協議,適合對時效性要求較高且可以容忍丟包的應用,如視頻流、在線游戲等。

4 TCP應用場景

接下來,我們了解下在W55MH32上,可以使用TCP協議完成哪些操作及應用呢?

遠程監控和數據采集:嵌入式設備通常用于采集傳感器數據,并通過以太網連接上傳到遠程服務器,TCP協議確保數據傳輸的可靠性和完整性。

設備遠程控制:許多嵌入式系統需要通過網絡接收控制指令(例如工業自動化中的PLC控制),TCP協議提供了可靠的通信通道。

物聯網IoT):許多物聯網設備使用TCP協議與云服務器或其他設備進行通信,傳輸數據、執行命令等。

嵌入式Web服務器:一些嵌入式設備內置Web服務器(例如路由器、網關、傳感器設備等),通過TCP協議提供網頁接口給用戶進行配置和監控。

5使用TCP進行數據交互的流程

TCP連接建立(三次握手)

在開始傳輸數據之前,TCP會通過三次握手建立連接:

第一次握手:客戶端向服務器發送一個帶有 SYN標志的數據包,表示請求建立連接。

第二次握手:服務器收到 SYN數據包后,回復一個帶有 SYN和 ACK標志的數據包,表示同意建立連接。

第三次握手:客戶端收到服務器的 SYN+ACK后,發送一個帶有 ACK標志的數據包,連接建立完成。

數據交互

TCP連接斷開(四次揮手)

當通信結束時,TCP需要通過四次揮手來斷開連接:

第一次揮手:客戶端發送一個 FIN數據包,表示數據發送完畢,準備關閉連接。

第二次揮手:服務器收到 FIN數據包后,回復一個 ACK數據包,表示同意關閉連接。

第三次揮手:服務器發送一個 FIN數據包,表示數據發送完畢,準備關閉連接。

第四次揮手:客戶端收到服務器的 FIN數據包后,發送一個 ACK數據包,連接正式關閉。

ACK字段:ACK包含在 TCP報文頭中,表示接收方期望接收的下一個字節的序列號。

wKgZPGiBh2CAKaHbAABMM9ZIAD0213.png

TCP 3次握手示意圖

TCP 4次揮手示意圖

6 TCP的ACK機制、重傳機制和Keepalive機制

TCP的ACK機制

ACK是 TCP用于確認已成功接收到數據包的機制。在 TCP通信中,每個數據包都包含一個序列號,接收方用 ACK來告訴發送方已經成功收到的字節序列。

累積確認:TCP使用累積確認方式,表示接收方已經連續收到所有數據,直到某個序列號為止。

超時重傳:如果發送方在超時時間內未收到 ACK,就會重傳該數據包。

TCP的重傳機制

TCP的重傳機制保證了數據的可靠傳輸。以下是常見的重傳機制:

超時重傳:

發送方設置一個定時器,當發送的數據包在規定時間內未收到 ACK,則觸發重傳。

超時時間是動態調整的,由 TCP的往返時間(RTT, Round Trip Time)估算得出。

快速重傳:

當接收方發現數據包丟失時,發送重復的 ACK(稱為冗余 ACK),提醒發送方某個數據包未到達。

如果發送方連續收到 3個重復的 ACK,就會立即重傳對應的數據包,而不必等待超時。

選擇性重傳(Selective Repeat, SACK):

在累積確認的基礎上,TCP還可以通過 SACK選項告訴發送方哪些特定的塊已收到,哪些未收到。

這可以減少不必要的重傳,提高效率。

TCP Keepalive 機制

TCP Keepalive是 TCP協議的一種可選機制,用于檢測長時間空閑的連接是否仍然有效。它的主要作用是:

維護連接狀態:檢測對方主機是否仍在線,避免資源被長期占用。

釋放死連接:如果連接已經失效(如網絡中斷或對方主機崩潰),Keepalive可以及時釋放資源。

防止中間設備超時關閉連接:一些 NAT、路由器或防火墻可能會在連接長時間不活動時自動關閉,Keepalive可防止這種情況。

用法:在W55MH32的TOE引擎中,需要在Sn_KPALVTR寄存器中設置Keepalive時間,然后在成功連接服務器后發送一條數據來激活Keepalive。

7實現過程

接下來,我們一起來看看如何在W55MH32上實現TCP服務器模式,監聽端口并進行回環測試。

注意:測試實例需要PC端和W55MH32處于同一網段。

步驟1:開啟TCP KeepAlive功能(避免出現假連接情況)

在W55MH32中,KeepAlive的時間單元為5秒,因為設我們設置6個單元,即30秒發送1次KeepAlive報文。

/* Enable keepalive,Parameter 2 is the keep alive time, with a unit of 5 seconds */ setSn_KPALVTR(SOCKET_ID, 6); // 30s keepalive

步驟2:在主循環中運行TCP Server回環測試程序

while (1) { loopback_tcps(SOCKET_ID, ethernet_buf, local_port); }

loopback_tcps()函數的三個傳參分別為,SOCKET ID,交互的緩存數組,本地端口號。

示例的本地端口號為:8080。

loopback_tcps()函數內容如下:

/** * @brief tcp server loopback test * @param sn: socket number * @param buf: Data sending and receiving cache * @param port: Listen port * @return value for SOCK_ERRORs,return 1:no error */ int32_t loopback_tcps(uint8_t sn, uint8_t *buf, uint16_t port) { int32_t ret; uint16_t size = 0, sentsize = 0; #ifdef _LOOPBACK_DEBUG_ uint8_t destip[4]; uint16_t destport; #endif switch (getSn_SR(sn)) { case SOCK_ESTABLISHED: if (getSn_IR(sn) & Sn_IR_CON) { #ifdef _LOOPBACK_DEBUG_ getSn_DIPR(sn, destip); destport = getSn_DPORT(sn); printf("%d:Connected - %d.%d.%d.%d : %drn", sn, destip[0], destip[1], destip[2], destip[3], destport); #endif #if KEEPALIVE_ENABLE == 1 // We need to send a packet of data to activate keepalive ret = send(sn, (uint8_t *)"", 1); // Data send process if (ret < 0) // Send Error occurred (sent data length < 0) { close(sn); // socket close return ret; } #endif setSn_IR(sn, Sn_IR_CON); } if ((size = getSn_RX_RSR(sn)) > 0) // Don't need to check SOCKERR_BUSY because it doesn't not occur. { if (size > DATA_BUF_SIZE) size = DATA_BUF_SIZE; ret = recv(sn, buf, size); if (ret <= 0) return ret; // check SOCKERR_BUSY & SOCKERR_XXX. For showing the occurrence of SOCKERR_BUSY. size = (uint16_t)ret; sentsize = 0; buf[size] = 0x00; printf("rece data:%srn", buf); while (size != sentsize) { ret = send(sn, buf + sentsize, size - sentsize); if (ret < 0) { close(sn); return ret; } sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero. } } break; case SOCK_CLOSE_WAIT: #ifdef _LOOPBACK_DEBUG_ printf("%d:CloseWaitrn", sn); #endif if ((ret = disconnect(sn)) != SOCK_OK) return ret; #ifdef _LOOPBACK_DEBUG_ printf("%d:Socket Closedrn", sn); #endif break; case SOCK_INIT: #ifdef _LOOPBACK_DEBUG_ printf("%d:Listen, TCP server loopback, port [%d]rn", sn, port); #endif if ((ret = listen(sn)) != SOCK_OK) return ret; break; case SOCK_CLOSED: #ifdef _LOOPBACK_DEBUG_ printf("%d:TCP server loopback startrn", sn); #endif if ((ret = socket(sn, Sn_MR_TCP, port, 0x00)) != sn) return ret; #ifdef _LOOPBACK_DEBUG_ printf("%d:Socket openedrn", sn); #endif break; default: break; } return 1; }

在這個程序中,會運行TCP Server狀態機,基于SOCKET不同的狀態執行對應的操作,SOCKET的狀態變化如下圖所示:

wKgZPGiBh02ASE9XAAAvf4g4DTg817.png

SOCK_CLOSED:當前SOCKET未打開,配置連接服務器及連接端口號后打開SOCKET,打開成功后SOCKET會進入SOCK_INIT狀態。

SOCK_INIT:SOCKET打開成功,開始監聽端口,當有客戶端進行連接時,SOCKET狀態改為SOCK_ESTABLISHED。

SOCK_ESTABLISHED:首先清除連接成功中斷,并發送1包數據激活KeepAlive,然后讀取Sn_RX_RSR(空閑接收緩存寄存器)寄存器值,當收到服務器數據時,Sn_RX_RSR寄存器的值會大于0,此時我們將接收到的數據打印并將數據回環發送。

SOCK_CLOSE_WAIT:當客戶端主動斷開連接時,SOCKET狀態改為SOCK_CLOSE_WAIT狀態,這是一個半關閉狀態,可以進行關閉前最后的數據傳輸。使用disconnect()函數徹底斷開連接時,SOCKET狀態將改為SOCK_CLOSED狀態。

8運行結果

燒錄例程運行后,首先進行了PHY鏈路檢測,然后是通過DHCP獲取網絡地址并打印網絡地址信息,最后則是進行TCP數據回環測試,當客戶端未連接時,會一直監聽,等待客戶端連接。

wKgZO2iBh02ADPi9AABO7EbKr2Y663.png

接下來我們打開SocketTester網絡調試工具,設置為TCP Client模式,輸入W55MH32的IP地址和端口后進行連接,然后就能看到W55MH32打印客戶端連接信息了,最后用SocketTester向W55MH32發送數據進行回環測試。

wKgZO2iBh02AZQRFAABbv9TkutE366.png

9總結

本文介紹在 W55MH32芯片上實現 TCP服務器模式進行數據回環測試的方法。先回顧 TCP協議相關知識,接著展示實現過程,包括開啟 Keepalive功能,在主循環運行測試程序。程序依據 SOCKET不同狀態執行操作,狀態從關閉、初始化、監聽,到連接建立、關閉等待。燒錄例程后經 PHY鏈路檢測、獲取網絡地址,借助網絡調試工具完成測試。

下一篇將講解在該芯片上實現 UDP通信及數據回環測試,介紹 UDP相關原理和實現步驟。敬請期待!

WIZnet是一家無晶圓廠半導體公司,成立于 1998年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU?面向各種應用中的嵌入式互聯網設備。

WIZnet在全球擁有 70多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 以太網
    +關注

    關注

    41

    文章

    5684

    瀏覽量

    176280
  • 物聯網
    +關注

    關注

    2931

    文章

    46306

    瀏覽量

    393620
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1404

    瀏覽量

    81194
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    第三十 W55MH32 HTTP_Server&amp;NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實現 HTTP_Server?與 NetBIOS?功能,并通過 NetBIOS?訪問 HTTP?服務器網頁內容,通過實戰例程展示了在主循環中并行處理 HTTP?與 NetBIOS?相關事務的過程。
    的頭像 發表于 07-24 16:21 ?135次閱讀
    第三十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP_<b class='flag-5'>Server</b>&amp;NetBIOS<b class='flag-5'>示例</b>

    第二十九章 W55MH32 Modbus_TCP_Server示例

    本文講解了如何在 W55MH32?芯片上實現 Modbus TCP?協議的服務器模式,通過實戰例程展示了從初始化 LED?相關函數、主循環調用處理函數到解析處理接收到的報文的完整過程。文章詳細介紹了
    的頭像 發表于 07-24 16:18 ?96次閱讀
    第二十九章 <b class='flag-5'>W55MH32</b> Modbus_<b class='flag-5'>TCP_Server</b><b class='flag-5'>示例</b>

    第二十六章 W55MH32?上位機搜索和配置示例

    本文講解了如何在 W55MH32?芯片上實現上位機搜索和配置功能,通過實戰例程展示了使用開源上位機配置工具 SmartConfigTool?搜索局域網中的 W55MH32?并進行網絡地址配置的過程
    的頭像 發表于 07-24 16:13 ?101次閱讀
    第二十六章 <b class='flag-5'>W55MH32</b>?上位機搜索和配置<b class='flag-5'>示例</b>

    第二十五 W55MH32 TCP_Server_Multi_Socket示例

    本文講解了如何在 W55MH32?芯片上使用 8?個 socket?實現 TCP?服務器模式,讓多個客戶端連接進行數據回環測試,通過實戰例程展示了從初始化 socket?到監聽端口、處理客戶端連接
    的頭像 發表于 07-24 16:10 ?113次閱讀
    第二十五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> <b class='flag-5'>TCP_Server</b>_Multi_Socket<b class='flag-5'>示例</b>

    第二十四章 W55MH32TCP_Client_Multi_Socket示例

    本文講解了如何在 W55MH32?芯片上使用 8?個 socket?實現 TCP?客戶端模式,同時連接 1?個服務器進行數據回環測試,通過實戰例程展示了從初始化 socket?到建立連接、數據交互
    的頭像 發表于 07-24 16:08 ?104次閱讀
    第二十<b class='flag-5'>四章</b> <b class='flag-5'>W55MH32TCP</b>_Client_Multi_Socket<b class='flag-5'>示例</b>

    第十八章 W55MH32 FTP_Server示例

    本文講解了如何在 W55MH32?芯片上實現 FTP?協議的服務器模式,通過實戰例程展示了使用 W55MH32?作為 FTP?服務器與 PC?端進行文件傳輸、目錄操作等功能的過程,涵蓋獲取網絡配置
    的頭像 發表于 07-24 11:55 ?78次閱讀
    第十八章 <b class='flag-5'>W55MH32</b> FTP_<b class='flag-5'>Server</b><b class='flag-5'>示例</b>

    第十六章 W55MH32 PING示例

    本文講解了如何在 W55MH32?芯片上通過 IPRAW?模式實現 ICMP?協議中的 PING?命令,以進行網絡連通性測試,通過實戰例程展示了從發送 PING?請求、接收并解析回復到統計結果的完整
    的頭像 發表于 07-24 11:41 ?77次閱讀
    第十六章 <b class='flag-5'>W55MH32</b> PING<b class='flag-5'>示例</b>

    第十五 W55MH32 SNMP示例

    本文講解了如何在 W55MH32?芯片上實現 SNMP?功能,通過實戰例程展示了使用 MIB Browser?管理 W55MH32?的具體過程,涵蓋在 MIB Browser?中創建分支、添加葉子
    的頭像 發表于 07-24 10:43 ?165次閱讀
    第十五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> SNMP<b class='flag-5'>示例</b>

    第十四章 W55MH32 TFTP示例

    本文講解了如何在 W55MH32?芯片上實現 TFTP?協議,通過實戰例程詳細展示了使用 TFTP?客戶端模式從服務器獲取文本文件的過程,涵蓋 TFTP?初始化、發送讀請求、運行協議并處理結果等核心
    的頭像 發表于 07-24 10:37 ?157次閱讀
    第十<b class='flag-5'>四章</b> <b class='flag-5'>W55MH32</b> TFTP<b class='flag-5'>示例</b>

    第十 W55MH32 SNTP示例

    本文講解了如何在W55MH32芯片上實現SNTP授時功能,通過實例詳細展示了從SNTP服務器同步時間的實現流程,包括時間請求、響應解析和本地時間校準等核心步驟。文章還對SNTP的應用場景進行了分析,幫助讀者理解其在時間同步中的實際應用價值。
    的頭像 發表于 07-24 09:43 ?175次閱讀
    第十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> SNTP<b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

    本文介紹了在 W55MH32?芯片上實現 HTTP Server?功能,并通過瀏覽器修改其網絡地址信息的方法。闡述了 HTTP?協議的概念、特點、應用場景、工作流程、請求方法、響應內容,以及 Web?頁面構成和交互方式。展示了在W55M
    的頭像 發表于 07-24 09:35 ?134次閱讀
    第九<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP <b class='flag-5'>Server</b><b class='flag-5'>示例</b>

    第六 W55MH32 UDP?Multicast示例

    本文介紹了在W55MH32芯片上實現UDP組播的原理、應用場景及回環測試方法,并通過實戰代碼展示了其具體實現過程。下一篇文章將聚焦DNS例程,講解其工作原理及實現方法,幫助大家更深入地理解網絡通信。敬請期待!
    的頭像 發表于 07-24 09:19 ?137次閱讀
    第六<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP?Multicast<b class='flag-5'>示例</b>

    第五 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實現 UDP?通信及數據回環測試的方法。闡述了 UDP?協議的概念、特點、應用場景、報文傳輸流程和報文結構,展示了實現過程,借助網絡調試工具完成測試。
    的頭像 發表于 07-24 09:13 ?109次閱讀
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第三 W55MH32 TCP Client示例

    本文介紹在 W55MH32?芯片上實現 TCP?客戶端模式進行數據回環測試的方法。闡述 TCP?協議概念、特點、與 UDP?區別、應用場景及相關機制。展示實現過程,包括開啟 Keepalive?功能,在主循環運行測試程序。燒錄例
    的頭像 發表于 07-24 09:06 ?168次閱讀
    第三<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> <b class='flag-5'>TCP</b> Client<b class='flag-5'>示例</b>

    第二 W55MH32 DHCP示例

    本文介紹 DHCP?協議,包括其在 IP?網絡自動分配參數的功能、便捷配置等特點、工作原理、報文格式和應用場景。通過 W55MH32?實戰例程展示動態獲取網絡地址信息過程,含注冊定時器中斷、啟用模式和獲取信息等步驟,燒錄后可完成檢測與信息打印,PC?端能 PING?通設備。
    的頭像 發表于 07-24 09:02 ?162次閱讀
    第二<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> DHCP<b class='flag-5'>示例</b>