之前的文章主要介紹了STM32的ExternalPHY Intereface部分,《STM32網路電路設計》也就是下圖區域1,
本文將重點講解STM32的MAC控制器,也就是下圖區域2,

?
01、STM32的MAC概述
STM32的MAC控制器全稱是:MediaAccess Control,
STM32F207的MAC控制器支持的模式
-
符合IEEE 802.3 MAC
-
10/100Mbps網路
-
全雙工和半雙工通信
-
和外部PHY的MII介面和RMII介面
-
支持前導碼和幀起始資料(SFD)插入或洗掉
-
支持IPv4的頭部checksum校驗和檢查
-
支持以太網喚醒
-
有效載荷檢查

?
其實ST在設計MAC控制器時,設計了其他功能,PTP(IEEE1588)精確時間協議,MMC網路統計功能,這些功能并不常用,本人也沒有接觸,就不再講解,
對于上面說到的:支持前導碼和幀起始資料(SFD)插入或洗掉,
之前的推文《以太網資料首部》中并沒有說到前導碼和幀起始資料(SFD),一個以太網資料結構如下:

?
大多數網路設備都是支持前導碼和幀起始資料(SFD)插入或洗掉,所以可以說,這是網路硬體設備在以太網幀前打包的資料,個人認為并不屬于TCP/IP協議簇的內容,
02、MAC地址過濾
STM32的MAC控制器支持MAC地址過濾的,
目的地址過濾:
-
單播過濾
-
組播過濾
-
廣播過濾
注意:廣播過濾會導致ARP廣播也收不到,具體請看《TCP/IP協議簇中ARP協議》,
源地址過濾:
-
單播過濾
STM32的MAC控制器還支持:規則翻轉,比如,原來只允許單播過濾接收,翻轉之后,只有單播不接收,
在STM32實際專案開發中,只需要呼叫ST的庫檔案即可
ETH_InitStructure.ETH_BroadcastFramesReception =ETH_BroadcastFramesReception_Enable;//允許接收所有廣播幀
關于MAC地址相關資訊,什么是廣播,MAC地址表示方法,請看之前的推文《以太網資料首部》,
03、有效載荷檢查
有效載荷檢查其實是IP協議要求長度必須大于46個位元組,不足時填充pad位元組,具體細節請看《5000字“肝”了這篇IP協議》,
當從應用程式接收的位元組數低于60時(DA+SA+LT+Data),零被附加到發送幀以使資料長度正好為46位元組,以滿足最小資料欄位的要求IEEE802.3要求,

?
04、Checksum校驗和
首先明確,STM32的MAC控制器并不能對TCP/IP協議中所有的Checksum自動校驗,STM32實作了IPv4,ICMP,TCP和UDP協議的Checksum校驗和,
發送的時候,STM32會自動計算Checksum校驗和并自動插入,
接收的時候,STM32會自動校驗Checksum校驗和是否正確,
上述功能可以通過以下操作開啟:
通過在ETH_MACCR暫存器中設定IPCO位來啟用接收校驗和卸載,
通過在TDES1暫存器中設定CIC位,在傳輸時啟用校驗和計算和插入,
但實際代碼開發中,并不需要操作暫存器,使用ST的庫介面如下
ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable; //開啟ipv4和TCP/UDP/ICMP的幀校驗和卸載
點擊查看本文所在的專輯,STM32F207網路開發
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/271117.html
標籤:嵌入式
上一篇:我設定了一個 crontab 但是并不執行是怎么回事呢?
下一篇:STM32網路之MAC控制器
