1. 程式人生 > 實用技巧 >乙太網詳解(一)-MAC/PHY/MII/RMII/GMII/RGMII基本介紹(轉)

乙太網詳解(一)-MAC/PHY/MII/RMII/GMII/RGMII基本介紹(轉)

網路裝置中肯定離開不MAC和PHY,本篇文章將詳細介紹下乙太網中一些常見術語與介面。

MAC和PHY結構

從硬體角度來看乙太網是由CPU,MAC,PHY三部分組成的,如下圖示意:


上圖中DMA整合在CPU,CPU,MAC,PHY並不是整合在同一個晶片內,由於PHY包含大量模擬器件,而MAC是典型的數位電路,考慮到芯片面積及模擬/數字混合架構的原因,將MAC整合進CPU而將PHY留在片外,這種結構是最常見的。下圖是網路介面內部結構圖,虛框表示CPU,MAC整合在CPU中,PHY晶片通過MII介面與CPU上的MAC連線:


以上是乙太網結構大框架,下面分別介紹各個部分。


MAC

MAC(Media Access Control)即媒體訪問控制層協議。MAC由硬體控制器及MAC通訊協議構成。該協議位於OSI七層協議中資料鏈路層的下半部分,主要負責控制與連線物理層的物理介質。MAC硬體框圖如下圖所示:

在傳送資料的時候,MAC協議可以事先判斷是否可以傳送資料,如果可以傳送將給資料加上一些控制資訊,最終將資料以及控制資訊以規定的格式傳送到物理層;在接收資料的時候,MAC協議首先判斷輸入的資訊並是否發生傳輸錯誤,如果沒有錯誤,則去掉控制資訊傳送至LLC(邏輯鏈路控制)層。該層協議是乙太網MAC由IEEE-802. 3乙太網標準定義。一般乙太網MAC晶片的一端連線PCI匯流排,另一端連線PHY晶片上通過MII介面連線。


PHY

PHY(Physical Layer)是IEEE802.3中定義的一個標準模組,STA(Station Management Entity,管理實體,一般為MAC或CPU)通過MIIM(MII Manage Interface)對PHY的行為、狀態進行管理和控制,而具體管理和控制動作是通過讀寫PHY內部的暫存器實現的。PHY的基本結構如下圖:

PHY在傳送資料的時候,收到MAC過來的資料(對PHY來說,沒有幀的概念,對它來說,都是資料)然後把並行資料轉化為序列流資料,再按照物理層的編碼規則把資料編碼,再變為模擬訊號把資料送出去,收資料時的流程反之。
PHY還有個重要的功能就是實現CSMA/CD的部分功能,它可以檢測到網路上是否有資料在傳送,如果有資料在傳送中就等待,一旦檢測到網路空閒,再等待一個隨機時間後將送資料出去.如果兩個碰巧同時送出了資料,那樣必將造成衝突,這時候衝突檢測機構可以檢測到衝突,然後各等待一個隨機的時間重新發送資料。

PHY暫存器的地址空間為5位,從0到31最多可以定義32個暫存器(隨著晶片功能不斷增加,很多PHY晶片採用分頁技術來擴充套件地址空間以定義更多的暫存器),IEEE802.3定義了地址為0-15這16個暫存器的功能,地址16-31的暫存器留給晶片製造商自由定義,如下表所示:


注:

  1. 上圖B和E表示在特定介面下,暫存器是基本的還是擴充套件的。例如:MII介面下只有0和1暫存器是基本的,其它的是擴充套件的。所為擴充套件是指留給IEEE以後的擴充套件特性用,不是給PHY廠商的擴充套件,PHY廠商自定義的只能是16~31號暫存器 。
  2. 在IEEE標準文件及某些PHY手冊中,某暫存器的位元(bit)用X.y表示,如0.15表示第0暫存器的第15位。

MII

MII(Media Independent interface)即介質無關介面,它是IEEE-802.3定義的行業標準,是MAC與PHY之間的介面。MII資料介面包含16個訊號和2個管理介面訊號,如下圖所示:


訊號定義如下:

訊號名稱描述方向
TX_CLK 傳送時鐘 PHY → MAC
TX_ER 傳送資料錯誤 MAC → PHY
TX_EN 傳送使能 MAC → PHY
TXD0 傳送資料位0(最先傳輸) MAC → PHY
TXD1 傳送資料位1 MAC → PHY
TXD2 傳送資料位2 MAC → PHY
TXD3 傳送資料位3 MAC → PHY
RX_CLK 接收時鐘 PHY → MAC
RX_DV 接收資料有效 PHY → MAC
RX_ER 接收資料錯誤 PHY → MAC
RXD0 接收資料位0(最先傳輸) PHY → MAC
RXD1 接收資料位1 PHY → MAC
RXD2 接收資料位2 PHY → MAC
RXD3 接收資料位3 PHY → MAC
CRS 載波監測 PHY → MAC
COL 衝突碰撞監測 PHY → MAC
MDIO 管理資料 雙向
MDC 管理資料時鐘 MAC → PHY

MAC 通過MIIM 介面讀取PHY 狀態暫存器以得知目前PHY 的狀態。例如連線速度、雙工的能力等。也可以通過 MIIM設定PHY的暫存器達到控制的目的。例如流控的開啟關閉、自協商模式還是強制模式等。MII以4位半位元組方式傳送資料雙向傳輸,時鐘速率25MHz。其工作速率可達100Mb/s。當時鍾頻率為2.5MHz時,對應速率為10Mb/s。MII介面雖然很靈活但由於訊號線太多限制多介面網口的發展,後續又衍生出RMII,SMII等。


RMII

RMII(Reduced Media Independant Interface),精簡MII介面,節省了一半的資料線。RMII收發使用2位資料進行傳輸,收發時鐘均採用50MHz時鐘源。訊號定義如下:

訊號名稱描述方向
REF_CLK 參考時鐘 MAC→PHY或由外部時鐘源提供
TX_EN 傳送資料使能 MAC → PHY
TXD0 傳送資料位0(最先傳輸) MAC → PHY
TXD1 傳送資料位1 MAC → PHY
RX_ER 接收錯誤 PHY → MAC
RXD0 接收資料位0(最先傳輸) PHY → MAC
RXD1 接收資料1 PHY → MAC
CRS_DV 載波和接收資料有效 PHY → MAC
MDIO 管理資料 雙向
MDC 管理資料時鐘 MAC → PHY

其中CRS_DV是MII中RX_DV和CRS兩個訊號的合併,當物理層接收到載波訊號後CRS_DV變得有效,將資料傳送給RXD。當載波訊號消失後,CRS_DV會變為無效。在100M乙太網速率中,MAC層每個時鐘取樣一次RXD[1:0]上的資料,在10M乙太網速率中,MAC層每10個時鐘取樣一次RXD[1:0]上的資料,此時物理層接收的每個資料會在RXD[1:0]保留10個時鐘。


SMII

SMII(Serial Media Independant Interface),序列MII介面。它包括TXD,RXD,SYNC三個訊號線,共用一個時鐘訊號,此時鐘訊號是125MHz,訊號線與此時鐘同步。訊號定義如下:

訊號名稱描述方向
REF_CLK 參考時鐘 外部時鐘源提供125MHz
TXD 傳送資料 MAC → PHY
RXD 接收資料 PHY → MAC
SYNC 同步訊號 -
MDIO 管理資料 雙向
MDC 管理資料時鐘 MAC → PHY

SYNC是資料收發的同步訊號,每10個時鐘同步置高一次電平,表示同步。TXD和RXD上的資料和控制資訊,以10bit為一組。傳送部分波形如下:

從波形可以看出,SYNC變高後的10個時鐘週期內,TXD依次輸出一組10bit的資料即TX_ER,TX_EN,TXD[0:7],這些控制資訊和MII介面含義相同。在100M速率中,每一組的內容都是變換的,在10M速率中,每一組資料需要重複10次,取樣任一一組都可以。


GMII

GMII(Gigabit Media Independant Interface),千兆MII介面。GMII採用8位介面資料,工作時鐘125MHz,因此傳輸速率可達1000Mbps。同時相容MII所規定的10/100 Mbps工作方式。GMII介面資料結構符合IEEE乙太網標準,該介面定義見IEEE 802.3-2000。訊號定義如下:

訊號名稱描述方向
GTX_CLK 1000M傳送時鐘 MAC → PHY
TX_CLK 100/10M傳送時鐘 MAC → PHY
TX_ER 傳送資料錯誤 MAC → PHY
TX_EN 傳送使能 MAC → PHY
TX_[7:0] 傳送資料8bit MAC → PHY
RX_CLK 接收時鐘 PHY → MAC
RX_DV 接收資料有效 PHY → MAC
RX_ER 接收資料錯誤 PHY → MAC
RX_[7:0] 接收資料8bit PHY → MAC
CRS 載波監測 PHY → MAC
COL 衝突碰撞監測 PHY → MAC
MDIO 管理資料 雙向
MDC 管理資料時鐘 MAC → PHY

RGMII

RGMII(Reduced Gigabit Media Independant Interface),精簡GMII介面。相對於GMII相比,RGMII具有如下特徵:

  • 傳送/接收資料線由8條改為4條
  • TX_ER和TX_EN複用,通過TX_CTL傳送
  • RX_ER與RX_DV複用,通過RX_CTL傳送
  • 1 Gbit/s速率下,時鐘頻率為125MHz
  • 100 Mbit/s速率下,時鐘頻率為25MHz
  • 10 Mbit/s速率下,時鐘頻率為2.5MHz

訊號定義如下:

訊號名稱描述方向
TXC 傳送時鐘 MAC→PHY
TX_CTL 傳送資料控制 MAC → PHY
TXD[3:0] 傳送資料4bit MAC → PHY
RXC 接收時鐘 PHY → MAC
RX_CTL 接收資料控制 PHY → MAC
RXD[3:0] 接收資料4bit PHY → MAC
MDIO 管理資料 雙向
MDC 管理資料時鐘 MAC → PHY

雖然RGMII訊號線減半,但TXC/RXC時鐘仍為125Mhz,為了達到1000Mbit的傳輸速率,TXD/RXD訊號線在時鐘上升沿傳送接收GMII介面中的TXD[3:0]/RXD[3:0],在時鐘下降沿傳送接收TXD[7:4]/RXD[7:4],並且訊號TX_CTL反應了TX_EN和TX_ER狀態,即在TXC上升沿傳送TX_EN,下降沿傳送TX_ER,同樣的道理試用於RX_CTL,下圖為傳送接收的時序:


結構

  從硬體的角度看,乙太網介面電路主要由MAC(Media Access Control)控制器和物理層介面PHY(Physical Layer,PHY)兩大部分構成。如下圖所示

  但是,在實際的設計中,以上三部分並不一定獨立分開的。 由於,PHY整合了大量模擬硬體,而MAC是典型的全數字器件。考慮到芯片面積及模擬/數字混合架構的原因,通常,將MAC整合進微控制器而將PHY留在片外。更靈活、密度更高的晶片技術已經可以實現MAC和PHY的單晶片整合。可分為下列幾種型別:

  • CPU整合MAC與PHY。目前來說並不多見
  • CPU整合MAC,PHY採用獨立晶片。比較常見
  • CPU不整合MAC與PHY,MAC與PHY採用整合晶片。比較常見

  MAC及PHY工作在OSI七層模型的資料鏈路層和物理層。具體如下

  IEEE802.3標準文件下載地址:https://ieeexplore.ieee.org/browse/standards/get-program/page/。它分為很多個section。

標準文件賊長,沒有全部看過,大概第一部分是10Mb/s乙太網(其中有關於MAC的規範),第二部分是100BASE-T 100Mb/s基帶網路介紹,第三部分是1000 Mb/s基帶網路介紹,第四部分是10 Gb/s基帶網路介紹。但是,並不是說每部分都是獨立的

什麼是MAC

  MAC(Media Access Control)即媒體訪問控制子層協議。該部分有兩個概念:MAC可以是一個硬體控制器 及 MAC通訊以協議。該協議位於OSI七層協議中資料鏈路層的下半部分,主要負責控制與連線物理層的物理介質。MAC硬體大約就是下面的樣子了:

  在傳送資料的時候,MAC協議可以事先判斷是否可以傳送資料,如果可以傳送將給資料加上一些控制資訊,最終將資料以及控制資訊以規定的格式傳送到物理層;在接收資料的時候,MAC協議首先判斷輸入的資訊並是否發生傳輸錯誤,如果沒有錯誤,則去掉控制資訊傳送至LLC(邏輯鏈路控制)層。該層協議是乙太網MAC由IEEE-802. 3乙太網標準定義。最新的MAC同時支援 10Mbps和100Mbps兩種速率。
  乙太網資料鏈路層其實包含MAC(介質訪問控制)子層和LLC(邏輯鏈路控制)子層。一塊乙太網卡MAC晶片的作用不但要實現MAC子層和LLC子層的功能,還要提供符合規範的PCI介面以實現和主機的資料交換。
  MAC從PCI匯流排收到IP資料包(或者其他網路層協議的資料包)後,將之拆分並重新打包成最大1518Byte、最小64Byte的幀。這個幀裡面包括了目標MAC地址、自己的源MAC地址和資料包裡面的協議型別(比如IP資料包的型別用80表示,最後還有一個DWORD(4Byte)的CRC碼。
  可是目標的MAC地址是哪裡來的呢?這牽扯到一個ARP協議(介乎於網路層和資料鏈路層的一個協議)。第一次傳送某個目的IP地址的資料的時候,先會發出一個ARP包,其MAC的目標地址是廣播地址,裡面說到:“誰是xxx.xxx.xxx.xxx這個IP地址的主人?”因為是廣播包,所有這個區域網的主機都收到了這個ARP請求。收到請求的主機將這個IP地址和自己的相比較,如果不相同就不予理會,如果相同就發出ARP響應包。這個IP地址的主機收到這個ARP請求包後回覆的ARP響應裡說到:“我是這個IP地址的主人”。這個包裡面就包括了他的MAC地址。以後的給這個IP地址的幀的目標MAC地址就被確定了。(其它的協議如IPX/SPX也有相應的協議完成這些操作)
  IP地址和MAC地址之間的關聯關係儲存在主機系統裡面,叫做ARP表。由驅動程式和作業系統完成。在Microsoft的系統裡面可以用arp-a 的命令檢視ARP表。收到資料幀的時候也是一樣,做完CRC校驗以後,如果沒有CRC效驗錯誤,就把幀頭去掉,把資料包拿出來通過標準的介面傳遞給驅動和上層的協議棧。最終正確的達到我們的應用程式。

什麼是MII

  MII(Media Independent Interface)即媒體獨立介面,MII介面是MAC與PHY連線的標準介面。它是IEEE-802.3定義的乙太網行業標準。MII介面提供了MAC與PHY之間、PHY與STA(Station Management)之間的互聯技術,該介面支援10Mb/s與100Mb/s的資料傳輸速率,資料傳輸的位寬為4位。"媒體獨立"表明在不對MAC硬體重新設計或替換的情況下,任何型別的PHY裝置都可以正常工作。802.3協議最多支援32個PHY,但有一定的限制:要符合協議要求的connector特性。MII介面如下圖所示:

  提到MII,就有可能涉及到RS,PLS,STA等名詞術語,下面講一下他們之間對應的關係。
  所謂RS即Reconciliation sublayer,它的主要功能主要是提供一種MII和MAC/PLS之間的訊號對映機制。它們(RS與MII)之間的關係如下圖:

MII的Management Interface是與STA(Station Management)相連的。

關於本節,具體可參考IEEE乙太網標準802.3的22.3 Signal timing characteristics節,其中包含時鐘訊號等更詳細內容。

MII介面主要包括四個部分。一是從MAC層到PHY層的傳送資料介面,二是從PHY層到MAC層的接收資料介面,三是從PHY層到MAC層的狀態指示訊號,四是MAC層和PHY層之間傳送控制和狀態資訊的MDIO介面。

MII包括一個數據介面,以及一個MAC和PHY之間的管理介面:

  • 資料介面:包括分別用於傳送器和接收器的兩條獨立通道。每條通道都有自己的資料、時鐘和控制訊號。MII資料介面總共需要16個訊號,包括
  • TX_ER(transmit coding error):TX_ER同步於TX_CLK,在資料傳輸過程中,如果TX_ER有效超過一個時鐘週期,並且此時TX_EN是有效的,則資料通道中傳輸的資料是無效的,沒用的。注:當TX_ER有效並不影響工作在10Mb/s的PHY或者TX_EN無效時的資料傳輸。在MII介面的連線中,如果TX_ER訊號線沒有用到,必須將它下拉接地。
  • TXD<3:0>(transmit data):TXD由RS驅動,同步於TX_CLK,在TX_CLK的時鐘週期內,並且TX_EN有效,TXD上的資料被PHY接收,否則TXD的資料對PHY沒有任何影響。
  • TX_EN:傳送使能。TX_EN由Reconciliation子層根據TX_CLK上升沿同步進行轉換,時序如圖22-16所示。
  • TX_CLK(transmit clock):TX_CLK (Transmit Clock)是一個連續的時鐘訊號(即系統啟動,該訊號就一直存在),它是TX_EN, TXD, and TX_ER(訊號方向為從RS到PHY)的參考時鐘,TX_CLK由PHY驅動TX_CLK的時鐘頻率是資料傳輸速率的25%,偏差±100ppm。例如,100Mb/s模式下,TX_CLK時鐘頻率為25MHz,佔空比在35%至65%之間。
  • COL(collision detected):COL不需要同步於參考時鐘。The behavior of the COL signal is unspecified when the duplex mode bit0.8 inthe control register is set to a logic one(自動協商禁止,人工設為全雙工模式), or when the Auto-Negotiation process selects a full duplex mode of operation。即半雙工模式訊號有效,全雙工模式訊號無效。
  • RXD<3:0>(receive data):RXD由RS驅動,同步於RX_CLK,在RX_CLK的時鐘週期內,並且RX_DV有效,RXD上的資料被RS接收,否則RXD的資料對RS沒有任何影響。While RX_DV is de-asserted, the PHY may provide a False Carrier indication by asserting the RX_ER signal while driving the value <1110> onto RXD<3:0>。
  • RX_ER(receive error):RX_ER同步於RX_CLK,其在RX通道中的作用類似於TX_ER對於TX通道資料傳輸的影響。
  • RX_CLK:它與TX_CLK具有相同的要求,所不同的是它是RX_DV, RXD, and RX_ER(訊號方向是從PHY到RS)的參考時鐘。RX_CLK同樣是由PHY驅動,PHY可能從接收到的資料中提取時鐘RX_CLK,也有可能從一個名義上的參考時鐘(e.g., the TX_CLK reference)來驅動RX_CLK。
  • CRS(carrier sense):CRS不需要同步於參考時鐘,只要通道存在傳送或者接收過程,CRS就需要有效。The behavior of the CRS signal is unspecified when the duplex mode bit0.8 inthe control register is set to a logic one(自動協商禁止,人工設為全雙工模式), or when the Auto-Negotiation process selects a full duplex mode of operation,即半雙工模式訊號有效,全雙工模式訊號無效。
  • RX_DV(Receive Data Valid):RXD_DV同步於RX_CLK,被PHY驅動,它的作用如同於傳送通道中的TX_EN,不同的是在時序上稍有一點差別:為了讓資料能夠成功被RS接收,要求RXD_DV有效的時間必須覆蓋整個FRAME的過程,即starting no later than the Start Frame Delimiter (SFD) and excluding any End-of-Frame delimiter。
    MII以4位半位元組方式傳送資料雙向傳輸,時鐘速率25MHz。其工作速率可達100Mb/s。
  • MII管理介面:是個雙訊號介面,通過管理介面,MAC就能監視和控制PHY。其管理是使用SMI(Serial Management Interface) 匯流排通過讀寫PHY的暫存器來完成的。一個是時鐘訊號(***MDC (management data clock)***)。另一個是資料訊號(***MDIO (management data input/output)***)。
  • MDC:由站管理實體向PHY提供,作為在MDIO訊號上傳送資訊的定時參考。 MDC是一種非週期性的訊號,沒有最高或最低時間。 無論TX_CLK和RX_CLK的標稱週期如何,MDC的最小高低時間應為160 ns,MDC的最小週期為400 ns。
  • MDIO:是PHY和STA之間的雙向訊號。 它用於在PHY和STA之間傳輸控制資訊和狀態。 控制資訊由STA同步地針對MDC驅動並且由PHY同步地取樣。 狀態資訊由PHY針對MDC同步驅動並由STA同步取樣。

  PHY 裡面的部分暫存器是IEEE定義的,這樣PHY把自己的目前的狀態反映到暫存器裡面,MAC 通過SMI 匯流排不斷的讀取PHY 的狀態暫存器以得知目前PHY 的狀態。例如連線速度、雙工的能力等。當然也可以通過SMI設定PHY的暫存器達到控制的目的。例如流控的開啟關閉、自協商模式還是強制模式等。不論是物理連線的MII匯流排和SMI匯流排還是PHY的狀態暫存器和控制暫存器都是由IEEE的規範的。因此不同公司的MAC和PHY一樣可以協調工作。當然為了配合不同公司的PHY的自己特有的一些功能,驅動需要做相應的修改。
  MII支援10Mbps和100Mbps的操作,一個介面由14根線組成,它的支援還是比較靈活的。但是有一個缺點是因為它一個埠用的訊號線太多,如果一個8埠的交換機要用到112根線,16埠就要用到224根線,到32埠的話就要用到448根線。一般按照這個介面做交換機是不太現實的。所以現代的交換機的製作都會用到其它的一些從MII簡化出來的標準,比如RMII、SMII、GMII等。

RMII(Reduced Media Independant Interface)

  簡化媒體獨立介面是標準的乙太網介面之一,比MII有更少的I/O傳輸。RMII口是用兩根線來傳輸資料的,MII口是用4根線來傳輸資料的,GMII是用8根線來傳輸資料的。MII/RMII只是一種介面,對於10Mbps線速,MII的時鐘速率是2.5MHz就可以了,RMII則需要5MHz;對於100Mbps線速,MII需要的時鐘速率是25MHz,RMII則是50MHz。
  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表示資料的優先順序!

GMII(Gigabit MII)

  GMII是千兆網的MII介面,這個也有相應的RGMII介面,表示簡化了的GMII介面。
  GMII採用8位介面資料,工作時鐘125MHz,因此傳輸速率可達1000Mbps。同時相容MII所規定的10/100 Mbps工作方式。GMII介面資料結構符合IEEE乙太網標準,該介面定義見IEEE 802.3-2000。

  • 傳送器:在千兆速率下,向PHY提供GTXCLK訊號、TXD、TXEN、TXER訊號與此時鐘訊號同步。否則在10/100Mbps速率下,PHY提供TXCLK時鐘訊號,其它訊號與此訊號同步。其工作頻率為25MHz(100M網路)或2.5MHz(10M網路)。
  • GTXCLK——吉位元TX…訊號的時鐘訊號(125MHz)
  • TXCLK——10/100Mbps訊號時鐘
  • TXD[7…0]——被髮送資料
  • TXEN——傳送器使能訊號
  • TXER——傳送器錯誤(用於破壞一個數據包)
  • 接收器:
  • RXCLK——接收時鐘訊號(從收到的資料中提取,因此與GTXCLK無關聯)
  • RXD[7…0]——接收資料
  • RXDV——接收資料有效指示
  • RXER——接收資料出錯指示
  • COL——衝突檢測(僅用於半雙工狀態)
  • 管理配置:管理配置介面控制PHY的特性。該介面有32個暫存器地址,每個地址16位。其中前16個已經在“IEEE 802.3,2000-22.2.4 Management Functions”中規定了用途,其餘的則由各器件自己指定。
  • MDC——配置介面時鐘
  • MDIO——配置介面I/O

什麼是PHY

  PHY((Physical Layer,PHY))是IEEE802.3中定義的一個標準模組,STA(station management entity,管理實體,一般為MAC或CPU)通過SMI(Serial Manage Interface)對PHY的行為、狀態進行管理和控制,而具體管理和控制動作是通過讀寫PHY內部的暫存器實現的。一個PHY的基本結構如下圖:

  PHY是物理介面收發器,它實現OSI模型的物理層。IEEE-802.3標準定義了乙太網PHY。包括MII/GMII(介質獨立介面)子層、PCS(物理編碼子層)、PMA(物理介質附加)子層、PMD(物理介質相關)子層、MDI子層。它符合IEEE-802.3k中用於10BaseT(第14條)和100BaseTX(第24條和第25條)的規範。

PHY暫存器在IEEE802.3標準的22.2.4 Management functions節有介紹,但不涉及所有的暫存器,個別暫存器需要到其它章節中看,當然,文件裡面也提到該在哪裡找到哪個暫存器。

PHY暫存器

  PHY暫存器的地址空間為5位,從0到31最多可以定義32個暫存器(隨著晶片功能不斷增加,很多PHY晶片採用分頁技術來擴充套件地址空間以定義更多的暫存器),IEEE802.3定義了地址為0-15這16個暫存器的功能,地址16-31的暫存器留給晶片製造商自由定義,如下表所示。

(1)官方介紹請參考IEEE802.3標準的22.2.4 Management functions節。
(2)上圖的B和E表示了,在特定介面下,暫存器是基本的還是擴充套件的。例如:MII介面下只有0和1暫存器是基本的,其它的是擴充套件的。注意:所為擴充套件是指留給IEEE以後的擴充套件特性用,不是給PHY廠商的擴充套件,PHY廠商自定義的只能是16~31號暫存器
(3)在IEEE標準文件及某些PHY手冊中,某暫存器的位元(bit)用X.y表示,如0.15表示第0暫存器的第15位。

Control Register (Register 0)

  暫存器0是PHY控制暫存器,通過Control Register可以對PHY的主要工作狀態進行設定。應該保證控制暫存器每個位的預設值,以便在沒有管理干預的情況下,上電或復位時PHY的初始狀態為正常操作狀態。Control Register的每一位完成的功能見下。

  • Reset:通過將位0.15設定為邏輯1來完成復位PHY。 該操作應將狀態和控制暫存器設定為其預設狀態。 因此,此操作可能會改變PHY的內部狀態以及與PHY關聯的物理鏈路的狀態。復位過程中Bit15保持為1,復位完成之後該位應該自動清零。在復位過程完成之前,PHY不需要接受對控制暫存器的寫入操作,並且在復位過程完成之前寫入0.15以外的控制暫存器位可能不起作用。 復位過程應在0.15位設定的0.5 s內完成。

(1)一般要改變埠的工作模式(如速率、雙工、流控或協商資訊等)時,在設定完相應位置的暫存器之後,需要通過Reset位復位PHY來使配置生效。
(2)該位元位的預設值為 0。

  • Loopback:當位0.14被設定為邏輯1時,PHY應置於環回操作模式。 當位0.14置位時,PHY接收電路應與網路介質隔離,並且MII或GMII處的TX_EN斷言不應導致網路介質上的資料傳輸。 當位0.14置位時,PHY應接受來自MII或GMII傳送資料路徑的資料,並將其返回給MII或GMII接收資料路徑,以響應TX_EN的斷言。 當位0.14置位時,從斷言TX_EN到斷言RX_DV的延遲應小於512 BT。 當位0.14置位時,除非設定了位0.7,否則COL訊號應始終保持無效,在這種情況下,COL訊號的行為應如22.2.4.1.9所述。 清0.14位為零允許正常操作。
      Loopback是一個除錯以及故障診斷中常用的功能,Bit14置1之後,PHY和外部MDI的連線在邏輯上將被斷開,從MAC經過MII/GMII(也可能是其他的MAC/PHY介面)傳送過來的資料將不會被髮送到MDI上,而是在PHY內部(一般在PCS)迴環到本埠的MII/GMII接收通道上,通過Loopback功能可以檢查MII/GMII以及PHY介面部分是否工作正常,對於埠不通的情況可用於故障定位。

(1)需要注意的是,很多時候PHY設定Loopback後端口可能就Link down了,MAC無法向該埠發幀,這時就需要通過設定埠Force Link up才能使用Loopback功能。
(2)該位元位的預設值為 0。

  • Speed Selection:***Bit13和Bit6兩位聯合實現***對埠的速率控制功能。連結速度可以通過自動協商過程或手動速度選擇來選擇。 通過將位0.12清零來禁用自動協商時,允許手動速度選擇。
  • 當禁用自動協商並將位0.6清除為邏輯0時,將位0.13設定為邏輯1將PHY配置為100 Mb / s操作,並將位0.13清除為邏輯0將PHY配置為10 Mb / s操作 。
  • 當禁用自動協商並將位0.6設定為邏輯1時,將位0.13清零為邏輯0會選擇1000 Mb / s的操作。 將位0.6和0.13設定為邏輯1的組合保留用於未來的標準化。
  • 當使能自動協商時,可以讀取或寫入位0.6和0.13,但位0.6和位0.13的狀態對鏈路配置沒有影響,位0.6和位0.13不需要反映當它被讀取時連結。

  如果PHY通過位元1.15:9和位元15.15:12報告它不能工作在所有速度時,則位元0.6和0.13的值應該與PHY可以操作的速度相對應。並且任何試圖將該位設定為無效的操作均將被忽略。

(1)對Speed Selection的修改設定,往往需要復位端口才能配置生效。因此在設定該位置的時候需要檢查自動協商的設定並通過Bit15復位埠。
(2)位0.6和0.13的預設值是根據位1.15:9和15.15:12所指示的PHY可以操作的***最高資料速率***的編碼組合。

  • Auto-Negotiation Enable:自動協商過程應通過將位0.12設定為邏輯1來啟用。 如果位0.12設定為邏輯1,則位0.13、0.8和0.6不應對鏈路配置和除了自動協商協議規定之外的站操作產生影響。 如果將位0.12清零為邏輯0,則無論鏈路配置和自動協商過程的先前狀態如何,位0.13、0.8和0.6都將確定鏈路配置。
      如果PHY通過位1.3報告它缺乏執行自動協商的能力,則PHY應在位0.12返回零值。 如果PHY通過位1.3報告它缺乏執行自動協商的能力,則位0.12應該始終寫為0,並且任何嘗試將1寫入位0.12都應該被忽略。

必須注意的是,對於1000BASE-T介面,自動協商必須開啟。

  • Power Down:通過將位0.11設定為邏輯1,可以將PHY置於低功耗狀態。 清0.11位為零允許正常操作。 PHY在掉電狀態下的具體行為是特定實現的。 處於掉電狀態時,PHY應響應管理事務。 在轉換到掉電狀態期間和處於掉電狀態期間,PHY不應在MII或GMII上產生寄生訊號。
      當位0.11或位0.10被設定為邏輯1時,PHY不需要滿足RX_CLK和TX_CLK訊號功能要求。 在位0.11和0.10清零後,PHY應在0.5 s內滿足22.2.2中定義的RX_CLK和TX_CLK訊號功能要求。

(1)Power Down模式一般在軟體shut down埠的時候使用,需要注意的是埠從Power Down模式恢復,需要復位埠以保證埠可靠的連線。
(2)該位的預設值為 0。

  • Isolate:通過將位0.10設定為邏輯1,PHY可能被迫將其資料路徑與MII或GMII電隔離。 清零位0.10允許正常操作。 當PHY與MII或GMII隔離時,它不會響應TXD資料包和TX_EN,TX_ER、GTX_CLK的輸入。並且它的TX_CLK,RX_CLK,RX_DV,RX_ER,RXD資料包、COL和CRS輸出均應為高阻態。 當PHY與MII或GMII隔離時,它將響應管理事務(MDC/MDIO介面的訊號)。

(1)IEEE802.3沒有對Isolate 時MDI介面的狀態進行規範,此時MDI端可能還在正常執行。Isolate在實際應用中並沒有用到。
(2)由於目前很多百兆的PHY晶片其MAC介面主流的都是SMII/S3MII,8個埠的介面是相互關聯的,一個埠設定Isolate可能會影響其他埠的正常使用,因此在使用中注意不要隨意更改bit10的狀態。

  • Restart Auto-Negotiation:如果PHY通過位1.3報告它缺乏執行自動協商的能力,或者如果自動協商被禁用,則PHY應在位0.9返回零值。 如果PHY通過位1.3報告它缺乏執行自動協商的能力,或者如果禁用了自動協商,則應將位0.9始終寫為0,並且任何嘗試將1寫入位0.9應被忽略。
      Bit9置1將重新啟動埠的自動協商程序,當然前提是Auto-Negotiation Enable是使能的。

一般在修改埠的自動協商能力資訊之後通過Bit9置1重新啟動自動協商來使埠按照新的配置建立link。

  • Duplex Mode:可以通過自動協商過程或手動雙面選擇來選擇雙工模式。 通過將位0.12清零來禁用自動協商時,允許手動雙面選擇。
  • 當禁用自動協商時,將位0.8設定為邏輯1將PHY配置為全雙工操作,並將位0.8清零以將邏輯0配置為用於半雙工操作的PHY。
  • 當啟用自動協商時,可以讀取或寫入位0.8,但位0.8的狀態對鏈路配置沒有影響。

  如果PHY通過位1.15:9和15.15:12報告它只能在一個雙工模式下工作,則位0.8的值應該與PHY可以工作的模式相對應,並且任何嘗試改變將該位0.8修改為無效指的操作應被忽略。

對Duplex Mode的修改配置也需要復位端口才能生效。

  • Collision Test:衝突訊號(COL)測試開關。在需要對COL訊號進行測試時,可以通過Bit7置1,這時PHY將輸出一個COL脈衝以供測試。實際測試操作中也可以將埠配置為半雙工狀態,通過發幀衝突來測試COL訊號,因此該配置實用價值不大。
  • Unidirectional enable:如果PHY通過位元1.7報告它不具備編碼和傳輸來自媒體獨立介面的資料的能力,而不管PHY是否確定已建立有效鏈路,則PHY應在位元0.5中返回零值,並且 任何嘗試寫一個到位0.5應該被忽略。

Status register

  暫存器1是PHY狀態暫存器,主要包含PHY的狀態資訊,大多數bit的值都是由晶片廠家確定的,每一個bit的功能在表3種已有詳細說明。

暫存器中各位的詳細說明如下:

  • 100BASE-T4 ability:當讀為邏輯1時,位1.15指示PHY有能力使用100BASE-T4信令規範執行鏈路傳送和接收。 當讀為邏輯0時,位1.15表示PHY缺乏使用100BASE-T4信令規範執行鏈路傳送和接收的能力。
  • 100BASE-X full duplex ability:當讀為邏輯1時,位1.14指示PHY有能力使用100BASE-X信令規範執行全雙工鏈路傳輸和接收。 當作為邏輯0讀取時,bit1.14表示PHY缺乏使用100BASE-X信令規範執行全雙工鏈路傳輸和接收的能力。
  • 100BASE-X half duplex ability:當讀為邏輯1時,位1.13指示PHY有能力使用100BASE-X信令規範執行半雙工鏈路傳輸和接收。 當讀為邏輯0時,位1.13指示PHY缺乏使用100BASE-X信令規範執行半雙工鏈路傳輸和接收的能力。
  • 其他同類型的值意義基本與上面幾個相同:指示PHY所具有的工作模式能力,不再一一說明。
  • Unidirectional ability:當讀為邏輯1時,位1.7指示PHY具有編碼和傳輸來自媒體獨立介面的資料的能力,而不管PHY是否確定已建立有效鏈路。 當讀為邏輯0時,位1.7指示PHY只有在PHY確定已建立有效鏈路時才能從媒體獨立介面傳輸資料。
  • MF preamble suppression ability:當讀為邏輯1時,位1.6指示PHY能夠接受管理幀,而不管它們是否在22.2.4.5.2中描述的前導碼模式之前。 當讀為邏輯0時,位1.6指示PHY不能接受管理幀,除非它們之前是22.2.4.5.2中描述的前導碼模式。
  • Auto-Negotiation Complete:當讀為邏輯1時,位1.5指示自動協商過程已完成,並且由自動協商協議(條款28或條款37)實施的擴充套件暫存器的內容是有效的。 當讀為邏輯0時,位1.5指示自動協商過程尚未完成,並且擴充套件暫存器的內容由自動協商協議的當前狀態定義,或者為手動配置寫入。 如果自動協商通過清除位0.12禁用,則PHY應在位1.5返回零值。 如果PHY缺乏執行自動協商的能力,它還應在位1.5返回零值。

在除錯以及異常故障處理時,可以通過該位暫存器的狀態判斷AN是否成功,從而進一步的檢查AN相關的設定是否正確,或者晶片的AN功能是否正常等。

  • Remote Fault:當讀為邏輯1時,位1.4表示檢測到遠端故障狀態。 故障型別以及故障檢測的標準和方法是PHY特定的。 遠端故障位必須使用鎖存功能來實現,以便發生遠端故障將導致遠端故障位置位,並保持置位狀態直至被​​清除。 每當通過管理介面讀取暫存器1時,遠端故障位應清零,並且還應通過PHY復位清零。
      遠端錯誤指示位。Bit4=1代表連線對端(Link Partner)出錯,至於出錯的具體型別以及錯誤檢測機制在規範中並沒有定義,由PHY的製造商自由發揮,一般的廠商都會在其他的暫存器(Register16-31由廠商自行定義)指示比較詳細的錯誤型別。在與埠相關的故障查證中,Remote Fault是一個重要的指示資訊,通過互聯雙方的Remote Fault資訊(可能要加上其他的具體錯誤指示),可以幫助定位故障原因。
  • Auto-Negotiation ability:當讀為邏輯1時,位1.3指示PHY有能力執行自動協商。 當讀為邏輯0時,位1.3指示PHY缺乏執行自動協商的能力。
  • Link Status:當讀為邏輯1時,位1.2指示PHY已經確定已建立有效鏈路。 當作為邏輯0讀取時,位1.2指示該連結無效。 確定鏈路有效性的標準是PHY特定的。 鏈路狀態位應該使用鎖存功能來實現,以便發生鏈路故障情況將導致鏈路狀態位清零並保持清零,直到通過管理介面讀取。 此狀態指示旨在支援在30.5.1.1.4,aMediaAvailable中定義的管理屬性。
      實際應用中一般都是通過Bit2來判斷埠的狀態。而且,一般的MAC晶片也是通過輪詢PHY的這個暫存器值來判斷埠的Link狀態的(這個過程可能有不同的名稱,比如BCM叫做Link Scan,而Marvell叫做PHY Polling。)如前所述,在AN Enable的情況下,Link Status的資訊只有在Auto-Negotiation Complete指示已經完成的情況下才是正確可靠的,否則有可能出錯。
  • Jabber Detect:當作為邏輯1讀取時,位1.1指示已經檢測到爆音條件。 此狀態指示旨在支援30.5.1.1.6中定義的管理屬性,aJabber和30.5.1.3.1 nJabber中定義的MAU通知。 檢測Jabber條件的標準是PHY特定的。 Jabber檢測位應該使用鎖存功能來實現,以便發生Jabber條件將導致Jabber檢測位置位,並保持置位狀態直至被​​清除。 每次通過管理介面讀取暫存器1時,Jabber檢測位應清零,並且還應通過PHY復位清零。
      IEEE802.3對Jabber的解釋是“A condition wherein a station transmits for a period of time longer than the maximum permissible packet length, usually due to a fault condition”。這一位指示的是Link Partner傳送的時間超過了規定的最大長度。值得注意的是,Jabber Detect只有在10BASE-T模式下才有意義,100和1000M模式是沒有定義Jabber這一功能的。

PHY Identifier Register

  暫存器2和3存放PHY晶片的型號程式碼,暫存器2(PHY ID1)為高16位,而暫存器3(PHY ID2)為低16位。由晶片製造商自行定義,實際應用中軟體通過讀取這兩個暫存器的內容可以識別PHY的型號和版本。
  PHY識別符號應由由IEEE分配給PHY製造商的組織唯一識別符號(OUI)的(只需要使用第3至第24位,共22位),加上6位製造商的型號以及4位製造商的修訂版編號組成。 PHY識別符號旨在提供足夠的資訊來支援30.1.2中所要求的oResourceTypeID物件。
  OUI的第三位分配給位2.15,OUI的第四位分配給位2.14,依此類推。 位2.0包含OUI的第十八位。 位3.15包含OUI的第十九位,位3.10包含OUI的第二十四位。 位3.9包含製造商型號的MSB。 位3.4包含製造商型號的LSB。 位3.3包含製造商版本號的MSB,位3.0包含製造商版本號的LSB。具體如下圖所示:

Auto-Negotiation Advertisement Register (Register 4) (R/W)

  暫存器4是自動協商的能力通告暫存器,在AN Enable的前提下(見暫存器0),埠根據該暫存器的相關配置將自動協商資訊通過FLP在MDI上進行通告。當AN配置為Disable狀態的時候,暫存器4的配置將不起作用,埠的工作模式由控制暫存器中的配置決定。
  該暫存器包含PHY的通告能力,它們將在自動協商期間傳送給其連結夥伴。 基本頁的位定義在IEEE標準的28.2.1.2中定義。 上電時,在自動協商開始之前,該暫存器應具有以下預設配置:

  • Selector Field (4.4:0):被設定為適當的程式碼,如IEEE標準的附件28A中所規定。
  • Reserved(4.14):被設定為邏輯0。
  • Technology Ability Field(4.11:5):根據MII狀態暫存器(暫存器1)(1.15:11)中設定的值或等效值設定。 另見28.2.1.2.3和附件28D。

Link codeword encoding(基本鏈路碼字)

  在FLP Burst內傳輸的基本鏈路程式碼字(基本頁面)應該傳達如圖28-7所示的編碼。 自動協商功能可以使用下一頁功能支援其他頁面。 下一頁交換中使用的連結程式碼字的編碼在28.2.3.4中定義。 在FLP Burst中,D0應該是第一個傳輸的位。

Next Page function

  下一頁功能使用標準的自動協商仲裁機制來允許交換任意的資料。 資料由可選的下一頁資訊攜帶,其遵循用於基本連結碼字的傳輸和確認過程。 定義了四種類型的下一頁編碼:訊息頁面,未格式化頁面,擴充套件訊息頁面和擴充套件的未格式化頁面。
  關於該部分,具體見IEEE標準的28.2.3.4 Next Page function。
  在IEEE標準中,Auto-Negotiation Advertisement Register中的各部分全部是在獨立章節中進行介紹的。具體如下:

  • Selector Field:選擇器欄位(S [4:0])是一個5位寬的欄位,編碼32個可能的訊息。 鏈路碼字中的選擇器欄位S [4:0]應用於識別自動協商傳送的訊息的型別。 下表列出了可能傳送的訊息的型別。 隨著新訊息的發展,該表格將相應更新。

    未指定的組合保留供將來使用。 不會傳輸選擇器欄位的預留組合。***我們所接觸的乙太網PHY遵從IEEE802.3規範,Selector Field=0001,該區域不可隨意更改(很多PHY將此區域設計為只讀暫存器,以免被修改)***。
  • Technology Ability Field:技術能力欄位(A [6:0])是一個7位寬的欄位,其中包含指示選擇器欄位值特定的支援技術的資訊。 這些位被對映到各個技術,以便能夠針對單個選擇器欄位值並行通告能力。 附錄28B.2和附件28D描述了IEEE 802.3選擇器的技術能力欄位編碼。 連結程式碼字中可能會公佈多種技術。 裝置應支援其宣傳的技術的資料服務能力。
  • Extended Next Page:擴充套件下一頁(XNP)被編碼在基本鏈路碼字的位D12中。 擴充套件下一頁位指示本地裝置在設定為邏輯1時支援擴充套件下一頁的傳輸,並指示本地裝置在設定為邏輯0時不支援擴充套件下一頁。 Extended Next Page的使用與協商的資料速率,媒體或連結技術是正交的。 擴充套件下一頁位按照28.2.3.4中的擴充套件下一頁功能規範使用。
  • Next Page:無論選擇器欄位值還是連結碼字編碼,下一頁(NP)都在D15位編碼。 支援附加連結碼字編碼的傳輸和接收是可選的。 如果不支援Next Page功能,NP位應始終設定為邏輯0。 如果裝置實現下一頁功能並希望進行下一頁交換,則應將NP位設定為邏輯1。 裝置可以實現下一頁功能,並通過將NP位設定為邏輯0來選擇不參與下一頁交換。 下一頁功能在28.2.3.4中定義。
  • Remote Fault:遠端故障(RF)編碼在基本鏈路碼字的位D13中。 預設值是邏輯零。 遠端故障位為傳輸簡單的故障資訊提供了一種標準的傳輸機制。 當自動協商通告暫存器(暫存器4)中的RF位設定為邏輯1時,傳送的基本鏈路碼字中的RF位被設定為邏輯1。 當接收到的基本鏈路程式碼字中的RF位被設定為邏輯1時,如果存在MII管理功能,則MII狀態暫存器(暫存器1)中的遠端故障位將被設定為邏輯1。

Auto-Negotiation Link Partner ability register (Register 5) (RO)

  暫存器5儲存的是本端PHY接收到的對端PHY所通告的埠能力,暫存器5的結構和暫存器4基本一致。

Auto-Negotiation Expansion Register (Register 6) (RO)

  暫存器6儲存了PHY自動協商過程的異常資訊。從這個寄存其中我們可以獲取到Link Partner子否支援自動協商以及自動協商下一頁有沒有收到的資訊。

Auto-Negotiation Next Page transmit register (Register 7) (R/W)

  自動協商下一頁傳送暫存器包含在支援下一頁功能時要傳送的下一頁連結碼字。 (見表28-6)內容在28.2.3.4中定義。 上電時,該暫存器應包含預設值2001H,該值表示訊息程式碼設定為Null訊息的訊息頁面。 該值可以由裝置希望傳輸的任何有效的下一頁訊息程式碼替換。 寫入該暫存器應將mr_next_page_loaded設定為true。

Auto-Negotiation Link Partner Received Next Page register (Register 8) (RO)

https://blog.csdn.net/sternlycore/article/details/89065789