你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 以太网 MAC 地址 Hash 过滤

[复制链接]
STMCU小助手 发布时间:2022-7-29 16:03
前言
网络中传递着各种各样的数据包,当设备连接到网络后,为了减少对接收到的数据进行处理的负荷,就需要对设备接收到的数据包进行过滤。STM32MCU 的以太网外设提供多种数据包过滤的模式。可以根据以太网帧的目标 MAC 址,源 MAC 地址进行过滤,STM32H7 系列还提供对 VLAN tag 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 地址过滤的寄存器配置见下表:



_GU$C@BZBPW2F8CWC56{%VR.png

完整版请查看:附件



LAT0750_STM32以太网MAC地址Hash过滤.pdf

下载

384.66 KB, 下载次数: 6

收藏 评论0 发布时间:2022-7-29 16:03

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版