網卡驅動之01硬件及協議介紹

在此之前,本人對網卡的理解侷限於平臺上的PHY芯片或者MAC芯片,甚至認爲是相同的東西以至於在在開發驅動程序追蹤內核代碼時,總是傻傻分不清。本文旨在通過介紹硬件常識以達到更好的理解驅動代碼。

0 PHY 與 MAC

TCP/IP協議棧分爲五層,其中自頂向下的前三層(應用層、傳輸層和網絡層)都是軟件實現的概念(集成在操作系統軟件中)。而後兩層,則有相應的硬件控制器實現,通常鏈路層的芯片集成在處理器內部,即MAC Controller芯片。而物理層,則是有獨立於處理器之外的PHY芯片實現。

MAC芯片實現的是數據鏈路層的功能,如尋址、數據幀構建、數據差錯檢查等。

PHY芯片則是定義了數據傳送與接收所需要的電與光信號、線路狀態、數據編碼等,並向數據鏈中層提供標準的接口。

從功能劃分考慮,PHY分爲協調子層(Reconciliation sublayer)用於實現指令轉換;PCS;PMA和PMD則分別表示實現物理層協議的各子層。在實際應用系統中,這些子層的操作細節將全部由PHY芯片實現,如下圖所示。


互聯方式

以最常見的以太網PHY與以太網MAC爲例,IEEE802.3中定義了之間的互聯接口,常見的有MII/GMII/RGMII接口。即PHY與MAC中都會實現至少一種接口方式,以達到互聯通訊的目的。

1 MII、GMII、RGMII

       從英文縮寫中就不難發現,關鍵需要理解MII,而後兩者都是基於MII所衍生而出的。

       MII(Medium Independent Interface)即媒體獨立接口,它是由IEEE802.3定義的以太網標準。包括一個數據接口,以及一個MAC和PHY之間的管理接口。

       數據接口包括分別用於發送器與接收器的兩條獨立信道,每條信道都有自己的數據、時鐘和控制信號,共計16個信號。

       管理接口是個雙信號接口:一個時鐘信號,另一個是數據信號,通過管理接口,MAC芯片能夠控制PHY芯片。

       區別:RMII(Reduced MII)、GMII(Gigabit MII)、RGMII(Reduced GMII)

       MII支持10M和100M的操作,一個接口由14根線組成,缺點是使用信號線太多了,如果一個8端口的交換機就需要使用到112根線,16端口就要用到224根線,到32端口的話需要用到448根,因此交換機如果使用這種方式製作難度太大。

       RMII,出於上述目的,衍生出RMII接口,數據收發上它比MII接口少了一倍的信號線,因此需要更高的時鐘頻率維持相同的收發速率。RMII要求7個數據線,比MII少了一倍,所以交換機能夠接入多一倍的端口。但是速率發麪與MII同樣只能支持10M和100M的速率。

       GMII,則是從提高速率的角度出發定義的接口,支持1000M的速率,同樣也有RGMII接口,表示簡化了的GMII接口。

       SMII,這個則是由思科提出的,換言之接入思科的網絡設備,都可以考慮是否需要使用該種協議,它的優勢在於使用了更少的信號線,S表示串行,只使用一根信號線發送數據,一根信號線接收數據,但同樣需要更高的時鐘來滿足相同的傳輸速度,達到了125M。

吉比特以太網協議與10/100Mb/s以太網協議的差別僅僅在於物理層,即PHY芯片的不同,PHY

2 MDIO

       除了上述介紹的數據接口以外,無論何種協議都還包含了一個管理接口。管理接口的作用就是控制PHY芯片的目的,例如讀取PHY芯片的ID參數。管理接口又分爲用於配置時鐘的管理配置時鐘接口(MDC)、管理配置IO接口(MDIO)。

       MDIO是一種簡單的雙線串行接口,由IEEE802.3定義,該接口有32個寄存器,但是地址卻由16bit組成(詳細緣由可追述MDIO協議)。IEEE規定了前16個寄存器的含義,後16個由芯片廠商自由定義。注意這些寄存器都是針對PHY芯片,而不是MAC芯片,但是剩餘的16個通常並不夠使用,所以有的PHY芯片廠商提出page概念,擴充寄存器容量,詳細可參見相應的芯片數據手冊。

       使用的場景:在一個 PHY 管理接口中,使用 MDIO接口組件讀取和寫入 PHY 控制和狀態寄存器。它在運行之前對每個 PHY 進行配置,並在運行期間監控鏈接的狀態。

MDIO的工作流程爲: MDIO接口在沒有傳輸數據的空閒狀態(IDLE)數據線MDIO處於高阻態。 MDIO出現一個2bit的開始標識碼(01)一個讀/寫操作開始。 MDIO出現一個2bit數據來標識是讀操作(10)還是寫操作(01)。 MDIO出現一個5bit數據標識PHY的地址。 MDIO出現一個5bitPHY寄存器地址。 MDIO需要2個時鐘的訪問時間。 MDIO串行讀出/寫入16bit的寄存器數據。 MDIO恢復成IDLE狀態,同時MDIO進入高阻狀態。

MDIO舉例:


       上圖是某廠商做的MDIO模塊的框圖,實際上一般會集成在PHY芯片中,主要關鍵接口說明如下。

       1)mdc是由MDIO主機提供的總線時鐘,它直接連接到物理MDC輸入引腳;

       2)phy_addr:物理地址,注意這個是指phy芯片的物理地址,而非內部寄存器的地址,但是範圍也是介於0x00-0x1f之間;

MDIO地址

       MDIO涉及到兩個地址,一個是PHY ADDR即芯片自身的地址,如果熟悉MDIO時序可以知道,在每次PHY芯片與MAC Controller交互時都需要使用到PHY ADDR。而另外一個是REGADDR,IEEE定義了前16個。注意兩者都是5比特地址寬度。

關於PHY ADDR,是由硬件電路設計決定的,類似於大多數EEPROM的I2C高比特地址是由pin的高低電平指定。以Marvell的phy芯片爲例,PHY ADDR是由Config[3:0]決定的,關於映射關係如下圖所示,可見每一比特可以決定兩種信息。即Config[0]決定了PHYAD[1]和PHYAD[0]。


       至於具體的映射關係是由硬件上Config的電氣特性決定,如下圖所示。


       例如假設config[0]上接了VDDO即高電平,那麼bit1,bit0都是1,再根據映射關係可知config[0]的bit[1]是PHYAD[1],而bit[0]是PHYAD[0]。所以PHYAD[1:0] = 2’b11。


3 網卡

PHY和MAC是網卡的主要組成部分,網卡一般用RJ-45插口,10M網卡的RJ-45插口也只用了1、2、3、6四根針,而100M或1000M網卡的則是八根針都是全的。除此以外,還需要其它元件,因爲雖然PHY提供絕大多數模擬支持,但在一個典型實現中,仍需外接6、7只分立元件及一個局域網絕緣模塊。絕緣模塊一般採用一個1:1的變壓器。這些部件的主要功能是爲了保護PHY免遭由於電氣失誤而引起的損壞。

參考文章

http://www.cnblogs.com/zxc2man/p/3769777.html

http://www.cnblogs.com/cornflower/archive/2010/01/19/1651312.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章