0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第六章 W55MH32 UDP?Multicast示例

W55MH32 ? 来源:W55MH32 ? 作者:W55MH32 ? 2025-07-24 09:19 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单芯片解决方案,开启全新体验——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

第六章 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回环测试,如下图所示:

wKgZPGiBiOuAAqHgAAB_fot5yTo336.png

接下来,我们将打开一个支持加入 UDP组播功能的网络调试工具。在使用该工具时,首先要完成必要的配置操作,具体包括设置监听组播和发送消息的相关参数。当完成上述配置后,我们向组播组发送消息,此时可以观察到串口会打印出我们所发送的消息,同时在网络调试工具的组播接收区域会收到相应的回环消息,组播回环测试流程得以正常运行。

注意:如果网络调试工具不支持加入组播,会导致收不到回环数据。这里我选的是gitcode上一个开源项目,链接:UDP组播调试工具。

9总结

本文介绍了在W55MH32芯片上实现UDP组播的原理、应用场景及回环测试方法,并通过实战代码展示了其具体实现过程。下一篇文章将聚焦DNS例程,讲解其工作原理及实现方法,帮助大家更深入地理解网络通信。敬请期待!

WIZnet是一家无晶圆厂半导体公司,成立于 1998年。产品包括互联网处理器 iMCU?,它采用 TOE(TCP/IP卸载引擎)技术,基于独特的专利全硬连线 TCP/IP。iMCU?面向各种应用中的嵌入式互联网设备。

WIZnet在全球拥有 70多家分销商,在香港、韩国、美国设有办事处,提供技术支持和产品营销。

香港办事处管理的区域包括:澳大利亚、印度、土耳其、亚洲(韩国和日本除外)。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6068

    文章

    45032

    浏览量

    652231
  • 以太网
    +关注

    关注

    41

    文章

    5706

    浏览量

    176486
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    数据采集光盘实例第一第六章

    数据采集光盘实例第一第六章
    发表于 06-28 21:02

    数据采集光盘实例第六章至第十二

    数据采集光盘实例第六章至第十二
    发表于 06-28 21:17

    《测控电路》习题完整参考答案(第六章

    《测控电路》习题完整参考答案(第六章
    发表于 05-07 11:36

    三相电路(第六章)

    三相电路(第六章) 一、 三相电源及其连接若三个电压源的电压uA,uB,uC的最大值相等,频率相同,相位互差120°,则此三个电压源的组合称为对称
    发表于 05-23 15:17 ?38次下载

    高频电子线路第六章答案

    高频电子线路第六章答案.
    发表于 06-05 10:41 ?41次下载

    《测控电路》习题完整参考答案(第六章

    《测控电路》习题完整参考答案(第六章
    发表于 02-07 15:17 ?0次下载

    数字信号处理 第六章

    数字信号处理 第六章
    发表于 10-19 09:34 ?4次下载
    数字信号处理 <b class='flag-5'>第六章</b>

    静噪基础第六章_EMI静噪滤波器

    静噪基础第六章,EMI静噪滤波器
    发表于 01-24 16:25 ?4次下载

    STM8S BLDC电机第六章工程的stm8选项字节配置

    STM8S BLDC电机第六章工程的stm8选项字节配置
    发表于 03-05 15:07 ?8次下载

    电力系统继电保护第六章-变压器保护(课件)下载.ppt

    继电保护第六章-变压器保护(课件)
    发表于 04-28 09:45 ?0次下载
    电力系统继电保护<b class='flag-5'>第六章</b>-变压器保护(课件)下载.ppt

    计算机网络第六章应用层资源下载

    计算机网络第六章应用层资源下载
    发表于 05-17 10:25 ?0次下载

    第五 W55MH32 UDP示例

    本文介绍了在 W55MH32?芯片上实现 UDP?通信及数据回环测试的方法。阐述了 UDP?协议的概念、特点、应用场景、报文传输流程和报文结构,展示了实现过程,借助网络调试工具完成测试。
    的头像 发表于 07-24 09:13 ?125次阅读
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> <b class='flag-5'>UDP</b><b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

    本文介绍了在 W55MH32?芯片上实现 HTTP Server?功能,并通过浏览器修改其网络地址信息的方法。阐述了 HTTP?协议的概念、特点、应用场景、工作流程、请求方法、响应内容,以及 Web?页面构成和交互方式。展示了在W55MH32上实现的过程。
    的头像 发表于 07-24 09:35 ?158次阅读
    第九<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP Server<b class='flag-5'>示例</b>

    第十六章 W55MH32 PING示例

    本文讲解了如何在 W55MH32?芯片上通过 IPRAW?模式实现 ICMP?协议中的 PING?命令,以进行网络连通性测试,通过实战例程展示了从发送 PING?请求、接收并解析回复到统计结果的完整
    的头像 发表于 07-24 11:41 ?102次阅读
    第十<b class='flag-5'>六章</b> <b class='flag-5'>W55MH32</b> PING<b class='flag-5'>示例</b>

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

    本文讲解了如何在 W55MH32?芯片上实现上位机搜索和配置功能,通过实战例程展示了使用开源上位机配置工具 SmartConfigTool?搜索局域网中的 W55MH32?并进行网络地址配置的过程
    的头像 发表于 07-24 16:13 ?149次阅读
    第二十<b class='flag-5'>六章</b> <b class='flag-5'>W55MH32</b>?上位机搜索和配置<b class='flag-5'>示例</b>