單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來(lái)前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來(lái)說(shuō),一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32提供了兩種選擇:QFN100和QFN68。
W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復(fù)雜工控場(chǎng)景設(shè)計(jì)。它擁有66個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、5個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN、1個(gè)USB2.0以及1個(gè)SDIO接口。如此豐富的外設(shè)資源,能夠輕松應(yīng)對(duì)工業(yè)控制中多樣化的連接需求,無(wú)論是與各類傳感器、執(zhí)行器的通信,還是對(duì)復(fù)雜工業(yè)協(xié)議的支持,都能游刃有余,成為復(fù)雜工控領(lǐng)域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場(chǎng)景,軟件使用方法一致。更多信息和資料請(qǐng)進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32L這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評(píng)估芯片性能。
若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問(wèn)官方網(wǎng)頁(yè):http://www.w5500.com/,我們期待與您共同探索W55MH32的無(wú)限可能。
第六章 W55MH32 UDPMulticast示例
本篇文章,我們將詳細(xì)介紹如何在W55MH32芯片上面實(shí)現(xiàn)UDP組播(UDP Multicast)通信。并通過(guò)實(shí)戰(zhàn)例程,為大家講解如何使用UDPMulticast進(jìn)行回環(huán)測(cè)試。
該例程用到的其他網(wǎng)絡(luò)協(xié)議,例如DHCP、UDP,請(qǐng)參考相關(guān)章節(jié)。有關(guān)W55MH32的初始化過(guò)程,也請(qǐng)參考Network Install章節(jié),這里將不再贅述。
1 UDPMulticast簡(jiǎn)介
UDP組播是一種數(shù)據(jù)傳輸方法,允許數(shù)據(jù)從一個(gè)源發(fā)送到多個(gè)目標(biāo)設(shè)備,加入了相應(yīng)組播組的接收者都可以接收到數(shù)據(jù)。這種方式非常高效,廣泛應(yīng)用于需要將相同數(shù)據(jù)同時(shí)傳輸給多個(gè)接收者的場(chǎng)景,如視頻流媒體、實(shí)時(shí)數(shù)據(jù)分發(fā)和大規(guī)模軟件更新等。IPv4的組播地址范圍為 224.0.0.0到 233.255.255.255。
2 UDP Multicast的特點(diǎn)
基于UDP協(xié)議:UDP是無(wú)連接的協(xié)議,提供快速、低開銷的數(shù)據(jù)傳輸,但不保證數(shù)據(jù)的可靠性、順序性或重傳。UDP組播繼承了這些特性,因此適合對(duì)實(shí)時(shí)性要求高、對(duì)可靠性要求較低的場(chǎng)景。
高效數(shù)據(jù)傳輸:發(fā)送者只需要發(fā)送一份數(shù)據(jù),網(wǎng)絡(luò)設(shè)備(如路由器、交換機(jī))負(fù)責(zé)將數(shù)據(jù)復(fù)制并傳輸?shù)剿薪M播成員。這種方式節(jié)省了帶寬,相比單播更高效。
不保證可靠性:數(shù)據(jù)可能丟失,接收者需要自己處理數(shù)據(jù)包丟失問(wèn)題。
動(dòng)態(tài)成員管理:組播組的成員可以動(dòng)態(tài)加入或離開,無(wú)需通知發(fā)送者。
3 UDPMulticast應(yīng)用場(chǎng)景
接下來(lái),我們了解下在W55MH32上,可以使用UDP Multicast完成哪些操作及應(yīng)用呢?
設(shè)備發(fā)現(xiàn)與自動(dòng)配置:實(shí)現(xiàn)設(shè)備自動(dòng)發(fā)現(xiàn)和網(wǎng)絡(luò)配置,如智能家居設(shè)備通過(guò)組播尋找網(wǎng)關(guān)或其他設(shè)備。
實(shí)時(shí)數(shù)據(jù)廣播:用于傳感器數(shù)據(jù)分發(fā)、工業(yè)控制和車聯(lián)網(wǎng)中實(shí)時(shí)數(shù)據(jù)的高效傳輸。
固件更新與配置分發(fā):對(duì)多個(gè)設(shè)備同時(shí)進(jìn)行固件升級(jí)或統(tǒng)一下發(fā)配置,減少網(wǎng)絡(luò)負(fù)擔(dān)。
告警和事件通知:設(shè)備異常時(shí)實(shí)時(shí)向多個(gè)監(jiān)控終端廣播告警消息。
時(shí)間同步:用于局域網(wǎng)內(nèi)的多設(shè)備時(shí)間同步,提升協(xié)同效率。
測(cè)試與調(diào)試:設(shè)備開發(fā)階段,利用組播收集狀態(tài)信息和日志數(shù)據(jù)。
4 UDP組播環(huán)回測(cè)試工作流程
1. 接收方通過(guò)IGMP協(xié)議加入組播組:IGMP(Internet Group Management Protocol)是一種網(wǎng)絡(luò)層協(xié)議,用于管理主機(jī)和路由器間的組播組成員關(guān)系。當(dāng)接收方希望接收某個(gè)組播地址的數(shù)據(jù)時(shí),會(huì)通過(guò)IGMP向路由器發(fā)送加入組播組的請(qǐng)求。
2. 發(fā)送方發(fā)送測(cè)試數(shù)據(jù):發(fā)送方通過(guò)UDP協(xié)議將數(shù)據(jù)包發(fā)送到指定的組播地址和端口。所有加入組播組的接收方均可接收到數(shù)據(jù)包。
3. 接收方回傳消息:接收方在接收到組播數(shù)據(jù)后,主動(dòng)回傳響應(yīng)消息到該組播組當(dāng)中。回傳的消息可以用于確認(rèn)發(fā)送成功或測(cè)試鏈路的完整性。
5 UDP單播、組播和廣播的區(qū)別
以下是UDP單播、組播和廣播的區(qū)別:
特性 | 單播 (Unicast) | 組播 (Multicast) | 廣播 (Broadcast) |
通信范圍 | 一對(duì)一 | 一對(duì)多(組播組成員) | 一對(duì)所有(局域網(wǎng)內(nèi)設(shè)備) |
效率 | 點(diǎn)對(duì)點(diǎn),高效 | 比單播高效,需組播支持 | 浪費(fèi)帶寬,負(fù)載較高 |
地址類型 | 目標(biāo)設(shè)備 IP地址 | 組播 IP地址(224.0.0.0+) | 廣播地址(子網(wǎng)廣播地址) |
網(wǎng)絡(luò)配置 | 無(wú)需額外配置 | 網(wǎng)絡(luò)需支持組播 | 局限于子網(wǎng)內(nèi),支持廣播 |
應(yīng)用場(chǎng)景 | 客戶端-服務(wù)器通信 | 音視頻流、多設(shè)備消息廣播 | 局域網(wǎng)設(shè)備發(fā)現(xiàn)、告警通知 |
6報(bào)文解析
UDP協(xié)議報(bào)文已經(jīng)在UDP章節(jié)中講解過(guò)了,有關(guān)這部分的內(nèi)容請(qǐng)參考相關(guān)章節(jié),這里不再贅述。下面我們來(lái)講解一下設(shè)備在加入組播時(shí)使用的IGMP報(bào)文。
IGMP加入組播組時(shí)發(fā)送的報(bào)文是IGMP Membership Report報(bào)文。其格式如下:
字節(jié)偏移 | 字段名稱 | 長(zhǎng)度 | 描述 |
0 | 類型 (Type) | 1字節(jié) | 指示 IGMP報(bào)文的類型(例如加入、離開)。 |
1 | 最大響應(yīng)時(shí)間 (Max Resp Time) | 1字節(jié) | 指定應(yīng)答的最大等待時(shí)間,僅在查詢報(bào)文中使用。 |
2-3 | 校驗(yàn)和 (Checksum) | 2字節(jié) | 對(duì)報(bào)文頭的校驗(yàn)和,用于檢測(cè)傳輸錯(cuò)誤。 |
4-7 | 組地址 (Group Address) | 4字節(jié) | 表示加入的組播組的 IP地址。 |
字段解釋
類型 (Type)
值為 0x16(IGMPv2 Membership Report):表示主機(jī)請(qǐng)求加入組播組。
值為 0x22(IGMPv3 Membership Report):用于支持 IGMPv3的精細(xì)組播組管理。
校驗(yàn)和 (Checksum)
計(jì)算方法基于標(biāo)準(zhǔn)的 IP校驗(yàn)和算法。
用于確保 IGMP報(bào)文的完整性。
組地址 (Group Address)
組播組的 IP地址(范圍:224.0.0.0 - 239.255.255.255)。
加入時(shí)表示目標(biāo)的組播地址。
報(bào)文示例
|報(bào)文解析| Internet Group Management Protocol [IGMP Version: 2] Type: Membership Report (0x16) (Type為0x16,表示主機(jī)請(qǐng)求加入組播組) Max Resp Time: 0.0 sec (0x00) (最大響應(yīng)時(shí)間為0) Checksum: 0x08f3 [correct] (校驗(yàn)和為0x08f3) [Checksum Status: Good] Multicast Address: 224.1.1.11 (組地址為224.1.1.11) |報(bào)文原文| 16 00 08 f3 e0 01 01 0b
7實(shí)現(xiàn)過(guò)程
接下來(lái),我們?cè)赪55MH32上實(shí)現(xiàn)UDP組播回環(huán)測(cè)試。
注意:測(cè)試實(shí)例需要PC端和W55MH32處于同一網(wǎng)段,且連接的路由器需支持IGMP協(xié)議。
UDP通信已經(jīng)在硬件層面實(shí)現(xiàn),因此我們只需要在主循環(huán)中調(diào)用udp_multicast()組播功能的函數(shù)即可,如下所示:
while (1) { udp_multicast(SOCKET_ID, ethernet_buf, Multicast_mac, Multicast_IP, Multicast_port); }
udp_multicast需要傳入5個(gè)參數(shù),分別是socket號(hào),socket緩存,組播MAC地址,組播IP地址,組播端口號(hào)。
udp_multicast函數(shù)內(nèi)容如下:
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; }
程序進(jìn)入到udp_multicast函數(shù)后會(huì)執(zhí)行一個(gè)狀態(tài)機(jī),根據(jù)Socket的狀態(tài)來(lái)執(zhí)行對(duì)應(yīng)的操作。
當(dāng)Socket處于SOCK_CLOSED狀態(tài)時(shí),函數(shù)會(huì)初始化Socket并加入組播組,然后打印Socket的狀態(tài)和組播組的信息。
當(dāng)Socket處于SOCK_UDP狀態(tài)時(shí),函數(shù)會(huì)檢查是否有數(shù)據(jù)接收,如果有則將數(shù)據(jù)打印出來(lái)并發(fā)送回源地址。函數(shù)成功執(zhí)行后返回1。
8運(yùn)行結(jié)果
燒錄例程運(yùn)行后,首先進(jìn)行了PHY鏈路檢測(cè),然后是DHCP獲取網(wǎng)絡(luò)地址結(jié)果,最后是進(jìn)行UDPMulticast回環(huán)測(cè)試,如下圖所示:
接下來(lái),我們將打開一個(gè)支持加入 UDP組播功能的網(wǎng)絡(luò)調(diào)試工具。在使用該工具時(shí),首先要完成必要的配置操作,具體包括設(shè)置監(jiān)聽組播和發(fā)送消息的相關(guān)參數(shù)。當(dāng)完成上述配置后,我們向組播組發(fā)送消息,此時(shí)可以觀察到串口會(huì)打印出我們所發(fā)送的消息,同時(shí)在網(wǎng)絡(luò)調(diào)試工具的組播接收區(qū)域會(huì)收到相應(yīng)的回環(huán)消息,組播回環(huán)測(cè)試流程得以正常運(yùn)行。
注意:如果網(wǎng)絡(luò)調(diào)試工具不支持加入組播,會(huì)導(dǎo)致收不到回環(huán)數(shù)據(jù)。這里我選的是gitcode上一個(gè)開源項(xiàng)目,鏈接:UDP組播調(diào)試工具。
9總結(jié)
本文介紹了在W55MH32芯片上實(shí)現(xiàn)UDP組播的原理、應(yīng)用場(chǎng)景及回環(huán)測(cè)試方法,并通過(guò)實(shí)戰(zhàn)代碼展示了其具體實(shí)現(xiàn)過(guò)程。下一篇文章將聚焦DNS例程,講解其工作原理及實(shí)現(xiàn)方法,幫助大家更深入地理解網(wǎng)絡(luò)通信。敬請(qǐng)期待!
WIZnet是一家無(wú)晶圓廠半導(dǎo)體公司,成立于 1998年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU?面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet在全球擁有 70多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。
審核編輯 黃宇
-
單片機(jī)
+關(guān)注
關(guān)注
6068文章
45032瀏覽量
651915 -
以太網(wǎng)
+關(guān)注
關(guān)注
41文章
5706瀏覽量
176434
發(fā)布評(píng)論請(qǐng)先 登錄
三相電路(第六章)
STM8S BLDC電機(jī)第六章工程的stm8選項(xiàng)字節(jié)配置
計(jì)算機(jī)網(wǎng)絡(luò)第六章應(yīng)用層資源下載
第五章 W55MH32 UDP示例

第九章 W55MH32 HTTP Server示例

第十六章 W55MH32 PING示例

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

評(píng)論