1. 程式人生 > >MAC、MII、PHY的關係與區別

MAC、MII、PHY的關係與區別

嗯,實驗室的嵌入式專案需要寫裝置驅動,我分到了網路驅動的活,寫一個適配SylixOS的(這裡誇一句,這個真是國內相當不錯的嵌入式實時作業系統了)MPC8377的網絡卡驅動,說實話原來從來沒接觸過寫驅動的事情,更別說複雜的網絡卡驅動了。所以準備先看看人家寫的東西,明確一下概念。講道理來說現在真的連網絡卡是啥都不知道。

第一天看了看SylixOS的arm2440的dm9000的網絡卡驅動,核心的網路協議棧用的是lwip。大概看了看整個驅動的框架……有了個大概的印象,然後又請教了sylixOS的工程師很多問題。

由於在嵌入式系統方面的積累實在太少,所以我對很多嵌入式的概念其實真的不清楚………………比如我以為寫網絡卡驅動就是真的寫一個“網絡卡”的驅動,結果網絡卡的構成是什麼樣的都不知道……

本文轉載自本文,也結合了其他的網路上部落格內容。

乙太網(Ethernet)是一種計算機區域網組網技術,基於IEEE制定的IEEE 802.3標準,它規定了包括物理層的連線、電訊號和介質訪問層協議的內容。乙太網是當前應用最普遍的區域網技術。它很大程度上取代了其他區域網標準,如令牌環、FDDI和ARCNET。歷經100M乙太網在上世紀末的飛速發展後,目前千兆乙太網甚至10G乙太網正在國際組織和領導企業的推動下不斷拓展應用範圍。基於乙太網的應用一定時期內是研究開發熱點。

Ethernet的介面實質是MAC通過MII匯流排控制PHY的過程

下圖是網口結構簡圖.網口由CPU、MAC和PHY三部分組成.DMA控制器通常屬於CPU的一部分,用虛線放在這裡是為了表示DMA控制器可能會參與到網口資料傳輸中.


對於上述的三部分,並不一定都是獨立的晶片,根據組合形式,可分為下列幾種型別:


1.CPU整合MAC與PHY;
2.CPU整合MAC,PHY採用獨立晶片;
3.CPU不整合MAC與PHY,MAC與PHY採用整合晶片;

MPC8377就正好屬於第二種,手上這塊板子是eTSEC整合+8e1111 PHY晶片。

下圖是採用方案二的網口結構圖.虛框表示CPU,MAC整合在CPU中.PHY晶片通過MII介面與CPU上的Mac連線.


在軟體上對網口的操作通常分為下面幾步:


1.為資料收發分配記憶體;
2.初始化MAC暫存器;
3.初始化PHY暫存器(通過MIIM);
4.啟動收發; 

按照OSI七層結構來看,MAC是在資料鏈路層,而PHY屬於物理層。


1.MAC

MAC是Media Access Control的縮寫,即媒體訪問控制子層協議。該協議位於OSI七層協議中資料鏈路層的下半部分,主要負責控制與連線物理層的物理介質。在傳送資料的時候,MAC協議可以事先判斷是否可以傳送資料,如果可以傳送將給資料加上一些控制資訊,最終將資料以及控制資訊以規定的格式傳送到物理層;在接收資料的時候,MAC協議首先判斷輸入的資訊並是否發生傳輸錯誤,如果沒有錯誤,則去掉控制資訊傳送至LLC層。乙太網MAC由IEEE-802.3乙太網標準定義。

2.MII

MII即媒體獨立介面, “媒體獨立”表明在不對MAC硬體重新設計或替換的情況下,任何型別的PHY裝置都可以正常工作。包括分別用於傳送器和接收器的兩條獨立通道。每條通道都有自己的資料、時鐘和控制訊號。MII資料介面總共需要12個訊號,包括:
  • transmit data                                                - TXD[3:0] ////被髮送資料
  • transmit strobe                                             - TX_EN////傳送使能
  • transmit clock                                               - TX_CLK///10/100M訊號時鐘
  • transmit error                                               - TX_ER/TXD4////傳送器錯誤
  • receive data                                                    - RXD[3:0]///接收資料
  • receive strobe                                                  - RX_DV///接收資料有效指示
  • receive clock                                                    - RX_CLK///接收訊號時鐘
  • receive error                                                    - RX_ER/RXD4///接收資料出錯指示
  • collision indication                                         - COL////衝突檢測
  • carrier sense                                                    - CRS////載波檢測
  • management data clock                              - MDC////管理配置介面 
  • management data input/output              - MDIO////管理配置介面資料IO
MII以4bit,即半位元組方式雙向傳送資料,時鐘速率25MHz,其工作速率可達100Mb/s。MII管理介面是個雙訊號介面,一個是時鐘訊號,另一個是資料訊號。通過管理介面,上層能監視和控制PHY。MII介面傳遞了網路的所有資料和資料的控制,而MAC對PHY的工作狀態的確定和對PHY的控制則是使用SMI(Serial Management Interface)介面通過讀寫PHY的暫存器來完成的。PHY裡面的部分暫存器是IEEE定義的,這樣PHY把自己的目前的狀態反映到暫存器裡面,MAC通過SMI匯流排不斷的讀取PHY的狀態暫存器以得知目前PHY的狀態,例如連線速度,雙工能力等。當然也可以通過SMI設定PHY的暫存器達到控制的目的,例如流控的開啟關閉,自協商模式還是強制模式等。不論是物理連線的MII匯流排和SMI匯流排還是PHY的狀態暫存器和控制暫存器都是有IEEE的規範的,因此不同公司的MAC和PHY一樣可以協調工作。當然為了配合不同公司的PHY的自己特有的一些功能,驅動需要做相應的修改。 RMII(Reduced Media Independant Interface)簡化媒體獨立介面,是標準的乙太網介面之一,比MII有更少的I/O傳輸。
關於RMII口/MII/GMILL的基本區別:
    RMII口是用2根線來傳輸資料
    MII口是用4根線來傳輸資料
    GMII是用8根線來傳輸資料
MII/RMII只是一種介面,對於10M線速,MII的時鐘是2.5M,RMII則是5M;對於100M線速,MII的時鐘是25M,RMII則是50M。
MII/RMII 用於傳輸乙太網包,在MII/RMII介面是4/2bit的,在乙太網的PHY裡需要做串並轉換、編解碼等才能在雙絞線和光纖上進行傳輸,其幀格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN)。
乙太網幀的格式為:
前導符+開始位+目的mac地址+源mac地址+型別/長度+資料+padding(optional)+32bitCRC
如果有vlan,則要在型別/長度後面加上2個位元組的vlan tag,其中12bit來表示vlan id,另外4bit表示資料的優先順序!

3.PHY

PHY是物理介面收發器,它實現物理層。包括MII/GMII(介質獨立介面)子層、PCS(物理編碼子層)、PMA(物理介質附加)子層、PMD(物理介質相關)子層、MDI子層。


100BaseTX採用4B/5B編碼。PHY在傳送資料時,收到MAC過來的資料(對PHY來說,沒有幀的概念,對它來說,都是資料而不管什麼地址,資料還是CRC),每4bit就增加1bit的檢錯碼,然後把並行資料轉化為序列流資料,再按照物理層的編碼規則把資料編碼,再變為模擬訊號把資料送出去。收資料時的流程反之。PHY還有個重要的功能就是實現CSMA/CD的部分功能。它可以檢測到網路上是否有資料在傳送,如果有資料在傳送中就等待,一旦檢測到網路空閒,再等待一個隨機時間後將送資料出去。如果兩個碰巧同時送出了資料,那樣必將造成衝突,這時候,衝突檢測機構可以檢測到衝突,然後各等待一個隨機的時間重新發送資料。這個隨機時間很有講究的,並不是一個常數,在不同的時刻計算出來的隨機時間都是不同的,而且有多重演算法來應付出現概率很低的同兩臺主機之間的第二次衝突。通訊速率通過雙方協商,協商的結果是兩個裝置中能同時支援的最大速度和最好的雙工模式。這個技術被稱為Auto Negotiation或NWAY。隔離變壓器把PHY送出來的差分訊號用差模耦合的線圈耦合濾波以增強訊號,並且通過電磁場的轉換耦合到連線網線的另外一端。RJ-45中1、2是傳送資料的,3、6是接收資料的。新的PHY支援AUTO MDI-X功能(也需要隔離變壓器支援)。它可以實現RJ-45介面的1、2上的傳送訊號線和3、6上的接收訊號線的功能自動互相交換


網絡卡工作在osi的最後兩層,物理層和資料鏈路層,物理層定義了資料傳送與接收所需要的電與光訊號、線路狀態、時鐘基準、資料編碼和電路等,並向資料鏈路層裝置提供標準介面。物理層的晶片稱之為PHY。資料鏈路層則提供定址機構、資料幀的構建、資料差錯檢查、傳送控制、向網路層提供標準的資料介面等功能。乙太網卡中資料鏈路層的晶片稱之為MAC控制器。很多網絡卡的這兩個部分是做到一起的。他們之間的關係是pci匯流排接mac匯流排,mac接phy,phy接網線(當然也不是直接接上的,還有一個變壓裝置)。


由此可見,MAC 和PHY,一個是資料鏈路層,一個是物理層;兩者通過MII傳送資料。

相關推薦

MACMIIPHY關係區別

嗯,實驗室的嵌入式專案需要寫裝置驅動,我分到了網路驅動的活,寫一個適配SylixOS的(這裡誇一句,這個真是國內相當不錯的嵌入式實時作業系統了)MPC8377的網絡卡驅動,說實話原來從來沒接觸過寫驅動的事情,更別說複雜的網絡卡驅動了。所以準備先看看人家寫的東西,明確一下概念

Spring(概念篇):SpringSpringMVCSpringBoot以及SpringCloud的概念關係區別(詳解)

Spring與Spring MVC Spring Spring是一個一站式的輕量級的Java開發框架 Spring是一個一站式的輕量級的Java開發框架,核心是控制反轉(IOC)和麵向切面(AOP),針對於開發的WEB層(SpringMVC)、業務層(IOC)、持久層(jdbc Te

StringStringBufferStringBuilder的關係區別

String: String物件一旦建立就不能改變,如果通過"+"做連線,是從新開闢了空間來存新的字串,並把新字串的引用賦值給了變數,如果需要進行大量的字串修改操作,應該使用StringBuffer/StringBuilder/字元陣列,最終結果都可以轉換成String物件。 StringB

C語言中二維陣列名陣列地址首行地址首行首元素地址關係區別詳解(初學者必須掌握)

C語言作為很多大學理工科都會學習的語言,作為一種程式設計入門語言。但是相對於其他高階程式語言來說相對是比較難,尤其是指針,不知道有多少莘莘學子都是因為它,從C語言入門到放棄。想當年,筆者在大一學習C語言

陣列(一維二維多維)指標的關係區別總結

陣列用於同種資料型別的儲存,常規的陣列選取的是一塊連續記憶體空間來儲存同種型別的資料。1、  靜態陣列靜態陣列是在宣告時已經確定子陣列大小的陣列,即陣列元素的個數固定不變。在編譯期間在棧中分配好記憶體的陣列,在執行期間不能改變儲存空間,執行後由系統自動釋放。陣列的宣告int

Hadoop生態上幾個技術的關係區別:hivepighbase 關係區別

Pig 一種操作hadoop的輕量級指令碼語言,最初又雅虎公司推出,不過現在正在走下坡路了。當初雅虎自己慢慢退出pig的維護之後將它開源貢獻到開源社群由所有愛好者來維護。不過現在還是有些公司在用,不過

安卓複習之旅—ThreadRunnableCallableFutrue類關係區別

開啟一個執行緒有三種方式定義: Thread、Runnable、Callable,其中Runnable實現的是void run()方法,Callable實現的是 V call()方法,並且可以返回執行結果,其中Runnable可以提交給Thread來包裝下,直

睡眠休眠混合睡眠三者之間的關係區別

1、先說一下“最古老”的待機:電腦待機待機(Standby):將系統切換到該模式後,除了記憶體,電腦其他裝置的供電都將中斷,只有記憶體依靠電力維持著其中的資料(因為記憶體是易失性的,只要斷電,資料就沒有了)。這樣當希望恢復的時候,就可以直接恢復到待機前狀態。這種模式並非完

Hadoop生態中:HivePigHBase 關係區別

Pig 一種操作hadoop的輕量級指令碼語言,最初又雅虎公司推出,不過現在正在走下坡路了。當初雅虎自己慢慢退出pig的維護之後將它開源貢獻到開源社群由所有愛好者來維護。不過現在還是有些公司在用,不過我認為與其使用pig不如使用hive。:) Pig是一種資料流語言,

ip地址子網掩碼DNS的關係區別

首先ip地址可能表示內網或者外網地址: 內網也就是區域網,最直觀的就是像網咖,公司內部的電腦用交換機,HUB,路由連起來的。再通過光釺。貓接入INTERNET的。 外網就像你家裡的一臺電腦。用貓撥號上的,有個外部IP的。---------------------------

多執行緒相關 ThreadRunnableCallableFutrue類關係區別

Java中存在Runnable、Callable、Future、FutureTask這幾個與執行緒相關的類或者介面,在Java中也是比較重要的幾個概念,我們通過下面的簡單示例來了解一下它們的作用於區別。 Runnable 其中Runnable應該是我們最熟悉的介面,它只有一

藍綠部署紅黑部署AB測試灰度釋出金絲雀釋出滾動釋出的概念區別(轉)

出處:https://www.baidu.com/link?url=QjboallwNm_jxcL3fHG57wEakiBfAs_3-TChTGu1eBXstlHEsGBc-NDA7AKTqsiroBx9a8OMoITgM5mbKAoiSqwMCLj5LzrjcAew2sBt9zO&wd=&e

藍綠部署紅黑部署AB測試灰度釋出金絲雀釋出滾動釋出的概念區別

在有關微服務、DevOps、Cloud-native、系統部署等的討論中,藍綠部署、A/B 測試、灰度釋出、滾動釋出、紅黑部署等概念經常被提到,它們有什麼區別呢?通過搜尋相關資料,做一個簡單的辨析,如下: 1、藍綠部署(Blue/Green Deployment) 過去的 10 年裡,很多公

編譯型語言解釋型語言靜態型別語言動態型別語言概念區別

最近在研究Python和Erlang。反覆提到動態型別語言、動態語言、解釋型語言這些概念。這些概念很生澀,在這裡做一個總結。 編譯型語言和解釋型語言 1、編譯型語言 需通過編譯器(compiler)將原始碼編譯成機器碼,之後才能執行的語言。一般需經過編譯(compile)、連結(linker)這兩個

五分鐘搞懂XenKVMQemu間的關係區別

Aha,忽然發現我也是個標題黨,十分鐘搞定某某技能這種標題最吸引人了。當然我也不是華而不實,是不是乾貨,你讀了才知道。話說,接觸Xen這麼久了,現在才花時間搞清楚這個問題,要不是需要給別人解釋,還不知道要等到什麼時候才來寫這篇部落格。閒話少說,進入正題。 關於qemu Qe

c++中overload過載override覆蓋overwrite重寫的介紹區別

(1)overload(過載),即函式過載: ①在同一個類中; ②函式名字相同; ③函式引數不同(型別不同、數量不同,兩者滿足其一即可); ④不以返回值型別不同作為函式過載的條件。 (2)override(覆蓋,子類改寫父類的虛擬函式),用於實現C++中多型: ①分別位於父類和子類中; ②子類改寫父

基於Java的打包jarwarear包的作用區別詳解

以最終客戶的角度來看,JAR檔案就是一種封裝,他們不需要知道jar檔案中有多少個.class檔案,每個檔案中的功能與作用,同樣可以得到他們希望的結果。除jar以外對於J2EE來說還有war和ear。區別見下表: JAR WAR EAR 英文 Java Archive fi

以太坊資料結構儲存區塊頭的關係分析

在Ethereum的世界裡,資料的最終儲存形式是[k,v]鍵值對,目前使用的[k,v]型底層資料庫是LevelDB;所有與交易,操作相關的資料,其呈現的集合形式是Block(Header);如果以Block為單位連結起來,則構成更大粒度的BlockChain(HeaderCh

LR和SVM線性迴歸的聯絡區別

LR和SVM的聯絡:都是監督的分類演算法都是線性分類方法 (不考慮核函式時)都是判別模型 判別模型和生成模型是兩個相對應的模型。 判別模型是直接生成一個表示P(Y|X)P(Y|X)或者Y=f(X)Y=f(X)的判別函式(或預測模型) 生成模型是先計算聯合概率分佈P(Y,X)P

叢集分散式集中式偽分散式的概念區別

1. 集中式 將專案等部署到同一臺機器上,對機器效能要求比較高,一般會用多臺機器備份,否則,如果機器出現宕機等狀況,整個專案將不能執行。 eg:就好比你要蓋一座房子,你房子就給一個人蓋,如果這個人生病或者有事,你還沒有合適的人來代替這個人,你的房子就不能蓋了。 2. 分散式 將一