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

STM32 以太网 MAC 地址 Hash 过滤

[复制链接]
STMCU小助手 发布时间:2022-7-29 16:03
前言 3 ^9 Z* \! N  m( Q) p
网络中传递着各种各样的数据包,当设备连接到网络后,为了减少对接收到的数据进行处理的负荷,就需要对设备接收到的数据包进行过滤。STM32MCU 的以太网外设提供多种数据包过滤的模式。可以根据以太网帧的目标 MAC 地址,源 MAC 地址进行过滤,STM32H7 系列还提供对 VLAN tag 和 IP 地址,UDP/TCP 端口的过滤。
8 A9 z2 H' U+ P3 Q+ D2 B/ d. N拿 MAC 地址过滤来说,SM32MCU 支持:单播目标地址过滤,多播目标地址过滤,单播源地址过滤和广播地址过滤。单播目标地址过滤和多播目标地址过滤又分为:Perfect 地址过滤和 Hash 地址过滤。 , V- J8 A! c; {( l2 G0 V
perfect 地址过滤就是把接收到的以太网帧中的目标地址与 MAC 地址寄存器中保存的地址进行比较,如果匹配,数据包就被接受,否则就被丢掉。还可以通过设置“反向过滤”,来翻转过滤的结果,接收到的以太网帧中的目标地址与MAC 地址寄存器中保存的地址如果不匹配,数据包就被接收,否则就被丢掉。( [/ r9 n2 W& B
Hash 地址过滤不是直接比较 MAC 地址,而是计算目标 MAC 地址的 CRC32 值,取其高 6 位作为索引去查询 Hash 表寄存器中对应的值,来判断是否接收该数据帧。Hash 地址过滤的方法稍微复杂,本文接下来将基于STM32H743Nucleo 板,通过具体的例程介绍如何实现 Hash 地址过滤。' h8 ~0 \+ W/ d

  q% T6 f( p' f6 W9 T' u& o* B/ |0 E' M
MAC 地址 Hash 过滤 , u9 V  D4 `0 h6 V$ B- F* q
过滤原理9 n' w( z  J, @/ E, U+ y- M
在 Hash 地址过滤模式下,以太网 MAC 通过一张 64 位的 Hash 表来进行过滤。这张表存储在两个 32 位的寄存器中。( L* {7 f# ?8 W7 J2 s
STM32H743 的寄存器 ETH_MACHT0R 保存着 Hash 表的前 32 位,ETH_MACHT1R 中保存着 Hash 表的后 32 位值。
; s: ~2 @: u1 h8 N1 tMAC 接收到以太网帧后,会自动计算目标 MAC 地址的 CRC 值,然后用该 CRC 值的高 6 位,作为索引号去前面提到的 Hash 表寄存器中查找对应位,如果该位的值是 1,则收到的以太网帧通过。否则就丢掉。例如,计算出的 CRC 高 6 位是 0,则对应 ETH_MACHT0R 的 bit0,如果该位是 1,则通过。
. _/ W7 \2 Y) m8 k0 p4 t在初始化的时候,应该根据想要接收的目标 MAC 地址,先设置好 ETH_MACHT0R 和 ETH_MACHT1R 寄存器的值。
7 n$ r. N( ]% _Hash 地址过滤将 48 位的 MAC 地址,对应到 6 位的 Hash 值,肯定会出现多个 MAC 地址对应到一个 6 位Hash 值的情况,所以这种过滤方式也被称作 imperfect 过滤模式。0 l, W5 U( D' N8 S/ n
. O" f6 {$ |5 O& Y4 U
Hash 值的计算方法
3 w7 M" c% K4 ]  G& |" ^Hash 地址过滤模式,最关键的就是如何计算 6 位的 Hash 值。$ J8 i) p  G& D) _# m
在 RM0433 中介绍了 Hash 的产生方法,具体如下:" D9 x2 {( Q0 X( L) u& s
% t% b( j5 {! d2 c1 L; N# T- @( {
1.计算目标 MAC 地址的 CRC32 值。计算 CRC32 的方法参见 IEEE802.3 的第 3.2.8 章中 FCS 的说明 。根据IEEE802.3 中 CRC 值的计算要求,和以太网帧中 MAC 地址传输的顺序,MAC 地址的 CRC 值计算方法如下:
2 o) D" V8 X' ?, P# H# \• 第一个 32 位数据进行补码运算
( e! e$ U  `" A, n• 输入的数据都进行按位反转顺序
( r/ i5 {& Y7 c% U• 进行 CRC32 计算,多项式为 0x4C11DB7
) q1 o# m& m9 c$ Z: J% b• 对最终输出数据进行补码运算
% m: Z$ d% H  S) r, B2. 对第一步的计算值进行按位反转顺序1 v* n' y9 A% f( }6 E, b
3.取第二步计算值的高 6 位
* j1 _4 V- m" j然后就可以根据计算出来的 Hash 值,去设置 ETH_MACHT0R 和 ETH_MACHT1R 寄存器了。
9 v5 V5 F% X9 Z# {8 W4 ~, P

# y1 g3 k+ V. L* q- l8 p3 d2 `MAC 地址过滤的寄存器配置
: @: o6 G$ u$ i7 S: S目标 MAC 地址过滤的寄存器配置见下表:: a9 T4 g3 L+ A4 o. d: v  @5 t  I  B! D
& N7 n- m1 T& Z
% t* ~1 _2 M9 B6 L4 x7 N8 O0 `
" a4 W( v& C0 r, K- [4 J
_GU$C@BZBPW2F8CWC56{%VR.png
7 u5 B( F* o* j
; t0 q2 h1 e. z# I1 N7 S完整版请查看:附件
% w/ Z) ?0 ]& T! Y1 }! s* e1 ]
+ P& a. G, ?: ~: ^* ?: @3 F  Z. W" Q* [

2 i6 S+ a6 z* c3 S

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

下载

384.66 KB, 下载次数: 7

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版