關於88e1111 phy模組的配置說明
1、前言
本次主要是參考了88e1111的phy晶片的資料手冊,對於88e1111這款經典的 10M/100M/1000M 乙太網晶片的一些基礎軟體硬體配置做一些說明,拋磚引玉,有不對之處,請多多指教。
2、88e1111 phy晶片的硬體相關
1、phy晶片的作用
phy晶片主要是實現數字訊號和模擬訊號的轉換,將MAC層硬體傳過來的資料轉換成模擬訊號將資料送出去。比如我們平時除錯板卡的時候,將電腦透過網線連線銅口,確認好雙方的ip以後就可以互相ping通。看起來好像很簡單,實際上網線連線銅口,銅口是不能直接連線板卡上的cpu或者微控制器的,cpu和微控制器一般提供MII/GMII這樣的介面,實現MII/GMII這樣的介面與銅口的連線,中間的實現連線轉換的模組就是phy模組,也就是 CPU->MII/GMII < -- > phy < -- > 銅口 的結構。

2、88e1111支援的模式
88e1111不光支援以上這樣的場景,根據不同的需求對phy晶片進行配置,能夠轉換成不同的電平協議運用在不同的場景上,比如phy晶片和網路交換機連線,phy與phy晶片連線。88e1111支援多種轉換模式,檢視他的資料手冊可以發現,88e1111支援的模式很多,主要分為Copper和fiber兩類,還有就是直接的電平轉換,我們對幾種常用的模式說明一下。

1.Copper模式

可以看到的是,copper模式下支援的協議轉換是很多的,88e1111手冊上也沒有對這些一一做解釋,倒是有一張表格是告訴配置 HWCFG_MODE[3:0] 的對應的值來切換phy的模式,這個HWCFG_MODE[3:0]實際上對應的是暫存器 R27 Extended PHY Specific Status Register 的低四位,這個在我們後續的軟體部分再做詳細說明。

SGMII Modes
這次主要講一下sgmii模式在配置中的一些常見誤區,sgmii的電平協議是區分Master和Slave模式,也就是說,當兩個sgmii的介面互相連線的時候要區分主從,由主機主動發起傳送到從機,我們的phy晶片是預設為Master模式,一般交換機晶片預設為Slave模式(不絕對,要看一下手冊,這裡說的是bcm5396交換機),當phy晶片與phy晶片連線的時候,兩邊都為Master模式,這時不用擔心,兩邊的sgmii介面都可以主動發起,兩邊介面會相互協商成一主一從的模式,不會影響正常通訊。當phy晶片與交換機連線時,一主一從,如果速率,雙工這些配置好了的話,很快就能link上。最容易出問題的就是有的時候做一些複雜專案,存在兩個交換機透過sgmii的方式互聯,此時兩邊都為Slave模式,就會出現兩邊無人發起通訊的情況,導致sgmii通訊一直異常,此時就要去配置一下交換機上面sgmii的主從模式,將一邊配置為Master模式即可,下面是bcm5396交換機暫存器關於sgmii的主從模式配置的說明。

2.Fiber模式

透過這個圖,我們可以看到Fiber模式主要是用於轉換為光纖模式,【注】1000BASE-X表示光纖介面,1000BASE-T表示銅介質雙絞線介面。
Fiber模式下配置 HWCFG_MODE[3:0] 暫存器來切換模式的配置表如下。

GMII to Fiber Mode
手冊上強調了一下當配置HWCFG_MODE[3:0] 為”0111“,將模式選擇為GMII轉光纖的模式,如果GMII那邊是連線的MAC層的話,只能選擇強制千兆的模式,如果phy晶片是用於序列介面的電平轉換的時候,並非一邊連線的MAC層的話,是支援千兆自協商模式的。

3.GMII/MII to SGMII and RGMII to SGMII Mode
這是手冊上寫的第三種特殊的模式,他意思是純粹的電平協議轉換,並不涉及到Copper或者Fiber。現實中我們也經常會遇到這種情況,例如一張板卡的出去的phy晶片,對外為SGMII模式,連線到另一張板卡,另一張板卡對外也是SGMII模式,兩邊的phy互相連線就是透過SGMII來互相通訊,此時這種模式下,支援10M/100M/1000M自協商模式。

phy的硬體模式配置
88e1111如果硬體配置得當,正常來說是不需要軟體進行再次配置的,我們的硬體可以透過配置管腳配置整個phy晶片的模式,全雙工還是半雙工,速率等,接下來我們來看看硬體是如何透過配置管腳來配置這些的。
1.根據資料手冊可以看到,總共有7根管腳可以對phy晶片進行配置,每根管腳對應3個bit,每個bit都有不同的含義。

2.硬體透過將這7根管腳接上不同的管腳,來配置管腳對應的bit值。88e1111提供了一個對映表,不同的管腳對應不同的值。

3.將對應不同值的管腳連線到CONFIG[6:0]上以後,就能對phy的模式進行硬體配置,88e1111的資料手冊上提供了一個例子,很好的展示了一下該如何配置硬體配置管腳,將CONFIG0直接連線LED_RX管腳,就會將phy地址bit[2:0]配置為010,將CONFIG2接到LED_DUPLEX就能將模式配置為自協商1000base-t的模式。

3、88e1111 phy晶片的軟體相關
1、軟體配置phy晶片的介面和時序
檢視88e1111的資料手冊,我們可以看到,88e1111可以透過兩種方式進行暫存器配置等,一種是MDIO協議,一種是IIC協議,IIC支援100K或400K的速率,當軟體暫存器寫入以後,板卡需要進行軟復位操作,phy地址預設使用[4:0]五個bit表示,地址由硬體配置地址管腳高低電平來確定。

1.MDIO訪問phy暫存器
- MDIO讀寫時序圖如下

2.IIC訪問phy暫存器
- IIC讀暫存器時序圖如下

- IIC寫暫存器時序圖如下

2、phy暫存器配置及實現
1.暫存器列表

2.R22 Extended Address 暫存器
可以根據上表可以看到,phy的暫存器根據page的切換大體可以分為copper和fiber兩種模式,根據資料手冊的說明,透過配置 R22 Extended Address 暫存器可以配置page0或者1,用以切換不同的模式。

3.R0 Control Register 暫存器
對phy暫存器進行配置以後,並不會立刻生效,需要對phy進行軟復位操作以後才能夠生效,透過配置R0 Control Register暫存器可以配置自協商,雙工等,同時也可以操作phy的軟復位操作。

4.R1 Status Register 暫存器
透過檢視phy的 R1 Status Register 暫存器可以檢視許多情況,有一個小技巧是,在讀取 R17 PHY Specific Status Register 暫存器之前,可以先讀一下 R1 Status Register 的bit5,可以用以確定phy是否協商完成。

5.R17 PHY Specific Status Register 暫存器
透過檢視phy的 R17 PHY Specific Status Register 暫存器可以檢視phy的link狀態,phy的速率,phy雙工模式。

6.R27 Extended PHY Specific Status Register 暫存器
透過修改phy的 R27 Extended PHY Specific Status Register 暫存器bit[3:0],可以配置phy的模式,等同於硬體上修改 HWCFG_MODE[3:0] ,可以配置 GMII to SGMII ,RGMII to SGMII,RGMII to Fiber等模式。

7.R2 PHY Identifier 暫存器
透過檢視 R2 PHY Identifier 暫存器,可以獲取到phy的裝置id,由圖可以看到,目前phy的id是0x141,透過讀取裝置id可以判斷裝置型別,以及phy裝置是否能正常訪問。

4、總結
88e1111的配置大體上就是這些,此次主要涉及硬體和軟體配置,如果在實際除錯過程中,phy的狀態感覺一直不太對勁,link不上的話,將兩邊phy晶片速率強制一下看看。在除錯1000base-x的時候,很多時候都存在自協商不成功的情況,這個時候強制速率可以來看看連線狀態是否得到改善,還有一個要注意的點就是,88e1111在上電以後,需要做硬復位操作,這樣配置的引數才能得以啟動,當開發人員操作軟體暫存器對phy進行二次配置,也需要去配置 R0 Control Register 暫存器去軟復位一下phy晶片,這樣才能使暫存器的配置生效。