0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SM32MCU支持的MAC地址Hash過(guò)濾

STM32單片機(jī) ? 來(lái)源:STM32單片機(jī) ? 作者:STM32單片機(jī) ? 2021-08-17 17:24 ? 次閱讀

前言

網(wǎng)絡(luò)中傳遞著各種各樣的數(shù)據(jù)包,當(dāng)設(shè)備連接到網(wǎng)絡(luò)后,為了減少對(duì)接收到的數(shù)據(jù)進(jìn)行處理的負(fù)荷,就需要對(duì)設(shè)備接收到的數(shù)據(jù)包進(jìn)行過(guò)濾。STM32MCU以太網(wǎng)外設(shè)提供多種數(shù)據(jù)包過(guò)濾的模式。可以根據(jù)以太網(wǎng)幀的目標(biāo)MAC 地址,源 MAC地址進(jìn)行過(guò)濾,STM32H7系列還提供對(duì) VLANtag和 IP地址,UDP/TCP端口的過(guò)濾。

拿 MAC地址過(guò)濾來(lái)說(shuō),SM32MCU支持:?jiǎn)尾ツ繕?biāo)地址過(guò)濾,多播目標(biāo)地址過(guò)濾,單播源地址過(guò)濾和廣播地址過(guò)濾。單播目標(biāo)地址過(guò)濾和多播目標(biāo)地址過(guò)濾又分為:Perfect地址過(guò)濾和 Hash地址過(guò)濾。

perfect地址過(guò)濾就是把接收到的以太網(wǎng)幀中的目標(biāo)地址與 MAC地址寄存器中保存的地址進(jìn)行比較,如果匹配,數(shù)據(jù)包就被接受,否則就被丟掉。還可以通過(guò)設(shè)置“反向過(guò)濾”,來(lái)翻轉(zhuǎn)過(guò)濾的結(jié)果,接收到的以太網(wǎng)幀中的目標(biāo)地址與MAC地址寄存器中保存的地址如果不匹配,數(shù)據(jù)包就被接收,否則就被丟掉。

Hash地址過(guò)濾不是直接比較 MAC地址,而是計(jì)算目標(biāo) MAC地址的 CRC32值,取其高 6位作為索引去查詢(xún) Hash表寄存器中對(duì)應(yīng)的值,來(lái)判斷是否接收該數(shù)據(jù)幀。Hash地址過(guò)濾的方法稍微復(fù)雜,本文接下來(lái)將基于STM32H743Nucleo板,通過(guò)具體的例程介紹如何實(shí)現(xiàn) Hash地址過(guò)濾。

MAC 地址Hash 過(guò)濾

過(guò)濾原理

在 Hash地址過(guò)濾模式下,以太網(wǎng) MAC通過(guò)一張 64位的 Hash表來(lái)進(jìn)行過(guò)濾。這張表存儲(chǔ)在兩個(gè) 32位的寄存器中。STM32H743的寄存器 ETH_MACHT0R 保存著 Hash表的前 32位,ETH_MACHT1R中保存著 Hash表的后 32位值。

MAC接收到以太網(wǎng)幀后,會(huì)自動(dòng)計(jì)算目標(biāo) MAC地址的 CRC值,然后用該 CRC值的高 6位,作為索引號(hào)去前面提到的 Hash表寄存器中查找對(duì)應(yīng)位,如果該位的值是 1,則收到的以太網(wǎng)幀通過(guò)。否則就丟掉。例如,計(jì)算出的 CRC高6位是 0,則對(duì)應(yīng) ETH_MACHT0R的 bit0,如果該位是 1,則通過(guò)。

在初始化的時(shí)候,應(yīng)該根據(jù)想要接收的目標(biāo) MAC地址,先設(shè)置好 ETH_MACHT0R和 ETH_MACHT1R寄存器的值。Hash地址過(guò)濾將 48位的 MAC地址,對(duì)應(yīng)到 6位的 Hash值,肯定會(huì)出現(xiàn)多個(gè)MAC地址對(duì)應(yīng)到一個(gè) 6位 Hash值的情況,所以這種過(guò)濾方式也被稱(chēng)作 imperfect過(guò)濾模式。

Hash值的計(jì)算方法

Hash地址過(guò)濾模式,最關(guān)鍵的是如何計(jì)算6位的Hash值。在RM0433中介紹了 Hash的產(chǎn)生方法,具體如下:

1. 計(jì)算目標(biāo) MAC地址的 CRC32值。計(jì)算 CRC32的方法參見(jiàn) IEEE802.3的第 3.2.8章中FCS的說(shuō)明 。根據(jù)IEEE802.3中 CRC值的計(jì)算要求,和以太網(wǎng)幀中 MAC地址傳輸?shù)捻樞颍琈AC地址的 CRC值計(jì)算方法如下:

第一個(gè) 32位數(shù)據(jù)進(jìn)行補(bǔ)碼運(yùn)算

輸入的數(shù)據(jù)都進(jìn)行按位反轉(zhuǎn)順序

進(jìn)行 CRC32計(jì)算,多項(xiàng)式為 0x4C11DB7

對(duì)最終輸出數(shù)據(jù)進(jìn)行補(bǔ)碼運(yùn)算

2. 對(duì)第一步的計(jì)算值進(jìn)行按位反轉(zhuǎn)順序

3. 取第二步計(jì)算值的高 6位

然后就可以根據(jù)計(jì)算出來(lái)的 Hash值,去設(shè)置 ETH_MACHT0R和 ETH_MACHT1R寄存器了。

MAC地址過(guò)濾的寄存器配置

目標(biāo) MAC地址過(guò)濾的寄存器配置見(jiàn)下表:

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

例程說(shuō)明

下面我們將用一個(gè)例子來(lái)說(shuō)明如何配置Hash地址過(guò)濾。

在該例程中,我們希望 STM32H743Nucleo板只接收廣播,發(fā)往自己的單播 MAC地址的消息,以及兩個(gè)特定多播MAC地址的消息。

單播 MAC地址為:00E100:00,

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

例程中,我們需要做以下設(shè)置:

1.設(shè)置數(shù)據(jù)包過(guò)濾寄存器 ETH_MACPFR中相關(guān)位設(shè)置,使能單播perfect過(guò)濾,多播 Hash過(guò)濾,不屏蔽廣播消息。

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

2.將單播地址設(shè)置到 ETH_MACA0HR和 ETH_MACA0LR中,并使能該地址。那么所有發(fā)往00E100:00的單播數(shù)據(jù)包都能被收到,其他的單播數(shù)據(jù)包將被丟掉。

3.設(shè)置 Hash過(guò)濾表寄存器。在初始化以太網(wǎng)外設(shè)時(shí),利用 STM32H743的 CRC外設(shè)自動(dòng)計(jì)算 MAC地址的 CRC32值,再得到對(duì)應(yīng)的 Hash值,根據(jù)該值去初始化ETH_MACHT0R和 ETH_MACHT1R寄存器。H743Nucleo將可以接收發(fā)往 010d01:03和 01:00: 5e: a8: 00: 0a MAC地址的多播消息,其他的多播消息都被丟掉。

CRC外設(shè)初始化代碼:

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

計(jì)算并使能 HashMAC地址過(guò)濾的代碼:

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

運(yùn)行結(jié)果

將附件的例程燒錄到H743Nucleo板,通過(guò) XCAP連續(xù)發(fā)送下面的 6條消息。

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

包括:

兩條單播消息,目標(biāo)MAC地址分別是:00E100:00和 020000:00。

三條多播消息,目標(biāo) MAC地址分別是:010d01:03,01: 00: 5e: a8: 00:0a和 010d01:ff。

一條廣播消息。

從程序的打印信息里可以看到,H743Nucleo板接收到了其中的 4條消息,MAC地址沒(méi)有設(shè)置的一條單播消息

(020000:00)和一條多播消息(010d01:ff)都被過(guò)濾掉了。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5439

    瀏覽量

    171971
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10906

    瀏覽量

    356548
  • Mac
    Mac
    +關(guān)注

    關(guān)注

    0

    文章

    1107

    瀏覽量

    51539

原文標(biāo)題:工程師筆記 | STM32 以太網(wǎng)MAC 地址Hash 過(guò)濾

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MAC地址

    MAC地址  MAC(Media Access Control, 介質(zhì)訪(fǎng)問(wèn)控制)地址是識(shí)別LAN(局域網(wǎng))節(jié)點(diǎn)的標(biāo)識(shí)。網(wǎng)卡的物理地址
    發(fā)表于 12-26 12:06 ?1266次閱讀

    網(wǎng)絡(luò)與通信MAC地址詳解

    什么是MAC地址! MAC 地址在這種局域網(wǎng)環(huán)境中究竟起到什么作用,下面就來(lái)介紹一下MAC 地址
    發(fā)表于 08-23 18:25 ?90次下載
    網(wǎng)絡(luò)與通信<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>詳解

    mac_mac地址是什么

    mac地址是什么?本內(nèi)容介紹了mac地址的作用及運(yùn)用,MAC(Medium/Media Access Control)
    發(fā)表于 12-14 15:50 ?3898次閱讀
    <b class='flag-5'>mac_mac</b><b class='flag-5'>地址</b>是什么

    mac地址和ip地址有什么區(qū)別

    首先,說(shuō)明一下MAC地址是啥?MAC地址MAC(Media Access Control)協(xié)議所使用的
    發(fā)表于 03-06 14:17 ?8694次閱讀

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

    MAC(Media Access Control, 介質(zhì)訪(fǎng)問(wèn)控制)MAC地址是燒錄在Network Interface Card(網(wǎng)卡,NIC)里的.MAC
    發(fā)表于 03-06 15:04 ?3.4w次閱讀

    MAC地址是什么

    MAC地址(Media Access Control Address),直譯為媒體訪(fǎng)問(wèn)控制地址,也稱(chēng)為局域網(wǎng)地址(LAN Address),以太網(wǎng)
    的頭像 發(fā)表于 02-14 14:17 ?4w次閱讀

    MAC地址/結(jié)構(gòu)/表示方法介紹

    MAC地址,是Media Access Control Address的簡(jiǎn)稱(chēng),也稱(chēng)為物理地址。每個(gè)網(wǎng)絡(luò)設(shè)備在出廠時(shí),由設(shè)備廠商賦予一個(gè)獨(dú)立無(wú)二的地址。理論上講所有網(wǎng)絡(luò)設(shè)備的
    的頭像 發(fā)表于 03-27 10:14 ?3.3w次閱讀
    <b class='flag-5'>MAC</b>的<b class='flag-5'>地址</b>/結(jié)構(gòu)/表示方法介紹

    STM32以太網(wǎng)MAC 地址Hash 過(guò)濾

    網(wǎng)絡(luò)中傳遞著各種各樣的數(shù)據(jù)包,當(dāng)設(shè)備連接到網(wǎng)絡(luò)后,為了減少對(duì)接收到的數(shù)據(jù)進(jìn)行處理的負(fù)荷,就需要對(duì)設(shè)備接收到的數(shù)據(jù)包進(jìn)行過(guò)濾。
    發(fā)表于 02-08 15:56 ?5次下載
    STM32以太網(wǎng)<b class='flag-5'>MAC</b> <b class='flag-5'>地址</b><b class='flag-5'>Hash</b> <b class='flag-5'>過(guò)濾</b>

    MAC地址申請(qǐng)MAC碼購(gòu)買(mǎi)流程MAC地址哪里申請(qǐng)MAC地址作用

    眾所周知mac地址號(hào)段全世界都是由美國(guó)一家政府機(jī)構(gòu)IEEE進(jìn)行分配的,也是由他們進(jìn)行管理的。我站具有豐富的MAC地址申請(qǐng)經(jīng)驗(yàn),可以幫助客戶(hù)有效的快速高效的完成
    的頭像 發(fā)表于 03-01 17:00 ?2891次閱讀
    <b class='flag-5'>MAC</b><b class='flag-5'>地址</b>申請(qǐng)<b class='flag-5'>MAC</b>碼購(gòu)買(mǎi)流程<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>哪里申請(qǐng)<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>作用

    MAC地址注冊(cè)的原理和應(yīng)用

    MAC地址注冊(cè)是指在網(wǎng)絡(luò)設(shè)備中,將設(shè)備的物理地址(即MAC地址)與設(shè)備的IP地址進(jìn)行關(guān)聯(lián)和注冊(cè)的
    的頭像 發(fā)表于 11-13 16:07 ?996次閱讀
    <b class='flag-5'>MAC</b><b class='flag-5'>地址</b>注冊(cè)的原理和應(yīng)用

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

    如何綁定ip地址mac物理地址呢? 綁定IP地址MAC物理地址是一種網(wǎng)絡(luò)管理和安全措施,可以
    的頭像 發(fā)表于 12-07 09:33 ?6980次閱讀

    怎么申請(qǐng)MAC地址?MAC地址申請(qǐng)流程分享

    在數(shù)字化高速發(fā)展,機(jī)器設(shè)備大規(guī)模代替原始勞動(dòng)力的時(shí)代,功能各異的設(shè)備不斷被創(chuàng)造出來(lái)。因此每一臺(tái)網(wǎng)絡(luò)設(shè)備都需要一個(gè)獨(dú)特的身份標(biāo)識(shí),這也就是我們所熟知的MAC地址MAC地址作為設(shè)備的唯一
    的頭像 發(fā)表于 07-10 17:30 ?560次閱讀
    怎么申請(qǐng)<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>申請(qǐng)流程分享

    如何獲取MAC地址?MAC地址的三個(gè)申請(qǐng)條件

    在產(chǎn)品設(shè)備都規(guī)范化管理的當(dāng)今社會(huì),如果您的產(chǎn)品設(shè)備想要投入市場(chǎng),設(shè)備物理地址MAC地址則是唯一能識(shí)別設(shè)備的識(shí)別碼。那么MAC地址的申請(qǐng)條件
    的頭像 發(fā)表于 09-06 17:14 ?487次閱讀
    如何獲取<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>的三個(gè)申請(qǐng)條件

    怎么綁定IP地址MAC地址

    本篇文章主要說(shuō)一說(shuō)怎么在本地計(jì)算機(jī)上綁定IP和MAC地址以及通過(guò)路由器綁定IP和MAC地址,并且這兩者綁定可以解決什么問(wèn)題。 ? 先來(lái)說(shuō)說(shuō)怎么去綁定 本地計(jì)算上綁定IP和
    的頭像 發(fā)表于 12-01 22:48 ?306次閱讀

    MAC地址的作用范圍,MAC地址怎么申請(qǐng)?

    MAC地址(MediaAccessControlAddress),也稱(chēng)為局域網(wǎng)地址(LANAddress)、以太網(wǎng)地址(EthernetAddress)、硬件
    的頭像 發(fā)表于 12-19 17:44 ?512次閱讀
    <b class='flag-5'>MAC</b><b class='flag-5'>地址</b>的作用范圍,<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>怎么申請(qǐng)?