stm 32 组播 哈希表过滤

以下一家之言,未必准确!

 

STM32  MAC

 

  multicast 过滤有

/** @defgroup ETH_Multicast_Frames_Filter ETH Multicast Frames Filter
  * @{
  */
#define ETH_MULTICASTFRAMESFILTER_PERFECTHASHTABLE    0x00000404U
#define ETH_MULTICASTFRAMESFILTER_HASHTABLE           0x00000004U
#define ETH_MULTICASTFRAMESFILTER_PERFECT             0x00000000U
#define ETH_MULTICASTFRAMESFILTER_NONE                0x00000010U

NONE 是不过滤 来了就收,perfect统统不收,

那么哈希过滤是啥?大概查了一下:

https://www.stmcu.org.cn/faq/index/detail/id-6961

问:

组播过滤ETH->MACHTHR的设置


答:64位的HASH列表可以用来进行成组的地址过滤。进行HASH过滤时,帧的目的地址输入CRC逻辑,并取CRC值的高6位检索HASH列表。32位的CRC计算多项式如下,详见第27.5.3节:MAC帧的接收。 G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 这个CRC值的最高位(MSB)决定使用哪个寄存器(Hash列表高寄存器或者Hash列表低寄存器),剩下的5位决定检查寄存器里的哪一位。HASH值为0b00000的对应选中寄存器的位0,HASH值为0b11111的对应选中寄存器的位31。 例如,输入帧的目的地址是0x1F52 419C B6AF(MII接口最先接收到的字节是0x1F),则计算出的CRC值高6位是0x2C,因此用HTH的位12进行HASH过滤。如果输入帧的目的地址是0xA00A 9800 0045,则算出的HASH值是0x07,用HTL的位7来进行HASH过滤。 如果HASH寄存器对应的位是’1’,则MAC就接受这个帧;否则,MAC就丢弃这个帧。如果ETH_MACFFR寄存器的PAM位(通过全部多播帧)为’1’,那么无论HASH过滤结果如何,MAC接受所有的多播帧。

回答者: 回答时间:2013-07-17

 

本博主个人建议是大部分场合用NONE,,对于高负载靠算法处理。这样通用性好一点,否则经常需要手算这个哈希值。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值