1. 程式人生 > 其它 >Network 之二 Ethernet(乙太網)中的 MAC、MII、PHY 詳解

Network 之二 Ethernet(乙太網)中的 MAC、MII、PHY 詳解

結構

  從硬體的角度看,乙太網介面電路主要由 MAC(Media Access Control,MAC)控制器和物理層介面 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 可以指的是一個硬體控制器,也可以指 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 表。由驅動程式和作業系統完成。在 Windows 及 Linux 裡面可以用 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 上升沿同步進行轉換。
  • TX_CLK(transmit clock): TX_CLK (Transmit Clock) 是一個連續的時鐘訊號(即系統啟動,該訊號就一直存在),它是 TX_EN、TXD、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、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 訊號應始終保持無效。 清 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)

未完待續。。。

附件

參考文件

  • IEEE Standard for Ethernet
  • 網路