以太網(wǎng)PHY、MAC及其通信接口入門(mén)
本文主要介紹以太網(wǎng)的 MAC 和 PHY,以及之間的 MII(Media Independent Interface ,媒體獨立接口)和 MII 的各種衍生版本——GMII、SGMII、RMII、RGMII等。
本文引用地址:http://dyxdggzs.com/article/202504/469606.htm簡(jiǎn)介
從硬件的角度看,以太網(wǎng)接口電路主要由MAC(Media Access Control)控制器和物理層接口PHY(Physical Layer,PHY)兩大部分構成。如下圖所示:
DMA控制器通常屬于CPU的一部分,用虛線(xiàn)放在這里是為了表示DMA控制器可能會(huì )參與到網(wǎng)口數據傳輸中。但是,在實(shí)際的設計中,以上三部分并不一定獨立分開(kāi)的。由于,PHY整合了大量模擬硬件,而MAC是典型的全數字器件。
考慮到芯片面積及模擬/數字混合架構的原因,通常,將MAC集成進(jìn)微控制器而將PHY留在片外。更靈活、密度更高的芯片技術(shù)已經(jīng)可以實(shí)現MAC和PHY的單芯片整合。
可分為下列幾種類(lèi)型:
CPU集成MAC與PHY。目前來(lái)說(shuō)并不多見(jiàn)
CPU集成MAC,PHY采用獨立芯片。比較常見(jiàn)
CPU不集成MAC與PHY,MAC與PHY采用集成芯片。比較常見(jiàn)
MAC及PHY工作在OSI七層模型的數據鏈路層和物理層。具體如下:
什么是MAC
MAC(Media Access Control)即媒體訪(fǎng)問(wèn)控制子層協(xié)議。
該部分有兩個(gè)概念:MAC可以是一個(gè)硬件控制器 及 MAC通信以協(xié)議。該協(xié)議位于OSI七層協(xié)議中數據鏈路層的下半部分,主要負責控制與連接物理層的物理介質(zhì)。MAC硬件大約就是下面的樣子了:
在發(fā)送數據的時(shí)候,MAC協(xié)議可以事先判斷是否可以發(fā)送數據,如果可以發(fā)送將給數據加上一些控制信息,最終將數據以及控制信息以規定的格式發(fā)送到物理層。
在接收數據的時(shí)候,MAC協(xié)議首先判斷輸入的信息并是否發(fā)生傳輸錯誤,如果沒(méi)有錯誤,則去掉控制信息發(fā)送至LLC(邏輯鏈路控制)層。該層協(xié)議是以太網(wǎng)MAC由IEEE-802. 3以太網(wǎng)標準定義。
以太網(wǎng)數據鏈路層其實(shí)包含MAC(介質(zhì)訪(fǎng)問(wèn)控制)子層和LLC(邏輯鏈路控制)子層。一塊以太網(wǎng)卡MAC芯片的作用不但要實(shí)現MAC子層和LLC子層的功能,還要提供符合規范的PCI界面以實(shí)現和主機的數據交換。
MAC從PCI總線(xiàn)收到IP數據包(或者其他網(wǎng)絡(luò )層協(xié)議的數據包)后,將之拆分并重新打包成最大1518Byte、最小64Byte的幀。
這個(gè)幀里面包括了目標MAC地址、自己的源MAC地址和數據包里面的協(xié)議類(lèi)型(比如IP數據包的類(lèi)型用80表示,最后還有一個(gè)DWORD(4Byte)的CRC碼。
可是目標的MAC地址是哪里來(lái)的呢?
這牽扯到一個(gè)ARP協(xié)議(介乎于網(wǎng)絡(luò )層和數據鏈路層的一個(gè)協(xié)議)。第一次傳送某個(gè)目的IP地址的數據的時(shí)候,先會(huì )發(fā)出一個(gè)ARP包,其MAC的目標地址是廣播地址,里面說(shuō)到:“誰(shuí)是xxx.xxx.xxx.xxx這個(gè)IP地址的主人?”因為是廣播包,所有這個(gè)局域網(wǎng)的主機都收到了這個(gè)ARP請求。
收到請求的主機將這個(gè)IP地址和自己的相比較,如果不相同就不予理會(huì ),如果相同就發(fā)出ARP響應包。
這個(gè)IP地址的主機收到這個(gè)ARP請求包后回復的ARP響應里說(shuō)到:“我是這個(gè)IP地址的主人”。這個(gè)包里面就包括了他的MAC地址。以后的給這個(gè)IP地址的幀的目標MAC地址就被確定了。(其它的協(xié)議如IPX/SPX也有相應的協(xié)議完成這些操作)。
IP地址和MAC地址之間的關(guān)聯(lián)關(guān)系保存在主機系統里面,叫做ARP表。由驅動(dòng)程序和操作系統完成。
以太網(wǎng)MAC芯片的一端接計算機PCI總線(xiàn),另外一端就接到PHY芯片上,它們之間是通過(guò)MII接口鏈接的。一個(gè)MAC的結構圖如下圖所示:
什么是PHY
PHY((Physical Layer,PHY))是IEEE802.3中定義的一個(gè)標準模塊,STA(station management entity,管理實(shí)體,一般為MAC或CPU)通過(guò)SMI(Serial Manage Interface)對PHY的行為、狀態(tài)進(jìn)行管理和控制,而具體管理和控制動(dòng)作是通過(guò)讀寫(xiě)PHY內部的寄存器實(shí)現的。一個(gè)PHY的基本結構如下圖:
PHY是物理接口收發(fā)器,它實(shí)現OSI模型的物理層。
IEEE-802.3標準定義了以太網(wǎng)PHY。包括MII/GMII(介質(zhì)獨立接口)子層、PCS(物理編碼子層)、PMA(物理介質(zhì)附加)子層、PMD(物理介質(zhì)相關(guān))子層、MDI子層。它符合IEEE-802.3k中用于10BaseT(第14條)和100BaseTX(第24條和第25條)的規范。
注:PHY寄存器在IEEE802.3標準的 22.2.4 Management functions 節有介紹,但不涉及所有的寄存器,個(gè)別寄存器需要到其它章節中看,當然,文檔里面也提到該在哪里找到哪個(gè)寄存器。
什么是MII
MII(Media Independent Interface)即媒體獨立接口,MII 接口是 MAC 與 PHY 連接的標準接口。它是 IEEE-802.3 定義的以太網(wǎng)行業(yè)標準。MII 接口提供了 MAC 與 PHY 之間、PHY 與 STA(Station Management)之間的互聯(lián)技術(shù),該接口支持 10Mb/s 與 100Mb/s 的數據傳輸速率,數據傳輸的位寬為 4 位。MII 接口如下圖所示:
MII接口主要包括四個(gè)部分。一是從MAC層到PHY層的發(fā)送數據接口,二是從PHY層到MAC層的接收數據接口,三是從PHY層到MAC層的狀態(tài)指示信號,四是MAC層和PHY層之間傳送控制和狀態(tài)信息的MDIO接口。
MII 包括一個(gè)數據接口,以及一個(gè) MAC 和 PHY 之間的管理接口:
TX_CLK(transmit clock):TX_CLK (Transmit Clock) 是一個(gè)連續的時(shí)鐘信號(即系統啟動(dòng),該信號就一直存在),它是 TX_EN、TXD、TX_ER(信號方向為從 RS 到 PHY)的參考時(shí)鐘,TX_CLK 由 PHY 驅動(dòng) TX_CLK 的時(shí)鐘頻率是數據傳輸速率的 25%,偏差 ±100ppm。例如,100Mb/s 模式下,TX_CLK 時(shí)鐘頻率為 25MHz,占空比在 35% 至 65% 之間。
TXD<3:0>(transmit data):TXD 由 RS 驅動(dòng),同步于 TX_CLK,在 TX_CLK 的時(shí)鐘周期內,并且TX_EN 有效,TXD 上的數據被 PHY 接收,否則 TXD 的數據對 PHY 沒(méi)有任何影響。
TX_ER(transmit coding error):TX_ER 同步于 TX_CLK,在數據傳輸過(guò)程中,如果 TX_ER 有效超過(guò)一個(gè)時(shí)鐘周期,并且此時(shí)TX_EN 是有效的,則數據通道中傳輸的數據是無(wú)效的,沒(méi)用的。注:當 TX_ER 有效并不影響工作在 10Mb/s 的 PHY 或者 TX_EN 無(wú)效時(shí)的數據傳輸。在 MII 接口的連線(xiàn)中,如果 TX_ER 信號線(xiàn)沒(méi)有用到,必須將它下拉接地。
TX_EN:發(fā)送使能。TX_EN 由 Reconciliation 子層根據 TX_CLK 上升沿同步進(jìn)行轉換。
RX_CLK:它與 TX_CLK 具有相同的要求,所不同的是它是 RX_DV、RXD、RX_ER(信號方向是從 PHY 到 RS)的參考時(shí)鐘。RX_CLK 同樣是由 PHY 驅動(dòng),PHY 可能從接收到的數據中提取時(shí)鐘 RX_CLK,也有可能從一個(gè)名義上的參考時(shí)鐘(e.g., the TX_CLK reference)來(lái)驅動(dòng)RX_CLK。
RXD<3:0>(receive data):RXD由RS驅動(dòng),同步于 RX_CLK,在 RX_CLK 的時(shí)鐘周期內,并且 RX_DV 有效,RXD 上的數據被RS 接收,否則 RXD 的數據對 RS 沒(méi)有任何影響。
RX_ER(receive error):RX_ER 同步于 RX_CLK,其在 RX 通道中的作用類(lèi)似于 TX_ER 對于 TX 通道數據傳輸的影響。
RX_DV(Receive Data Valid):RXD_DV 同步于 RX_CLK,被 PHY 驅動(dòng),它的作用如同于發(fā)送通道中的 TX_EN,不同的是在時(shí)序上稍有一點(diǎn)差別:為了讓數據能夠成功被RS接收,要求RXD_DV有效的時(shí)間必須覆蓋整個(gè) FRAME 的過(guò)程,即starting no later than the Start Frame Delimiter (SFD) and excluding any End-of-Frame delimiter。MII以4位半字節方式傳送數據雙向傳輸,時(shí)鐘速率25MHz。其工作速率可達100Mb/s。
COL(collision detected):COL 不需要同步于參考時(shí)鐘。
CRS(carrier sense):CRS 不需要同步于參考時(shí)鐘,只要通道存在發(fā)送或者接收過(guò)程,CRS 就需要有效。
MDC:由站管理實(shí)體向 PHY 提供,作為在 MDIO 信號上傳送信息的定時(shí)參考。MDC 是一種非周期性的信號,沒(méi)有最高或最低時(shí)間。無(wú)論 TX_CLK 和 RX_CLK 的標稱(chēng)周期如何,MDC 的最小高低時(shí)間應為 160 ns,MDC 的最小周期為 400 ns。
MDIO:是 PHY 和 STA 之間的雙向信號。它用于在 PHY 和 STA 之間傳輸控制信息和狀態(tài)??刂菩畔⒂?STA 同步地針對 MDC 驅動(dòng)并且由 PHY 同步地采樣。狀態(tài)信息由 PHY 針對 MDC 同步驅動(dòng)并由 STA 同步采樣。
PHY 里面的部分寄存器是 IEEE 定義的,這樣PHY把自己的目前的狀態(tài)反映到寄存器里面。
MAC 通過(guò) SMI 總線(xiàn)不斷的讀取PHY 的狀態(tài)寄存器以得知目前 PHY 的狀態(tài)。例如連接速度、雙工的能力等。
當然也可以通過(guò) SMI 設置 PHY的寄存器達到控制的目的。例如流控的打開(kāi)關(guān)閉、自協(xié)商模式還是強制模式等。
不論是物理連接的MII總線(xiàn)和 SMI 總線(xiàn),還是 PHY 的狀態(tài)寄存器和控制寄存器都是由IEEE的規范的。因此不同公司的 MAC 和 PHY 一樣可以協(xié)調工作。當然為了配合不同公司的 PHY 的自己特有的一些功能,驅動(dòng)需要做相應的修改。
MII 支持 10Mbps 和 100Mbps 的操作,一個(gè)接口由 14 根線(xiàn)組成,它的支持還是比較靈活的。但是有一個(gè)缺點(diǎn)是因為它一個(gè)端口用的信號線(xiàn)太多,如果一個(gè) 8 端口的交換機要用到 112 根線(xiàn),16 端口就要用到 224 根線(xiàn),到 32 端口的話(huà)就要用到 448 根線(xiàn)。
一般按照這個(gè)接口做交換機是不太現實(shí)的。所以現代的交換機的制作都會(huì )用到其它的一些從 MII 簡(jiǎn)化出來(lái)的標準,比如 RMII、SMII、GMII等。
什么是RMII
簡(jiǎn)化媒體獨立接口是標準的以太網(wǎng)接口之一,比 MII 有更少的 I/O 傳輸。RMII 口是用兩根線(xiàn)來(lái)傳輸數據的,MII 口是用 4 根線(xiàn)來(lái)傳輸數據的,GMII 是用 8 根線(xiàn)來(lái)傳輸數據的。
MII/RMII 只是一種接口,對于10Mbps 線(xiàn)速,MII 的時(shí)鐘速率是 2.5MHz 就可以了,RMII 則需要 5MHz;對于 100Mbps 線(xiàn)速,MII 需要的時(shí)鐘速率是 25MHz,RMII 則是 50MHz。
MII/RMII 用于傳輸以太網(wǎng)包,在 MII/RMII 接口是 4/2bit 的,在以太網(wǎng)的PHY里需要做串并轉換,編解碼等才能在雙絞線(xiàn)和光纖上進(jìn)行傳輸,其幀格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN)。
以太網(wǎng)幀的格式為:前導符 + 開(kāi)始位 + 目的 mac 地址 + 源 mac 地址 + 類(lèi)型/長(cháng)度 + 數據 + padding(optional) + 32bitCRC。如果有 vlan,則要在類(lèi)型/長(cháng)度后面加上 2 個(gè)字節的 vlan tag,其中 12bit 來(lái)表示vlan id,另外,4bit 表示數據的優(yōu)先級!
什么是GMII
GMII是千兆網(wǎng)的MII接口,這個(gè)也有相應的RGMII接口,表示簡(jiǎn)化了的GMII接口。GMII 采用 8 位接口數據,工作時(shí)鐘125MHz,因此傳輸速率可達 1000Mbps。
同時(shí)兼容 MII 所規定的10/100 Mbps工作方式。GMII 接口數據結構符合IEEE以太網(wǎng)標準,該接口定義見(jiàn) IEEE 802.3-2000。
什么是RGMII
RGMII(Reduced Gigabit Media Independant Interface),精簡(jiǎn)GMII接口。相對于GMII相比,RGMII具有如下特征:
發(fā)送/接收數據線(xiàn)由8條改為4條
TX_ER和TX_EN復用,通過(guò)TX_CTL傳送
RX_ER與RX_DV復用,通過(guò)RX_CTL傳送
1 Gbit/s速率下,時(shí)鐘頻率為125MHz
100 Mbit/s速率下,時(shí)鐘頻率為25MHz
10 Mbit/s速率下,時(shí)鐘頻率為2.5MHz
信號定義如下:
雖然RGMII信號線(xiàn)減半,但TXC/RXC時(shí)鐘仍為125Mhz,為了達到1000Mbit的傳輸速率,TXD/RXD信號線(xiàn)在時(shí)鐘上升沿發(fā)送接收GMII接口中的TXD[3:0]/RXD[3:0],在時(shí)鐘下降沿發(fā)送接收TXD[7:4]/RXD[7:4],并且信號TX_CTL反應了TX_EN和TX_ER狀態(tài),即在TXC上升沿發(fā)送TX_EN,下降沿發(fā)送TX_ER,同樣的道理試用于RX_CTL,下圖為發(fā)送接收的時(shí)序:
什么是SMI
SMI:串行管理接口(Serial Management Interface),通常直接被稱(chēng)為MDIO接口(Management Data Input/Output Interface)。
MDIO最早在IEEE 802.3的第22卷定義,后來(lái)在第45卷又定義了增強版本的MDIO,其主要被應用于以太網(wǎng)的MAC和PHY層之間,用于MAC層器件通過(guò)讀寫(xiě)寄存器來(lái)實(shí)現對PHY層器件的操作與管理。
MDIO主機(即產(chǎn)生MDC時(shí)鐘的設備)通常被稱(chēng)為STA(Station Management Entity),而MDIO從機通常被稱(chēng)為MMD(MDIO Management Device)。通常STA都是MAC層器件的一部分,而MMD則是PHY層器件的一部分。
MDIO接口包括兩條線(xiàn),MDIO和MDC,其中MDIO是雙向數據線(xiàn),而MDC是由STA驅動(dòng)的時(shí)鐘線(xiàn)。MDC時(shí)鐘的最高速率一般為2.5MHz,MDC也可以是非固定頻率,甚至可以是非周期的。
MDIO接口只是會(huì )在MDC時(shí)鐘的上升沿進(jìn)行采樣,而并不在意MDC時(shí)鐘的頻率(類(lèi)似于I2C接口)。如下圖所示。
QA
網(wǎng)卡的MAC和PHY間的關(guān)系?
網(wǎng)卡工作在osi的最后兩層,物理層和數據鏈路層,物理層定義了數據傳送與接收所需要的電與光信號、線(xiàn)路狀態(tài)、時(shí)鐘基準、數據編碼和電路等,并向數據鏈路層設備提供標準接口.物理層的芯片稱(chēng)之為PHY.
數據鏈路層則提供尋址機構、數據幀的構建、數據差錯檢查、傳送控制、向網(wǎng)絡(luò )層提供標準的數據接口等功能.以太網(wǎng)卡中數據鏈路層的芯片稱(chēng)之為MAC控制器.
很多網(wǎng)卡的這兩個(gè)部分是做到一起的.他們之間的關(guān)系是pci總線(xiàn)接mac總線(xiàn),mac接phy,phy接網(wǎng)線(xiàn)(當然也不是直接接上的,還有一個(gè)變壓裝置).
PHY和MAC之間如何進(jìn)行溝通
通過(guò)IEEE定義的標準的MII/GigaMII(Media Independed Interfade,介質(zhì)獨立界面)界面連接MAC和PHY。這個(gè)界面是IEEE定義的。MII界面傳遞了網(wǎng)絡(luò )的所有數據和數據的控制。
而MAC對PHY的工作狀態(tài)的確定和對PHY的控制則是使用SMI(Serial Management Interface)界面通過(guò)讀寫(xiě)PHY的寄存器來(lái)完成的。
PHY里面的部分寄存器也是IEEE定義的,這樣PHY把自己的目前的狀態(tài)反映到寄存器里面,MAC通過(guò)SMI總線(xiàn)不斷的讀取PHY的狀態(tài)寄存器以得知目前PHY的狀態(tài),例如連接速度,雙工的能力等。
當然也可以通過(guò)SMI設置PHY的寄存器達到控制的目的,例如流控的打開(kāi)關(guān)閉,自協(xié)商模式還是強制模式等。
我們看到了,不論是物理連接的MII界面和SMI總線(xiàn)還是PHY的狀態(tài)寄存器和控制寄存器都是有IEEE的規范的,因此不同公司的MAC和PHY一樣可以協(xié)調工作。當然為了配合不同公司的PHY的自己特有的一些功能,驅動(dòng)需要做相應的修改。
評論