打印
[开发工具]

STM32以太网MAC地址Hash过滤

[复制链接]
873|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
网络中传递着各种各样的数据包,当设备连接到网络后,为了减少对接收到的数据进行处理的负荷,就需要对设备接收到的数据包进行过滤。 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 地址过滤  

使用特权

评论回复
沙发
我想看大海|  楼主 | 2021-11-3 09:25 | 只看该作者
过滤原理
在 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 过滤模式。  

使用特权

评论回复
板凳
我想看大海|  楼主 | 2021-11-3 09:26 | 只看该作者
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 寄存器了。



使用特权

评论回复
地板
我想看大海|  楼主 | 2021-11-3 09:27 | 只看该作者
MAC 地址过滤的寄存器配置
目标 MAC 地址过滤的寄存器配置见下表:  


使用特权

评论回复
5
八层楼| | 2021-12-1 12:12 | 只看该作者
通过设置寄存器就可以吧

使用特权

评论回复
6
观海| | 2021-12-1 12:15 | 只看该作者
如何进行计算呢

使用特权

评论回复
7
guanjiaer| | 2021-12-1 12:16 | 只看该作者
如何进行补码运算呢

使用特权

评论回复
8
tpgf| | 2021-12-1 13:10 | 只看该作者
不太了解以太网

使用特权

评论回复
9
heimaojingzhang| | 2021-12-1 13:12 | 只看该作者
这个算法应该算是比较简单的了

使用特权

评论回复
10
keaibukelian| | 2021-12-1 13:14 | 只看该作者
这是一种什么过滤方式啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

282

帖子

0

粉丝