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

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

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

3天內不再提示

第二十四章 W55MH32TCP_Client_Multi_Socket示例

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

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗——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的無限可能。

wKgZO2iBiBmAe3DyAACpGc5mWX8613.png

第二十四章 W55MH32TCP_Client_Multi_Socket示例

本篇文章,我們將詳細介紹如何在W55MH32芯片上面實現TCP通信。使用W55MH32的TOE引擎,我們只需進行簡單的socket編程寄存器讀寫,便可輕松實現TCP協議應用。接下來我們通過實戰例程,為大家講解如何使用TOE引擎上的8個socket,設置為TCP Client模式,同時連接1個服務器進行數據回環測試。

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

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報文頭中,表示接收方期望接收的下一個字節的序列號。

wKgZPGiB2d6AaBqcAABA4kCDWJo716.png

TCP 3次握手示意圖

wKgZPGiB2d6AXeDvAAAw-KtnzI4612.png

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實現過程

接下來,我們看看如何在代碼中實現同時開啟8個socket進行回環測試。

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

首先需要在主函數中調用multi_tcpc_socket()函數。

 while(1)
     {
         multi_tcpc_socket(ethernet_buf, dest_ip, dest_port);
    }

multi_tcpc_socket()函數有三個參數:ethernet_buf作為數據緩沖區,用于在客戶端和服務器之間的數據傳輸。

dest_ip代表目標服務器的 IP地址。dest_port是目標服務器的端口號。

multi_tcpc_socket()函數內容如下:

 1. int32_t multi_tcpc_socket(uint8_t*buf,uint8_t*destip,uint16_t destport)
 2. {
 3.     int32_t ret;// return value for SOCK_ERRORs
 4.     uint16_t size=0, sentsize=0;
 5.     // Socket Status Transitions
 6.     // Check the W5500 Socket n status register (Sn_SR, The 'Sn_SR' controlled by Sn_CR command or Packet send/recv status)
 7.     switch(getSn_SR(socket_sn))
 8.     {
 9.     case SOCK_ESTABLISHED:
10.         if(getSn_IR(socket_sn)&Sn_IR_CON)// Socket n interrupt register mask; TCP CON interrupt = connection with peer is successful
11.         {
12. #ifdef _LOOPBACK_DEBUG_
13.             printf("%d:Connected to - %d.%d.%d.%d : %drn", socket_sn, destip[0], destip[1], destip[2], destip[3], destport);
14. #endif
15.             setSn_IR(socket_sn,Sn_IR_CON);// this interrupt should be write the bit cleared to '1'
16.         }
17.         //////////////////////////////////////////////////////////////////////////////////////////////
18.         // Data Transaction Parts; Handle the [data receive and send] process
19.         //////////////////////////////////////////////////////////////////////////////////////////////
20.         if((size= getSn_RX_RSR(socket_sn))>0)// Sn_RX_RSR: Socket n Received Size Register, Receiving data length
21.         {
22.             if(size> DATA_BUF_SIZE)
23.                 size= DATA_BUF_SIZE;              // DATA_BUF_SIZE means user defined buffer size (array)
24.             ret      = recv(socket_sn, buf, size);// Data Receive process (H/W Rx socket buffer -> User's buffer)
25.             buf[size]=0x00;
26.             printf("%d:rece from %d.%d.%d.%d:%d data:%srn", socket_sn, destip[0], destip[1], destip[2], destip[3], destport, buf);
27.             if(ret<=?0)
28.                 return ret;?// If the received data length <= 0, receive failed and process end
29.             size?    =?(uint16_t)ret;
30.             sentsize?=?0;
31. 
32.             // Data sentsize control
33.             while?(size?!= sentsize)
34.             {
35.                 ret?= send(socket_sn, buf?+ sentsize, size?- sentsize);?// Data send process (User's buffer -?> Destination through H/W Tx socket buffer)
36.                 if(ret

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

wKgZPGiB2d6AXeDvAAAw-KtnzI4612.png

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

注意:因為在W55MH32異常斷開服務器時,服務器并不知道我們已經掉線了,所以繼續使用上一次連接的端口進行連接時會被服務器拒絕連接,因此我們這里在連接失敗后會將連接端口自動加1,解決重連失敗的問題。如果是在一些特定的場景下,服務器只允許客戶端使用固定端口連接,這里就不能使用連接端口自動加1的操作。

SOCK_INIT:SOCKET執行連接服務器操作,如果連接成功,SOCKET狀態改為SOCK_ESTABLISHED;連接失敗,SOCKET狀態改為關閉狀態。

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

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

執行完狀態機后,會自動切換到下一個socket,這樣就能實現同時開啟8個socket進行TCP Client模式的數據回環測試了。

8運行結果

燒錄例程運行后,首先進行了PHY鏈路檢測,然后打印設置的網絡地址信息,最后則是TCP_Client_Multi_Socket數據回環測試。當服務器未開啟時,會一直打印打開socket和連接服務器提示消息。

wKgZO2iB2d6AHZT2AACBfS94W54094.pngwKgZPGiB2d6AUk_mAACfNSWAHbs678.png

9總結

本文講解了如何在 W55MH32芯片上使用 8個 socket實現 TCP客戶端模式,同時連接 1個服務器進行數據回環測試,通過實戰例程展示了從初始化 socket到建立連接、數據交互及處理連接關閉的完整過程。文章詳細介紹了 TCP協議的概念、特點、與 UDP的區別、應用場景、數據交互流程、ACK機制、重傳機制和 Keepalive機制,幫助讀者理解其在可靠數據傳輸中的實際應用價值。

下一篇文章將講解如何在 W55MH32上實現多路 Socket設置為 TCP服務器模式,并監聽同一個端口進行測試,解析該功能的核心原理及應用,同時講解在 W55MH32上實現該功能的具體步驟與要點,敬請期待!

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

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

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

審核編輯 黃宇

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

    關注

    5154

    文章

    19708

    瀏覽量

    318119
  • 以太網
    +關注

    關注

    41

    文章

    5684

    瀏覽量

    176261
  • Client
    +關注

    關注

    0

    文章

    13

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    第二十四章 WWDG——窗口看門狗

    W55MH32的窗口看門狗是7位遞減計數器,有上下窗口值,時鐘來自PCLK1用于監測軟件故障,代碼演示了其配置、中斷測試與復位測試。
    的頭像 發表于 06-20 14:00 ?626次閱讀
    <b class='flag-5'>第二十四章</b> WWDG——窗口看門狗

    火力發電廠水汽分析方法 第二十四部分:硫酸鋁凝聚劑量的測定(

    火力發電廠水汽分析方法 第二十四部分:硫酸鋁凝聚劑量的測定(堿度差法) Analytical methods of steam and water in power plants Part
    發表于 06-08 12:13 ?20次下載

    模擬電路網絡課件 第二十四節:甲乙類互補對稱功率放大電路

    模擬電路網絡課件 第二十四節:甲乙類互補對稱功率放大電路 5.2 甲乙類互補對稱功率放大電路 乙類放大電路的失真:
    發表于 09-17 11:14 ?3214次閱讀
    模擬電路網絡課件 <b class='flag-5'>第二十四</b>節:甲乙類互補對稱功率放大電路

    2022年第二十四屆高交會綠色低碳路線

    2022年第二十四屆高交會綠色低碳路線 第二十四屆中國國際高新技術成果交易會(簡稱:高交會)于2022年11月15-19日在深圳火熱舉辦中! 本次展會以”科技改革驅動創新,科技創新驅動發展”為主
    發表于 11-17 15:07 ?653次閱讀
    2022年<b class='flag-5'>第二十四</b>屆高交會綠色低碳路線

    普渡機器人亮相第二十四屆高交會,一起“見圳”科技魅力

    普渡機器人亮相第二十四屆高交會,一起“見圳”科技魅力 11月15日,第二十四屆中國國際高新技術成功交易會(簡稱:高交會)在深圳開幕。本屆大會以“科技改革驅動創新,科技創新驅動發展”為主題,重點展示了
    的頭像 發表于 11-21 17:20 ?1424次閱讀
    普渡機器人亮相<b class='flag-5'>第二十四</b>屆高交會,一起“見圳”科技魅力

    第二十四屆高交會閉幕,普渡科技獲評“最佳品牌獎”

    第二十四屆高交會閉幕,普渡科技機器人獲評“最佳品牌獎” 備受矚目的第二十四屆中國國際高新技術成果交易會(以下簡稱高交會)在深圳順利閉幕。展會期間,普渡科技的精彩亮相吸引了眾多展商、觀眾、媒體記者等
    的頭像 發表于 12-13 11:06 ?998次閱讀
    <b class='flag-5'>第二十四</b>屆高交會閉幕,普渡科技獲評“最佳品牌獎”

    【參展消息】格瑞普將攜創新產品與您相約第二十四屆高交會

    參展消息第二十四屆中國國際高新技術成果交易會(CHTF2022)(簡稱:高交會)激發科技活力,展示科技成果來自格瑞普的邀請函2022年第二十四屆中國國際高新技術成果交易會,將于本月11月15日-19
    的頭像 發表于 11-16 15:33 ?1106次閱讀
    【參展消息】格瑞普將攜創新產品與您相約<b class='flag-5'>第二十四</b>屆高交會

    華正新材將亮相第二十四屆中國國際光電博覽會

    第二十四屆中國國際光電博覽會將于9月6日---8日在深圳寶安會展中心舉辦,華正新材將亮相第二十四屆中國國際光電博覽會。 企業簡介 浙江華正新材料股份有限公司成立于2003年,是華立集團的控股成員企業
    發表于 08-25 11:25 ?320次閱讀

    普源精電(RIGOL)獲頒第二十四屆“中國專利金獎”

    2023年10月14日至16日,由國家知識產權局和遼寧省人民政府主辦,大連市人民政府承辦的第十三屆中國國際專利技術與產品交易會暨第二十四屆中國專利獎頒獎大會在大連市世界博覽廣場隆重舉辦,普源精電(RIGOL)作為第二十四屆“中國專利金獎”獲獎者,攜眾多亮眼產品亮相本次會議
    的頭像 發表于 10-19 10:20 ?845次閱讀

    第三章 W55MH32 TCP Client示例

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

    十四章 W55MH32 TFTP示例

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

    第二十五章 W55MH32 TCP_Server_Multi_Socket示例

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

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

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

    第二十七章 W55MH32?Interrupt示例

    本文講解了如何在 W55MH32?芯片上使用 TOE?中斷功能并進行回環數據測試,通過實戰例程展示了從初始化中斷引腳、處理中斷、開啟中斷功能到在主循環中運行 TCP?回環服務器的完整過程。文章詳細
    的頭像 發表于 07-24 16:14 ?95次閱讀
    <b class='flag-5'>第二十</b>七章 <b class='flag-5'>W55MH</b>32?Interrupt<b class='flag-5'>示例</b>

    第二十九章 W55MH32 Modbus_TCP_Server示例

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