單芯片解決方案,開啟全新體驗——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的無限可能。
第六章 W55MH32 UDPMulticast示例
本篇文章,我們將詳細介紹如何在W55MH32芯片上面實現UDP組播(UDP Multicast)通信。并通過實戰例程,為大家講解如何使用UDPMulticast進行回環測試。
該例程用到的其他網絡協議,例如DHCP、UDP,請參考相關章節。有關W55MH32的初始化過程,也請參考Network Install章節,這里將不再贅述。
1 UDPMulticast簡介
UDP組播是一種數據傳輸方法,允許數據從一個源發送到多個目標設備,加入了相應組播組的接收者都可以接收到數據。這種方式非常高效,廣泛應用于需要將相同數據同時傳輸給多個接收者的場景,如視頻流媒體、實時數據分發和大規模軟件更新等。IPv4的組播地址范圍為 224.0.0.0到 233.255.255.255。
2 UDP Multicast的特點
基于UDP協議:UDP是無連接的協議,提供快速、低開銷的數據傳輸,但不保證數據的可靠性、順序性或重傳。UDP組播繼承了這些特性,因此適合對實時性要求高、對可靠性要求較低的場景。
高效數據傳輸:發送者只需要發送一份數據,網絡設備(如路由器、交換機)負責將數據復制并傳輸到所有組播成員。這種方式節省了帶寬,相比單播更高效。
不保證可靠性:數據可能丟失,接收者需要自己處理數據包丟失問題。
動態成員管理:組播組的成員可以動態加入或離開,無需通知發送者。
3 UDPMulticast應用場景
接下來,我們了解下在W55MH32上,可以使用UDP Multicast完成哪些操作及應用呢?
設備發現與自動配置:實現設備自動發現和網絡配置,如智能家居設備通過組播尋找網關或其他設備。
實時數據廣播:用于傳感器數據分發、工業控制和車聯網中實時數據的高效傳輸。
固件更新與配置分發:對多個設備同時進行固件升級或統一下發配置,減少網絡負擔。
告警和事件通知:設備異常時實時向多個監控終端廣播告警消息。
時間同步:用于局域網內的多設備時間同步,提升協同效率。
測試與調試:設備開發階段,利用組播收集狀態信息和日志數據。
4 UDP組播環回測試工作流程
1. 接收方通過IGMP協議加入組播組:IGMP(Internet Group Management Protocol)是一種網絡層協議,用于管理主機和路由器間的組播組成員關系。當接收方希望接收某個組播地址的數據時,會通過IGMP向路由器發送加入組播組的請求。
2. 發送方發送測試數據:發送方通過UDP協議將數據包發送到指定的組播地址和端口。所有加入組播組的接收方均可接收到數據包。
3. 接收方回傳消息:接收方在接收到組播數據后,主動回傳響應消息到該組播組當中?;貍鞯南⒖梢杂糜诖_認發送成功或測試鏈路的完整性。
5 UDP單播、組播和廣播的區別
以下是UDP單播、組播和廣播的區別:
特性 | 單播 (Unicast) | 組播 (Multicast) | 廣播 (Broadcast) |
通信范圍 | 一對一 | 一對多(組播組成員) | 一對所有(局域網內設備) |
效率 | 點對點,高效 | 比單播高效,需組播支持 | 浪費帶寬,負載較高 |
地址類型 | 目標設備 IP地址 | 組播 IP地址(224.0.0.0+) | 廣播地址(子網廣播地址) |
網絡配置 | 無需額外配置 | 網絡需支持組播 | 局限于子網內,支持廣播 |
應用場景 | 客戶端-服務器通信 | 音視頻流、多設備消息廣播 | 局域網設備發現、告警通知 |
6報文解析
UDP協議報文已經在UDP章節中講解過了,有關這部分的內容請參考相關章節,這里不再贅述。下面我們來講解一下設備在加入組播時使用的IGMP報文。
IGMP加入組播組時發送的報文是IGMP Membership Report報文。其格式如下:
字節偏移 | 字段名稱 | 長度 | 描述 |
0 | 類型 (Type) | 1字節 | 指示 IGMP報文的類型(例如加入、離開)。 |
1 | 最大響應時間 (Max Resp Time) | 1字節 | 指定應答的最大等待時間,僅在查詢報文中使用。 |
2-3 | 校驗和 (Checksum) | 2字節 | 對報文頭的校驗和,用于檢測傳輸錯誤。 |
4-7 | 組地址 (Group Address) | 4字節 | 表示加入的組播組的 IP地址。 |
字段解釋
類型 (Type)
值為 0x16(IGMPv2 Membership Report):表示主機請求加入組播組。
值為 0x22(IGMPv3 Membership Report):用于支持 IGMPv3的精細組播組管理。
校驗和 (Checksum)
計算方法基于標準的 IP校驗和算法。
用于確保 IGMP報文的完整性。
組地址 (Group Address)
組播組的 IP地址(范圍:224.0.0.0 - 239.255.255.255)。
加入時表示目標的組播地址。
報文示例
|報文解析| Internet Group Management Protocol [IGMP Version: 2] Type: Membership Report (0x16) (Type為0x16,表示主機請求加入組播組) Max Resp Time: 0.0 sec (0x00) (最大響應時間為0) Checksum: 0x08f3 [correct] (校驗和為0x08f3) [Checksum Status: Good] Multicast Address: 224.1.1.11 (組地址為224.1.1.11) |報文原文| 16 00 08 f3 e0 01 01 0b
7實現過程
接下來,我們在W55MH32上實現UDP組播回環測試。
注意:測試實例需要PC端和W55MH32處于同一網段,且連接的路由器需支持IGMP協議。
UDP通信已經在硬件層面實現,因此我們只需要在主循環中調用udp_multicast()組播功能的函數即可,如下所示:
while (1) { udp_multicast(SOCKET_ID, ethernet_buf, Multicast_mac, Multicast_IP, Multicast_port); }
udp_multicast需要傳入5個參數,分別是socket號,socket緩存,組播MAC地址,組播IP地址,組播端口號。
udp_multicast函數內容如下:
int32_t udp_multicast(uint8_t sn, uint8_t *buf, uint8_t *multicast_mac, uint8_t *multicast_ip, uint16_t multicast_port) { int32_t ret; uint16_t size, sentsize; uint8_t destip[4]; uint16_t destport, port = 50000; switch (getSn_SR(sn)) { case SOCK_UDP: if ((size = getSn_RX_RSR(sn)) > 0) { if (size > DATA_BUF_SIZE) size = DATA_BUF_SIZE; ret = recvfrom(sn, buf, size, destip, (uint16_t *)&destport); buf[ret] = 0x00; printf("recv from [%d.%d.%d.%d][%d]: %srn", destip[0], destip[1], destip[2], destip[3], destport, buf); if (ret <= 0) { #ifdef _MULTICAST_DEBUG_ printf("%d: recvfrom error. %ldrn", sn, ret); #endif return ret; } size = (uint16_t)ret; sentsize = 0; while (sentsize != size) { ret = sendto(sn, buf + sentsize, size - sentsize, destip, destport); if (ret < 0) { #ifdef _MULTICAST_DEBUG_ printf("%d: sendto error. %ldrn", sn, ret); #endif return ret; } sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero. } } break; case SOCK_CLOSED: #ifdef _MULTICAST_DEBUG_ printf("%d:Multicast Loopback startrn", sn); #endif setSn_DIPR(sn, multicast_ip); setSn_DPORT(sn, multicast_port); setSn_DHAR(sn, multicast_mac); if ((ret = socket(sn, Sn_MR_UDP, port, Sn_MR_MULTI)) != sn) return ret; #ifdef _MULTICAST_DEBUG_ printf("%d:Opened, UDP組播 Socketrn", sn); printf("%d:Multicast Group IP - %d.%d.%d.%drn", sn, multicast_ip[0], multicast_ip[1], multicast_ip[2], multicast_ip[3]); printf("%d:Multicast Group Port - %drn", sn, multicast_port); #endif break; default: break; } return 1; }
程序進入到udp_multicast函數后會執行一個狀態機,根據Socket的狀態來執行對應的操作。
當Socket處于SOCK_CLOSED狀態時,函數會初始化Socket并加入組播組,然后打印Socket的狀態和組播組的信息。
當Socket處于SOCK_UDP狀態時,函數會檢查是否有數據接收,如果有則將數據打印出來并發送回源地址。函數成功執行后返回1。
8運行結果
燒錄例程運行后,首先進行了PHY鏈路檢測,然后是DHCP獲取網絡地址結果,最后是進行UDPMulticast回環測試,如下圖所示:
接下來,我們將打開一個支持加入 UDP組播功能的網絡調試工具。在使用該工具時,首先要完成必要的配置操作,具體包括設置監聽組播和發送消息的相關參數。當完成上述配置后,我們向組播組發送消息,此時可以觀察到串口會打印出我們所發送的消息,同時在網絡調試工具的組播接收區域會收到相應的回環消息,組播回環測試流程得以正常運行。
注意:如果網絡調試工具不支持加入組播,會導致收不到回環數據。這里我選的是gitcode上一個開源項目,鏈接:UDP組播調試工具。
9總結
本文介紹了在W55MH32芯片上實現UDP組播的原理、應用場景及回環測試方法,并通過實戰代碼展示了其具體實現過程。下一篇文章將聚焦DNS例程,講解其工作原理及實現方法,幫助大家更深入地理解網絡通信。敬請期待!
WIZnet是一家無晶圓廠半導體公司,成立于 1998年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU?面向各種應用中的嵌入式互聯網設備。
WIZnet在全球擁有 70多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。
香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
單片機
+關注
關注
6068文章
45011瀏覽量
651188 -
以太網
+關注
關注
41文章
5684瀏覽量
176251
發布評論請先 登錄
三相電路(第六章)
第五章 W55MH32 UDP示例

第九章 W55MH32 HTTP Server示例

第十六章 W55MH32 PING示例

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

評論