Network 之二 Ethernet(以太网)中的 MAC、MII、PHY 详解
結(jié)構(gòu)
??從硬件的角度看,以太網(wǎng)接口電路主要由 MAC(Media Access Control,MAC)控制器和物理層接口 PHY(Physical Layer,PHY)兩大部分構(gòu)成。如下圖所示:
??但是,在實際的設(shè)計中,以上三部分并不一定是獨立分開的。 由于,PHY 整合了大量模擬硬件,而 MAC 則是典型的全數(shù)字器件。考慮到芯片面積及模擬/數(shù)字混合架構(gòu)的原因,通常,將 MAC 集成進微控制器而將 PHY 留在片外。更靈活、密度更高的芯片技術(shù)已經(jīng)可以實現(xiàn) MAC 和 PHY 的單芯片整合。總的來說,可分為下列幾種類型:
- CPU 集成 MAC 與 PHY,目前來說并不多見。
- CPU 集成 MAC,PHY 采用獨立芯片,這種比較常見。
- CPU 不集成 MAC 與 PHY,MAC 與 PHY 采用集成芯片(形成一個獨立的網(wǎng)卡),這種也比較常見。
??MAC 及 PHY 工作在 OSI 七層模型的數(shù)據(jù)鏈路層和物理層。具體如下
??IEEE802.3 標準文檔下載地址:https://ieeexplore.ieee.org/browse/standards/get-program/page/。它分為很多個 section。標準文檔賊長,沒有全部看過,大概第一部分是 10Mb/s 以太網(wǎng)(其中有關(guān)于 MAC 的規(guī)范),第二部分是 100BASE-T 100Mb/s 基帶網(wǎng)絡(luò)介紹,第三部分是 1000 Mb/s 基帶網(wǎng)絡(luò)介紹,第四部分是 10 Gb/s 基帶網(wǎng)絡(luò)介紹。但是,并不是說每部分都是獨立的。
什么是 MAC
??MAC(Media Access Control,MAC)即媒體訪問控制。該部分有兩個概念:MAC 可以指的是一個硬件控制器,也可以指 MAC 通信協(xié)議。該協(xié)議位于 OSI 七層協(xié)議中數(shù)據(jù)鏈路層的下半部分,主要負責控制與連接物理層的物理介質(zhì)。MAC 硬件大約就是下面的樣子了:
??在發(fā)送數(shù)據(jù)的時候,MAC 協(xié)議可以事先判斷是否可以發(fā)送數(shù)據(jù),如果可以發(fā)送將給數(shù)據(jù)加上一些控制信息,最終將數(shù)據(jù)以及控制信息以規(guī)定的格式發(fā)送到物理層;在接收數(shù)據(jù)的時候,MAC 協(xié)議首先判斷輸入的信息并是否發(fā)生傳輸錯誤,如果沒有錯誤,則去掉控制信息發(fā)送至 LLC(邏輯鏈路控制)層。該層協(xié)議是以太網(wǎng) MAC,由 IEEE-802. 3 以太網(wǎng)標準定義。最新的 MAC 同時支持 10Mbps 和100Mbps 兩種速率。
??以太網(wǎng)數(shù)據(jù)鏈路層其實包含 MAC(介質(zhì)訪問控制)子層和 LLC(邏輯鏈路控制)子層。一塊以太網(wǎng)卡 MAC 芯片的作用不但要實現(xiàn) MAC 子層和 LLC 子層的功能,還要提供符合規(guī)范的 PCI 界面以實現(xiàn)和主機的數(shù)據(jù)交換。
??MAC 從 PCI 總線收到 IP 數(shù)據(jù)包或者其他網(wǎng)絡(luò)層協(xié)議的數(shù)據(jù)包后,將之拆分并重新打包成最大 1518Byte、最小 64Byte 的幀。這個幀里面包括了目標 MAC 地址、自己的源 MAC 地址和數(shù)據(jù)包里面的協(xié)議類型(比如IP數(shù)據(jù)包的類型用 80 表示),最后還有一個DWORD(4Byte)的 CRC 碼。
??可是目標的 MAC 地址是哪里來的呢?這牽扯到一個 ARP 協(xié)議(介乎于網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層的一個協(xié)議)。第一次傳送某個目的 IP 地址的數(shù)據(jù)的時候,先會發(fā)出一個 ARP 包,其 MAC 的目標地址是廣播地址,里面說到:“誰是 xxx.xxx.xxx.xxx 這個 IP 地址的主人?”因為是廣播包,所有這個局域網(wǎng)的主機都收到了這個 ARP 請求。收到請求的主機將這個 IP 地址和自己的相比較,如果不相同就不予理會,如果相同就發(fā)出 ARP 響應(yīng)包。這個 IP 地址的主機收到這個 ARP 請求包后回復(fù)的 ARP 響應(yīng)里說到:“我是這個 IP 地址的主人”。這個包里面就包括了他的 MAC 地址。以后的給這個IP地址的幀的目標 MAC 地址就被確定了。(其它的協(xié)議如 IPX/SPX 也有相應(yīng)的協(xié)議完成這些操作)
??IP 地址和 MAC 地址之間的關(guān)聯(lián)關(guān)系保存在主機系統(tǒng)里面,叫做 ARP 表。由驅(qū)動程序和操作系統(tǒng)完成。在 Windows 及 Linux 里面可以用 arp -a 的命令查看 ARP 表。
收到數(shù)據(jù)幀的時候也是一樣,做完 CRC 校驗以后,如果沒有 CRC 效驗錯誤,就把幀頭去掉,把數(shù)據(jù)包拿出來通過標準的接口傳遞給驅(qū)動和上層的協(xié)議棧。最終正確的達到我們的應(yīng)用程序。
什么是 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 的數(shù)據(jù)傳輸速率,數(shù)據(jù)傳輸?shù)奈粚挒?4 位。“媒體獨立” 表明在不對 MAC 硬件重新設(shè)計或替換的情況下,任何類型的 PHY 設(shè)備都可以正常工作。802.3 協(xié)議最多支持 32 個 PHY,但有一定的限制:要符合協(xié)議要求的 connector 特性。MII 接口如下圖所示:
??提到 MII,就有可能涉及到 RS,PLS,STA 等名詞術(shù)語,下面講一下他們之間對應(yīng)的關(guān)系。
??所謂 RS 即 Reconciliation sublayer,它的主要功能主要是提供一種 MII 和 MAC/PLS 之間的信號映射機制。它們(RS與MII)之間的關(guān)系如下圖:
MII 的 Management Interface 是與 STA(Station Management)相連的。
關(guān)于本節(jié),具體可參考 IEEE 以太網(wǎng)標準 802.3 的 22.3 Signal timing characteristics 節(jié),其中包含時鐘信號等更詳細內(nèi)容。
??MII 接口主要包括四個部分。一是從 MAC 層到 PHY 層的發(fā)送數(shù)據(jù)接口,二是從 PHY 層到 MAC 層的接收數(shù)據(jù)接口,三是從PHY 層到 MAC 層的狀態(tài)指示信號,四是 MAC 層和 PHY 層之間傳送控制和狀態(tài)信息的 MDIO 接口。
MII 包括一個數(shù)據(jù)接口,以及一個 MAC 和 PHY 之間的管理接口:
- 數(shù)據(jù)接口: 包括分別用于發(fā)送器和接收器的兩條獨立信道。每條信道都有自己的數(shù)據(jù)、時鐘和控制信號。MII 數(shù)據(jù)接口總共需要 16 個信號,包括
- TX_ER(transmit coding error): TX_ER 同步于 TX_CLK,在數(shù)據(jù)傳輸過程中,如果 TX_ER 有效超過一個時鐘周期,并且此時TX_EN 是有效的,則數(shù)據(jù)通道中傳輸?shù)臄?shù)據(jù)是無效的,沒用的。注:當 TX_ER 有效并不影響工作在 10Mb/s 的 PHY 或者 TX_EN 無效時的數(shù)據(jù)傳輸。在 MII 接口的連線中,如果 TX_ER 信號線沒有用到,必須將它下拉接地。
- TXD<3:0>(transmit data): TXD 由 RS 驅(qū)動,同步于 TX_CLK,在 TX_CLK 的時鐘周期內(nèi),并且TX_EN 有效,TXD 上的數(shù)據(jù)被 PHY 接收,否則 TXD 的數(shù)據(jù)對 PHY 沒有任何影響。
- TX_EN: 發(fā)送使能。TX_EN 由 Reconciliation 子層根據(jù) TX_CLK 上升沿同步進行轉(zhuǎn)換。
- TX_CLK(transmit clock): TX_CLK (Transmit Clock) 是一個連續(xù)的時鐘信號(即系統(tǒng)啟動,該信號就一直存在),它是 TX_EN、TXD、TX_ER(信號方向為從 RS 到 PHY)的參考時鐘,TX_CLK 由 PHY 驅(qū)動 TX_CLK 的時鐘頻率是數(shù)據(jù)傳輸速率的 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(自動協(xié)商禁止,人工設(shè)為全雙工模式), or when the Auto-Negotiation process selects a full duplex mode of operation。即半雙工模式信號有效,全雙工模式信號無效。
- RXD<3:0>(receive data): RXD由RS驅(qū)動,同步于 RX_CLK,在 RX_CLK 的時鐘周期內(nèi),并且 RX_DV 有效,RXD 上的數(shù)據(jù)被RS 接收,否則 RXD 的數(shù)據(jù)對 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 通道數(shù)據(jù)傳輸?shù)挠绊憽?/li>
- RX_CLK: 它與 TX_CLK 具有相同的要求,所不同的是它是 RX_DV、RXD、RX_ER(信號方向是從 PHY 到 RS)的參考時鐘。RX_CLK 同樣是由 PHY 驅(qū)動,PHY 可能從接收到的數(shù)據(jù)中提取時鐘 RX_CLK,也有可能從一個名義上的參考時鐘(e.g., the TX_CLK reference)來驅(qū)動RX_CLK。
- CRS(carrier sense): CRS 不需要同步于參考時鐘,只要通道存在發(fā)送或者接收過程,CRS 就需要有效。The behavior of the CRS signal is unspecified when the duplex mode bit0.8 inthe control register is set to a logic one(自動協(xié)商禁止,人工設(shè)為全雙工模式), or when the Auto-Negotiation process selects a full duplex mode of operation,即半雙工模式信號有效,全雙工模式信號無效。
- RX_DV(Receive Data Valid): RXD_DV 同步于 RX_CLK,被 PHY 驅(qū)動,它的作用如同于發(fā)送通道中的 TX_EN,不同的是在時序上稍有一點差別:為了讓數(shù)據(jù)能夠成功被RS接收,要求RXD_DV有效的時間必須覆蓋整個 FRAME 的過程,即starting no later than the Start Frame Delimiter (SFD) and excluding any End-of-Frame delimiter。
MII以4位半字節(jié)方式傳送數(shù)據(jù)雙向傳輸,時鐘速率25MHz。其工作速率可達100Mb/s。 - MII 管理接口: 是個雙信號接口,通過管理接口,MAC 就能監(jiān)視和控制 PHY。其管理是使用 SMI(Serial Management Interface) 總線通過讀寫 PHY 的寄存器來完成的。一個是時鐘信號(***MDC (management data clock)***)。另一個是數(shù)據(jù)信號(***MDIO (management data input/output)***)。
- MDC: 由站管理實體向 PHY 提供,作為在 MDIO 信號上傳送信息的定時參考。 MDC 是一種非周期性的信號,沒有最高或最低時間。 無論 TX_CLK 和 RX_CLK 的標稱周期如何,MDC 的最小高低時間應(yīng)為 160 ns,MDC 的最小周期為 400 ns。
- MDIO: 是 PHY 和 STA 之間的雙向信號。 它用于在 PHY 和 STA 之間傳輸控制信息和狀態(tài)。 控制信息由 STA 同步地針對 MDC 驅(qū)動并且由 PHY 同步地采樣。 狀態(tài)信息由 PHY 針對 MDC 同步驅(qū)動并由 STA 同步采樣。
??PHY 里面的部分寄存器是 IEEE 定義的,這樣PHY把自己的目前的狀態(tài)反映到寄存器里面,MAC 通過 SMI 總線不斷的讀取PHY 的狀態(tài)寄存器以得知目前 PHY 的狀態(tài)。例如連接速度、雙工的能力等。當然也可以通過 SMI 設(shè)置 PHY的寄存器達到控制的目的。例如流控的打開關(guān)閉、自協(xié)商模式還是強制模式等。不論是物理連接的MII總線和 SMI 總線還是 PHY 的狀態(tài)寄存器和控制寄存器都是由IEEE的規(guī)范的。因此不同公司的 MAC 和 PHY 一樣可以協(xié)調(diào)工作。當然為了配合不同公司的 PHY 的自己特有的一些功能,驅(qū)動需要做相應(yīng)的修改。
??MII 支持 10Mbps 和 100Mbps 的操作,一個接口由 14 根線組成,它的支持還是比較靈活的。但是有一個缺點是因為它一個端口用的信號線太多,如果一個 8 端口的交換機要用到 112 根線,16 端口就要用到 224 根線,到 32 端口的話就要用到 448 根線。一般按照這個接口做交換機是不太現(xiàn)實的。所以現(xiàn)代的交換機的制作都會用到其它的一些從 MII 簡化出來的標準,比如 RMII、SMII、GMII等。
RMII(Reduced Media Independant Interface)
??簡化媒體獨立接口是標準的以太網(wǎng)接口之一,比 MII 有更少的 I/O 傳輸。RMII 口是用兩根線來傳輸數(shù)據(jù)的,MII 口是用 4 根線來傳輸數(shù)據(jù)的,GMII 是用 8 根線來傳輸數(shù)據(jù)的。MII/RMII 只是一種接口,對于10Mbps 線速,MII 的時鐘速率是 2.5MHz 就可以了,RMII 則需要 5MHz;對于 100Mbps 線速,MII 需要的時鐘速率是 25MHz,RMII 則是 50MHz。
??MII/RMII 用于傳輸以太網(wǎng)包,在 MII/RMII 接口是4/2bit的,在以太網(wǎng)的PHY里需要做串并轉(zhuǎn)換,編解碼等才能在雙絞線和光纖上進行傳輸,其幀格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN)。以太網(wǎng)幀的格式為:前導(dǎo)符+開始位+目的mac地址+源mac地址+類型/長度+數(shù)據(jù)+padding(optional)+32bitCRC。如果有vlan,則要在類型/長度后面加上2個字節(jié)的vlan tag,其中12bit來表示vlan id,另外4bit表示數(shù)據(jù)的優(yōu)先級!
GMII(Gigabit MII)
??GMII是千兆網(wǎng)的MII接口,這個也有相應(yīng)的RGMII接口,表示簡化了的GMII接口。
??GMII采用8位接口數(shù)據(jù),工作時鐘125MHz,因此傳輸速率可達1000Mbps。同時兼容MII所規(guī)定的10/100 Mbps工作方式。GMII接口數(shù)據(jù)結(jié)構(gòu)符合IEEE以太網(wǎng)標準,該接口定義見IEEE 802.3-2000。
- 發(fā)送器: 在千兆速率下,向PHY提供GTXCLK信號、TXD、TXEN、TXER信號與此時鐘信號同步。否則在10/100Mbps速率下,PHY提供TXCLK時鐘信號,其它信號與此信號同步。其工作頻率為25MHz(100M網(wǎng)絡(luò))或2.5MHz(10M網(wǎng)絡(luò))。
- GTXCLK——吉比特TX…信號的時鐘信號(125MHz)
- TXCLK——10/100Mbps信號時鐘
- TXD[7…0]——被發(fā)送數(shù)據(jù)
- TXEN——發(fā)送器使能信號
- TXER——發(fā)送器錯誤(用于破壞一個數(shù)據(jù)包)
- 接收器:
- RXCLK——接收時鐘信號(從收到的數(shù)據(jù)中提取,因此與GTXCLK無關(guān)聯(lián))
- RXD[7…0]——接收數(shù)據(jù)
- RXDV——接收數(shù)據(jù)有效指示
- RXER——接收數(shù)據(jù)出錯指示
- COL——沖突檢測(僅用于半雙工狀態(tài))
- 管理配置: 管理配置接口控制PHY的特性。該接口有32個寄存器地址,每個地址16位。其中前16個已經(jīng)在“IEEE 802.3,2000-22.2.4 Management Functions”中規(guī)定了用途,其余的則由各器件自己指定。
- MDC——配置接口時鐘
- MDIO——配置接口I/O
什么是PHY
??PHY(Physical Layer,PHY)是 IEEE802.3 中定義的一個標準模塊,STA(station management entity,管理實體,一般為MAC 或 CPU)通過 SMI(Serial Manage Interface)對 PHY 的行為、狀態(tài)進行管理和控制,而具體管理和控制動作是通過讀寫 PHY 內(nèi)部的寄存器實現(xiàn)的。一個 PHY 的基本結(jié)構(gòu)如下圖:
??PHY 是物理接口收發(fā)器,它實現(xiàn) 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條) 的規(guī)范。
PHY 寄存器在 IEEE802.3 標準的 22.2.4 Management functions 節(jié)有介紹,但不涉及所有的寄存器,個別寄存器需要到其它章節(jié)中看,當然,文檔里面也提到該在哪里找到哪個寄存器。
PHY寄存器
??PHY 寄存器的地址空間為 5 位,從 0 到 31 最多可以定義 32 個寄存器(隨著芯片功能不斷增加,很多 PHY 芯片采用分頁技術(shù)來擴展地址空間以定義更多的寄存器),IEEE802.3 定義了地址為 0-15 這 16 個寄存器的功能,地址16 - 31的寄存器留給芯片制造商自由定義,如下表所示。
(1)官方介紹請參考 IEEE802.3 標準的 22.2.4 Management functions 節(jié)。
(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 的主要工作狀態(tài)進行設(shè)置。應(yīng)該保證控制寄存器每個位的默認值,以便在沒有管理干預(yù)的情況下,上電或復(fù)位時 PHY 的初始狀態(tài)為正常操作狀態(tài)。Control Register 的每一位完成的功能見下。
-
Reset: 通過將位 0.15 設(shè)置為邏輯 1 來完成復(fù)位 PHY。 該操作應(yīng)將狀態(tài)和控制寄存器設(shè)置為其默認狀態(tài)。 因此,此操作可能會改變PHY 的內(nèi)部狀態(tài)以及與 PHY 關(guān)聯(lián)的物理鏈路的狀態(tài)。復(fù)位過程中 Bit15 保持為 1,復(fù)位完成之后該位應(yīng)該自動清零。 在復(fù)位過程完成之前,PHY 不需要接受對控制寄存器的寫入操作,并且在復(fù)位過程完成之前寫入 0.15 以外的控制寄存器位可能不起作用。 復(fù)位過程應(yīng)在0.15 位設(shè)置的 0.5 s 內(nèi)完成。
(1)一般要改變端口的工作模式(如速率、雙工、流控或協(xié)商信息等)時,在設(shè)置完相應(yīng)位置的寄存器之后,需要通過 Reset 位復(fù)位 PHY 來使配置生效。
(2)該比特位的默認值為 0。 -
Loopback: 當位 0.14 被設(shè)置為邏輯 1 時,PHY 應(yīng)置于環(huán)回操作模式。 當位 0.14 置位時,PHY 接收電路應(yīng)與網(wǎng)絡(luò)介質(zhì)隔離,并且MII 或 GMII 處的 TX_EN 斷言不應(yīng)導(dǎo)致網(wǎng)絡(luò)介質(zhì)上的數(shù)據(jù)傳輸。 當位 0.14 置位時,PHY 應(yīng)接受來自 MII 或 GMII 發(fā)送數(shù)據(jù)路徑的數(shù)據(jù),并將其返回給 MII 或 GMII 接收數(shù)據(jù)路徑,以響應(yīng)TX_EN 的斷言。 當位 0.14 置位時,從斷言 TX_EN 到斷言 RX_DV 的延遲應(yīng)小于 512 BT。 當位 0.14 置位時,除非設(shè)置了位 0.7,否則 COL 信號應(yīng)始終保持無效。 清 0.14 位為零允許正常操作。
??Loopback 是一個調(diào)試以及故障診斷中常用的功能,Bit14 置 1 之后,PHY 和外部 MDI 的連接在邏輯上將被斷開,從 MAC 經(jīng)過 MII/GMII(也可能是其他的 MAC/PHY 接口)發(fā)送過來的數(shù)據(jù)將不會被發(fā)送到 MDI 上,而是在 PHY 內(nèi)部(一般在 PCS)回環(huán)到本端口的 MII/GMII 接收通道上,通過 Loopback 功能可以檢查 MII/GMII 以及PHY接口部分是否工作正常,對于端口不通的情況可用于故障定位。(1)需要注意的是,很多時候 PHY 設(shè)置 Loopback 后端口可能就 Link down 了,MAC 無法向該端口發(fā)幀,這時就需要通過設(shè)置端口Force Link up 才能使用 Loopback 功能。
(2)該比特位的默認值為 0。 -
Speed Selection: Bit13 和 Bit6 兩位聯(lián)合實現(xiàn) 對端口的速率控制功能。鏈接速度可以通過自動協(xié)商過程或手動速度選擇來選擇。 通過將位0.12清零來禁用自動協(xié)商時,允許手動速度選擇。
- 當禁用自動協(xié)商并將位0.6清除為邏輯0時,將位0.13設(shè)置為邏輯1將PHY配置為100 Mb / s操作,并將位0.13清除為邏輯0將PHY配置為10 Mb / s操作 。
- 當禁用自動協(xié)商并將位0.6設(shè)置為邏輯1時,將位0.13清零為邏輯0會選擇1000 Mb / s的操作。 將位0.6和0.13設(shè)置為邏輯1的組合保留用于未來的標準化。
- 當使能自動協(xié)商時,可以讀取或?qū)懭胛?.6和0.13,但位0.6和位0.13的狀態(tài)對鏈路配置沒有影響,位0.6和位0.13不需要反映當它被讀取時鏈接。
??如果 PHY 通過比特 1.15:9 和比特 15.15:12 報告它不能工作在所有速度時,則比特0.6和0.13的值應(yīng)該與PHY可以操作的速度相對應(yīng)。并且任何試圖將該位設(shè)置為無效的操作均將被忽略。
(1)對Speed Selection的修改設(shè)置,往往需要復(fù)位端口才能配置生效。因此在設(shè)置該位置的時候需要檢查自動協(xié)商的設(shè)置并通過Bit15復(fù)位端口。
(2)位0.6和0.13的默認值是根據(jù)位1.15:9和15.15:12所指示的PHY可以操作的***最高數(shù)據(jù)速率***的編碼組合。
-
Auto-Negotiation Enable: 自動協(xié)商過程應(yīng)通過將位0.12設(shè)置為邏輯1來啟用。 如果位0.12設(shè)置為邏輯1,則位0.13、0.8和0.6不應(yīng)對鏈路配置和除了自動協(xié)商協(xié)議規(guī)定之外的站操作產(chǎn)生影響。 如果將位0.12清零為邏輯0,則無論鏈路配置和自動協(xié)商過程的先前狀態(tài)如何,位0.13、0.8和0.6都將確定鏈路配置。
??如果PHY通過位1.3報告它缺乏執(zhí)行自動協(xié)商的能力,則PHY應(yīng)在位0.12返回零值。 如果PHY通過位1.3報告它缺乏執(zhí)行自動協(xié)商的能力,則位0.12應(yīng)該始終寫為0,并且任何嘗試將1寫入位0.12都應(yīng)該被忽略。必須注意的是,對于1000BASE-T接口,自動協(xié)商必須打開。
-
Power Down: 通過將位0.11設(shè)置為邏輯1,可以將PHY置于低功耗狀態(tài)。 清0.11位為零允許正常操作。 PHY在掉電狀態(tài)下的具體行為是特定實現(xiàn)的。 處于掉電狀態(tài)時,PHY應(yīng)響應(yīng)管理事務(wù)。 在轉(zhuǎn)換到掉電狀態(tài)期間和處于掉電狀態(tài)期間,PHY不應(yīng)在MII或GMII上產(chǎn)生寄生信號。
??當位0.11或位0.10被設(shè)置為邏輯1時,PHY不需要滿足RX_CLK和TX_CLK信號功能要求。 在位0.11和0.10清零后,PHY應(yīng)在0.5 s內(nèi)滿足22.2.2中定義的RX_CLK和TX_CLK信號功能要求。(1)Power Down模式一般在軟件shut down端口的時候使用,需要注意的是端口從Power Down模式恢復(fù),需要復(fù)位端口以保證端口可靠的連接。
(2)該位的默認值為 0。 -
Isolate: 通過將位0.10設(shè)置為邏輯1,PHY可能被迫將其數(shù)據(jù)路徑與MII或GMII電隔離。 清零位0.10允許正常操作。 當PHY與MII或GMII隔離時,它不會響應(yīng)TXD數(shù)據(jù)包和TX_EN,TX_ER、GTX_CLK的輸入。并且它的TX_CLK,RX_CLK,RX_DV,RX_ER,RXD數(shù)據(jù)包、COL和CRS輸出均應(yīng)為高阻態(tài)。 當PHY與MII或GMII隔離時,它將響應(yīng)管理事務(wù)(MDC/MDIO接口的信號)。
(1)IEEE802.3沒有對Isolate 時MDI接口的狀態(tài)進行規(guī)范,此時MDI端可能還在正常運行。Isolate在實際應(yīng)用中并沒有用到。
(2)由于目前很多百兆的PHY芯片其MAC接口主流的都是SMII/S3MII,8個端口的接口是相互關(guān)聯(lián)的,一個端口設(shè)置Isolate可能會影響其他端口的正常使用,因此在使用中注意不要隨意更改bit10的狀態(tài)。 -
Restart Auto-Negotiation: 如果PHY通過位1.3報告它缺乏執(zhí)行自動協(xié)商的能力,或者如果自動協(xié)商被禁用,則PHY應(yīng)在位0.9返回零值。 如果PHY通過位1.3報告它缺乏執(zhí)行自動協(xié)商的能力,或者如果禁用了自動協(xié)商,則應(yīng)將位0.9始終寫為0,并且任何嘗試將1寫入位0.9應(yīng)被忽略。
??Bit9置1將重新啟動端口的自動協(xié)商進程,當然前提是Auto-Negotiation Enable是使能的。一般在修改端口的自動協(xié)商能力信息之后通過Bit9置1重新啟動自動協(xié)商來使端口按照新的配置建立link。
-
Duplex Mode: 可以通過自動協(xié)商過程或手動雙面選擇來選擇雙工模式。 通過將位0.12清零來禁用自動協(xié)商時,允許手動雙面選擇。
- 當禁用自動協(xié)商時,將位0.8設(shè)置為邏輯1將PHY配置為全雙工操作,并將位0.8清零以將邏輯0配置為用于半雙工操作的PHY。
- 當啟用自動協(xié)商時,可以讀取或?qū)懭胛?.8,但位0.8的狀態(tài)對鏈路配置沒有影響。
??如果PHY通過位1.15:9和15.15:12報告它只能在一個雙工模式下工作,則位0.8的值應(yīng)該與PHY可以工作的模式相對應(yīng),并且任何嘗試改變將該位0.8修改為無效指的操作應(yīng)被忽略。
對Duplex Mode的修改配置也需要復(fù)位端口才能生效。
- Collision Test: 沖突信號(COL)測試開關(guān)。在需要對COL信號進行測試時,可以通過Bit7置1,這時PHY將輸出一個COL脈沖以供測試。實際測試操作中也可以將端口配置為半雙工狀態(tài),通過發(fā)幀沖突來測試COL信號,因此該配置實用價值不大。
- Unidirectional enable: 如果PHY通過比特1.7報告它不具備編碼和傳輸來自媒體獨立接口的數(shù)據(jù)的能力,而不管PHY是否確定已建立有效鏈路,則PHY應(yīng)在比特0.5中返回零值,并且 任何嘗試寫一個到位0.5應(yīng)該被忽略。
Status register
??寄存器1是PHY狀態(tài)寄存器,主要包含PHY的狀態(tài)信息,大多數(shù)bit的值都是由芯片廠家確定的,每一個bit的功能在表3種已有詳細說明。
寄存器中各位的詳細說明如下:
- 100BASE-T4 ability: 當讀為邏輯1時,位1.15指示PHY有能力使用100BASE-T4信令規(guī)范執(zhí)行鏈路發(fā)送和接收。 當讀為邏輯0時,位1.15表示PHY缺乏使用100BASE-T4信令規(guī)范執(zhí)行鏈路發(fā)送和接收的能力。
- 100BASE-X full duplex ability: 當讀為邏輯1時,位1.14指示PHY有能力使用100BASE-X信令規(guī)范執(zhí)行全雙工鏈路傳輸和接收。 當作為邏輯0讀取時,bit1.14表示PHY缺乏使用100BASE-X信令規(guī)范執(zhí)行全雙工鏈路傳輸和接收的能力。
- 100BASE-X half duplex ability: 當讀為邏輯1時,位1.13指示PHY有能力使用100BASE-X信令規(guī)范執(zhí)行半雙工鏈路傳輸和接收。 當讀為邏輯0時,位1.13指示PHY缺乏使用100BASE-X信令規(guī)范執(zhí)行半雙工鏈路傳輸和接收的能力。
- 其他同類型的值意義基本與上面幾個相同:指示PHY所具有的工作模式能力,不再一一說明。
- Unidirectional ability: 當讀為邏輯1時,位1.7指示PHY具有編碼和傳輸來自媒體獨立接口的數(shù)據(jù)的能力,而不管PHY是否確定已建立有效鏈路。 當讀為邏輯0時,位1.7指示PHY只有在PHY確定已建立有效鏈路時才能從媒體獨立接口傳輸數(shù)據(jù)。
- MF preamble suppression ability: 當讀為邏輯1時,位1.6指示PHY能夠接受管理幀,而不管它們是否在22.2.4.5.2中描述的前導(dǎo)碼模式之前。 當讀為邏輯0時,位1.6指示PHY不能接受管理幀,除非它們之前是22.2.4.5.2中描述的前導(dǎo)碼模式。
- Auto-Negotiation Complete: 當讀為邏輯1時,位1.5指示自動協(xié)商過程已完成,并且由自動協(xié)商協(xié)議(條款28或條款37)實施的擴展寄存器的內(nèi)容是有效的。 當讀為邏輯0時,位1.5指示自動協(xié)商過程尚未完成,并且擴展寄存器的內(nèi)容由自動協(xié)商協(xié)議的當前狀態(tài)定義,或者為手動配置寫入。 如果自動協(xié)商通過清除位0.12禁用,則PHY應(yīng)在位1.5返回零值。 如果PHY缺乏執(zhí)行自動協(xié)商的能力,它還應(yīng)在位1.5返回零值。
在調(diào)試以及異常故障處理時,可以通過該位寄存器的狀態(tài)判斷AN是否成功,從而進一步的檢查AN相關(guān)的設(shè)置是否正確,或者芯片的AN功能是否正常等。
- Remote Fault: 當讀為邏輯1時,位1.4表示檢測到遠程故障狀態(tài)。 故障類型以及故障檢測的標準和方法是PHY特定的。 遠程故障位必須使用鎖存功能來實現(xiàn),以便發(fā)生遠程故障將導(dǎo)致遠程故障位置位,并保持置位狀態(tài)直至被??清除。 每當通過管理接口讀取寄存器1時,遠程故障位應(yīng)清零,并且還應(yīng)通過PHY復(fù)位清零。
??遠端錯誤指示位。Bit4=1代表連接對端(Link Partner)出錯,至于出錯的具體類型以及錯誤檢測機制在規(guī)范中并沒有定義,由PHY的制造商自由發(fā)揮,一般的廠商都會在其他的寄存器(Register16-31由廠商自行定義)指示比較詳細的錯誤類型。在與端口相關(guān)的故障查證中,Remote Fault是一個重要的指示信息,通過互聯(lián)雙方的Remote Fault信息(可能要加上其他的具體錯誤指示),可以幫助定位故障原因。 - Auto-Negotiation ability: 當讀為邏輯1時,位1.3指示PHY有能力執(zhí)行自動協(xié)商。 當讀為邏輯0時,位1.3指示PHY缺乏執(zhí)行自動協(xié)商的能力。
- Link Status: 當讀為邏輯1時,位1.2指示PHY已經(jīng)確定已建立有效鏈路。 當作為邏輯0讀取時,位1.2指示該鏈接無效。 確定鏈路有效性的標準是PHY特定的。 鏈路狀態(tài)位應(yīng)該使用鎖存功能來實現(xiàn),以便發(fā)生鏈路故障情況將導(dǎo)致鏈路狀態(tài)位清零并保持清零,直到通過管理接口讀取。 此狀態(tài)指示旨在支持在30.5.1.1.4,aMediaAvailable中定義的管理屬性。
??實際應(yīng)用中一般都是通過Bit2來判斷端口的狀態(tài)。而且,一般的MAC芯片也是通過輪詢PHY的這個寄存器值來判斷端口的Link狀態(tài)的(這個過程可能有不同的名稱,比如BCM叫做Link Scan,而Marvell叫做PHY Polling。)如前所述,在AN Enable的情況下,Link Status的信息只有在Auto-Negotiation Complete指示已經(jīng)完成的情況下才是正確可靠的,否則有可能出錯。 - Jabber Detect: 當作為邏輯1讀取時,位1.1指示已經(jīng)檢測到爆音條件。 此狀態(tài)指示旨在支持30.5.1.1.6中定義的管理屬性,aJabber和30.5.1.3.1 nJabber中定義的MAU通知。 檢測Jabber條件的標準是PHY特定的。 Jabber檢測位應(yīng)該使用鎖存功能來實現(xiàn),以便發(fā)生Jabber條件將導(dǎo)致Jabber檢測位置位,并保持置位狀態(tài)直至被??清除。 每次通過管理接口讀取寄存器1時,Jabber檢測位應(yīng)清零,并且還應(yīng)通過PHY復(fù)位清零。
??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發(fā)送的時間超過了規(guī)定的最大長度。值得注意的是,Jabber Detect只有在10BASE-T模式下才有意義,100和1000M模式是沒有定義Jabber這一功能的。
PHY Identifier Register
??寄存器2和3存放PHY芯片的型號代碼,寄存器2(PHY ID1)為高16位,而寄存器3(PHY ID2)為低16位。由芯片制造商自行定義,實際應(yīng)用中軟件通過讀取這兩個寄存器的內(nèi)容可以識別PHY的型號和版本。
??PHY標識符應(yīng)由由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是自動協(xié)商的能力通告寄存器,在AN Enable的前提下(見寄存器0),端口根據(jù)該寄存器的相關(guān)配置將自動協(xié)商信息通過FLP在MDI上進行通告。當AN配置為Disable狀態(tài)的時候,寄存器4的配置將不起作用,端口的工作模式由控制寄存器中的配置決定。
??該寄存器包含PHY的通告能力,它們將在自動協(xié)商期間傳送給其鏈接伙伴。 基本頁的位定義在IEEE標準的28.2.1.2中定義。 上電時,在自動協(xié)商開始之前,該寄存器應(yīng)具有以下默認配置:
- Selector Field (4.4:0): 被設(shè)置為適當?shù)拇a,如IEEE標準的附件28A中所規(guī)定。
- Reserved(4.14): 被設(shè)置為邏輯0。
- Technology Ability Field(4.11:5): 根據(jù)MII狀態(tài)寄存器(寄存器1)(1.15:11)中設(shè)置的值或等效值設(shè)置。 另見28.2.1.2.3和附件28D。
Link codeword encoding(基本鏈路碼字)
??在FLP Burst內(nèi)傳輸?shù)幕炬溌反a字(基本頁面)應(yīng)該傳達如圖28-7所示的編碼。 自動協(xié)商功能可以使用下一頁功能支持其他頁面。 下一頁交換中使用的鏈接代碼字的編碼在28.2.3.4中定義。 在FLP Burst中,D0應(yīng)該是第一個傳輸?shù)奈弧?br />
Next Page function
??下一頁功能使用標準的自動協(xié)商仲裁機制來允許交換任意的數(shù)據(jù)。 數(shù)據(jù)由可選的下一頁信息攜帶,其遵循用于基本鏈接碼字的傳輸和確認過程。 定義了四種類型的下一頁編碼:消息頁面,未格式化頁面,擴展消息頁面和擴展的未格式化頁面。
??關(guān)于該部分,具體見IEEE標準的28.2.3.4 Next Page function。
??在IEEE標準中,Auto-Negotiation Advertisement Register中的各部分全部是在獨立章節(jié)中進行介紹的。具體如下:
- Selector Field: 選擇器字段(S [4:0])是一個5位寬的字段,編碼32個可能的消息。 鏈路碼字中的選擇器字段S [4:0]應(yīng)用于識別自動協(xié)商發(fā)送的消息的類型。 下表列出了可能發(fā)送的消息的類型。 隨著新消息的發(fā)展,該表格將相應(yīng)更新。
未指定的組合保留供將來使用。 不會傳輸選擇器字段的預(yù)留組合。***我們所接觸的以太網(wǎng)PHY遵從IEEE802.3規(guī)范,Selector Field=0001,該區(qū)域不可隨意更改(很多PHY將此區(qū)域設(shè)計為只讀寄存器,以免被修改)***。 - Technology Ability Field: 技術(shù)能力字段(A [6:0])是一個7位寬的字段,其中包含指示選擇器字段值特定的支持技術(shù)的信息。 這些位被映射到各個技術(shù),以便能夠針對單個選擇器字段值并行通告能力。 附錄28B.2和附件28D描述了IEEE 802.3選擇器的技術(shù)能力字段編碼。 鏈接代碼字中可能會公布多種技術(shù)。 設(shè)備應(yīng)支持其宣傳的技術(shù)的數(shù)據(jù)服務(wù)能力。
- Extended Next Page: 擴展下一頁(XNP)被編碼在基本鏈路碼字的位D12中。 擴展下一頁位指示本地設(shè)備在設(shè)置為邏輯1時支持擴展下一頁的傳輸,并指示本地設(shè)備在設(shè)置為邏輯0時不支持擴展下一頁。 Extended Next Page的使用與協(xié)商的數(shù)據(jù)速率,媒體或鏈接技術(shù)是正交的。 擴展下一頁位按照28.2.3.4中的擴展下一頁功能規(guī)范使用。
- Next Page: 無論選擇器字段值還是鏈接碼字編碼,下一頁(NP)都在D15位編碼。 支持附加鏈接碼字編碼的傳輸和接收是可選的。 如果不支持Next Page功能,NP位應(yīng)始終設(shè)置為邏輯0。 如果設(shè)備實現(xiàn)下一頁功能并希望進行下一頁交換,則應(yīng)將NP位設(shè)置為邏輯1。 設(shè)備可以實現(xiàn)下一頁功能,并通過將NP位設(shè)置為邏輯0來選擇不參與下一頁交換。 下一頁功能在28.2.3.4中定義。
- Remote Fault: 遠程故障(RF)編碼在基本鏈路碼字的位D13中。 默認值是邏輯零。 遠程故障位為傳輸簡單的故障信息提供了一種標準的傳輸機制。 當自動協(xié)商通告寄存器(寄存器4)中的RF位設(shè)置為邏輯1時,發(fā)送的基本鏈路碼字中的RF位被設(shè)置為邏輯1。 當接收到的基本鏈路代碼字中的RF位被設(shè)置為邏輯1時,如果存在MII管理功能,則MII狀態(tài)寄存器(寄存器1)中的遠程故障位將被設(shè)置為邏輯1。
Auto-Negotiation Link Partner ability register (Register 5) (RO)
??寄存器5保存的是本端PHY接收到的對端PHY所通告的端口能力,寄存器5的結(jié)構(gòu)和寄存器4基本一致。
Auto-Negotiation Expansion Register (Register 6) (RO)
??寄存器6保存了PHY自動協(xié)商過程的異常信息。從這個寄存其中我們可以獲取到Link Partner子否支持自動協(xié)商以及自動協(xié)商下一頁有沒有收到的信息。
Auto-Negotiation Next Page transmit register (Register 7) (R/W)
??自動協(xié)商下一頁發(fā)送寄存器包含在支持下一頁功能時要發(fā)送的下一頁鏈接碼字。 (見表28-6)內(nèi)容在28.2.3.4中定義。 上電時,該寄存器應(yīng)包含默認值2001H,該值表示消息代碼設(shè)置為Null消息的消息頁面。 該值可以由設(shè)備希望傳輸?shù)娜魏斡行У南乱豁撓⒋a替換。 寫入該寄存器應(yīng)將mr_next_page_loaded設(shè)置為true。
Auto-Negotiation Link Partner Received Next Page register (Register 8) (RO)
未完待續(xù)。。。
附件
參考文檔
- IEEE Standard for Ethernet
- 網(wǎng)絡(luò)
總結(jié)
以上是生活随笔為你收集整理的Network 之二 Ethernet(以太网)中的 MAC、MII、PHY 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: USB 之一 USB2.0 规范详解 第
- 下一篇: LwIP 之二 网络接口 netif(e