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

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

3天内不再提示

SM32MCU支持的MAC地址Hash过滤

STM32单片机 来源:STM32单片机 作者:STM32单片机 2021-08-17 17:24 次阅读

前言

网络中传递着各种各样的数据包,当设备连接到网络后,为了减少对接收到的数据进行处理的负荷,就需要对设备接收到的数据包进行过滤。STM32MCU以太网外设提供多种数据包过滤的模式。可以根据以太网帧的目标MAC 地址,源 MAC地址进行过滤,STM32H7系列还提供对 VLANtag和 IP地址,UDP/TCP端口的过滤。

拿 MAC地址过滤来说,SM32MCU支持:单播目标地址过滤,多播目标地址过滤,单播源地址过滤和广播地址过滤。单播目标地址过滤和多播目标地址过滤又分为:Perfect地址过滤和 Hash地址过滤。

perfect地址过滤就是把接收到的以太网帧中的目标地址与 MAC地址寄存器中保存的地址进行比较,如果匹配,数据包就被接受,否则就被丢掉。还可以通过设置“反向过滤”,来翻转过滤的结果,接收到的以太网帧中的目标地址与MAC地址寄存器中保存的地址如果不匹配,数据包就被接收,否则就被丢掉。

Hash地址过滤不是直接比较 MAC地址,而是计算目标 MAC地址的 CRC32值,取其高 6位作为索引去查询 Hash表寄存器中对应的值,来判断是否接收该数据帧。Hash地址过滤的方法稍微复杂,本文接下来将基于STM32H743Nucleo板,通过具体的例程介绍如何实现 Hash地址过滤。

MAC 地址Hash 过滤

过滤原理

在 Hash地址过滤模式下,以太网 MAC通过一张 64位的 Hash表来进行过滤。这张表存储在两个 32位的寄存器中。STM32H743的寄存器 ETH_MACHT0R 保存着 Hash表的前 32位,ETH_MACHT1R中保存着 Hash表的后 32位值。

MAC接收到以太网帧后,会自动计算目标 MAC地址的 CRC值,然后用该 CRC值的高 6位,作为索引号去前面提到的 Hash表寄存器中查找对应位,如果该位的值是 1,则收到的以太网帧通过。否则就丢掉。例如,计算出的 CRC高6位是 0,则对应 ETH_MACHT0R的 bit0,如果该位是 1,则通过。

在初始化的时候,应该根据想要接收的目标 MAC地址,先设置好 ETH_MACHT0R和 ETH_MACHT1R寄存器的值。Hash地址过滤将 48位的 MAC地址,对应到 6位的 Hash值,肯定会出现多个MAC地址对应到一个 6位 Hash值的情况,所以这种过滤方式也被称作 imperfect过滤模式。

Hash值的计算方法

Hash地址过滤模式,最关键的是如何计算6位的Hash值。在RM0433中介绍了 Hash的产生方法,具体如下:

1. 计算目标 MAC地址的 CRC32值。计算 CRC32的方法参见 IEEE802.3的第 3.2.8章中FCS的说明 。根据IEEE802.3中 CRC值的计算要求,和以太网帧中 MAC地址传输的顺序,MAC地址的 CRC值计算方法如下:

第一个 32位数据进行补码运算

输入的数据都进行按位反转顺序

进行 CRC32计算,多项式为 0x4C11DB7

对最终输出数据进行补码运算

2. 对第一步的计算值进行按位反转顺序

3. 取第二步计算值的高 6位

然后就可以根据计算出来的 Hash值,去设置 ETH_MACHT0R和 ETH_MACHT1R寄存器了。

MAC地址过滤的寄存器配置

目标 MAC地址过滤的寄存器配置见下表:

311ed2e2-e3d9-11eb-a97a-12bb97331649.png

例程说明

下面我们将用一个例子来说明如何配置Hash地址过滤。

在该例程中,我们希望 STM32H743Nucleo板只接收广播,发往自己的单播 MAC地址的消息,以及两个特定多播MAC地址的消息。

单播 MAC地址为:00E100:00,

多播 MAC地址为:010d01:03和 01: 00: 5e: a8: 00: 0a。

例程中,我们需要做以下设置:

1.设置数据包过滤寄存器 ETH_MACPFR中相关位设置,使能单播perfect过滤,多播 Hash过滤,不屏蔽广播消息。

3160ee7a-e3d9-11eb-a97a-12bb97331649.png

2.将单播地址设置到 ETH_MACA0HR和 ETH_MACA0LR中,并使能该地址。那么所有发往00E100:00的单播数据包都能被收到,其他的单播数据包将被丢掉。

3.设置 Hash过滤表寄存器。在初始化以太网外设时,利用 STM32H743的 CRC外设自动计算 MAC地址的 CRC32值,再得到对应的 Hash值,根据该值去初始化ETH_MACHT0R和 ETH_MACHT1R寄存器。H743Nucleo将可以接收发往 010d01:03和 01:00: 5e: a8: 00: 0a MAC地址的多播消息,其他的多播消息都被丢掉。

CRC外设初始化代码:

317a34b6-e3d9-11eb-a97a-12bb97331649.png

计算并使能 HashMAC地址过滤的代码:

319f6be6-e3d9-11eb-a97a-12bb97331649.png

运行结果

将附件的例程烧录到H743Nucleo板,通过 XCAP连续发送下面的 6条消息。

31f12558-e3d9-11eb-a97a-12bb97331649.png

包括:

两条单播消息,目标MAC地址分别是:00E100:00和 020000:00。

三条多播消息,目标 MAC地址分别是:010d01:03,01: 00: 5e: a8: 00:0a和 010d01:ff。

一条广播消息。

从程序的打印信息里可以看到,H743Nucleo板接收到了其中的 4条消息,MAC地址没有设置的一条单播消息

(020000:00)和一条多播消息(010d01:ff)都被过滤掉了。

责任编辑:haq

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

    关注

    40

    文章

    5421

    浏览量

    171664
  • STM32
    +关注

    关注

    2270

    文章

    10897

    浏览量

    355873
  • Mac
    Mac
    +关注

    关注

    0

    文章

    1106

    浏览量

    51466

原文标题:工程师笔记 | STM32 以太网MAC 地址Hash 过滤

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MAC地址

    MAC地址  MAC(Media Access Control, 介质访问控制)地址是识别LAN(局域网)节点的标识。网卡的物理地址
    发表于 12-26 12:06 1263次阅读

    网络与通信MAC地址详解

    什么是MAC地址! MAC 地址在这种局域网环境中究竟起到什么作用,下面就来介绍一下MAC 地址
    发表于 08-23 18:25 90次下载
    网络与通信<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>详解

    mac_mac地址是什么

    mac地址是什么?本内容介绍了mac地址的作用及运用,MAC(Medium/Media Access Control)
    发表于 12-14 15:50 3890次阅读
    <b class='flag-5'>mac_mac</b><b class='flag-5'>地址</b>是什么

    mac地址和ip地址有什么区别

    首先,说明一下MAC地址是啥?MAC地址MAC(Media Access Control)协议所使用的
    发表于 03-06 14:17 8685次阅读

    mac地址是什么_mac地址有什么用

    MAC(Media Access Control, 介质访问控制)MAC地址是烧录在Network Interface Card(网卡,NIC)里的.MAC
    发表于 03-06 15:04 3.3w次阅读

    MAC地址是什么

    MAC地址(Media Access Control Address),直译为媒体访问控制地址,也称为局域网地址(LAN Address),以太网
    的头像 发表于 02-14 14:17 4w次阅读

    MAC地址/结构/表示方法介绍

    MAC地址,是Media Access Control Address的简称,也称为物理地址。每个网络设备在出厂时,由设备厂商赋予一个独立无二的地址。理论上讲所有网络设备的
    的头像 发表于 03-27 10:14 3.3w次阅读
    <b class='flag-5'>MAC</b>的<b class='flag-5'>地址</b>/结构/表示方法介绍

    STM32以太网MAC 地址Hash 过滤

    网络中传递着各种各样的数据包,当设备连接到网络后,为了减少对接收到的数据进行处理的负荷,就需要对设备接收到的数据包进行过滤
    发表于 02-08 15:56 5次下载
    STM32以太网<b class='flag-5'>MAC</b> <b class='flag-5'>地址</b><b class='flag-5'>Hash</b> <b class='flag-5'>过滤</b>

    MAC地址申请MAC码购买流程MAC地址哪里申请MAC地址作用

    众所周知mac地址号段全世界都是由美国一家政府机构IEEE进行分配的,也是由他们进行管理的。我站具有丰富的MAC地址申请经验,可以帮助客户有效的快速高效的完成
    的头像 发表于 03-01 17:00 2851次阅读
    <b class='flag-5'>MAC</b><b class='flag-5'>地址</b>申请<b class='flag-5'>MAC</b>码购买流程<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>哪里申请<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>作用

    MAC地址注册的原理和应用

    MAC地址注册是指在网络设备中,将设备的物理地址(即MAC地址)与设备的IP地址进行关联和注册的
    的头像 发表于 11-13 16:07 980次阅读
    <b class='flag-5'>MAC</b><b class='flag-5'>地址</b>注册的原理和应用

    如何绑定ip地址mac物理地址呢?

    如何绑定ip地址mac物理地址呢? 绑定IP地址MAC物理地址是一种网络管理和安全措施,可以
    的头像 发表于 12-07 09:33 6835次阅读

    怎么申请MAC地址?MAC地址申请流程分享

    在数字化高速发展,机器设备大规模代替原始劳动力的时代,功能各异的设备不断被创造出来。因此每一台网络设备都需要一个独特的身份标识,这也就是我们所熟知的MAC地址MAC地址作为设备的唯一
    的头像 发表于 07-10 17:30 525次阅读
    怎么申请<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>申请流程分享

    如何获取MAC地址MAC地址的三个申请条件

    在产品设备都规范化管理的当今社会,如果您的产品设备想要投入市场,设备物理地址MAC地址则是唯一能识别设备的识别码。那么MAC地址的申请条件
    的头像 发表于 09-06 17:14 439次阅读
    如何获取<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>的三个申请条件

    怎么绑定IP地址MAC地址

    本篇文章主要说一说怎么在本地计算机上绑定IP和MAC地址以及通过路由器绑定IP和MAC地址,并且这两者绑定可以解决什么问题。   先来说说怎么去绑定 本地计算上绑定IP和
    的头像 发表于 12-01 22:48 217次阅读

    MAC地址的作用范围,MAC地址怎么申请?

    MAC地址(MediaAccessControlAddress),也称为局域网地址(LANAddress)、以太网地址(EthernetAddress)、硬件
    的头像 发表于 12-19 17:44 269次阅读
    <b class='flag-5'>MAC</b><b class='flag-5'>地址</b>的作用范围,<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>怎么申请?