關於88e1111 phy模塊的配置說明 1、前言 本次主要是參考了88e1111的phy晶元的數據手冊,對於88e1111這款經典的 10M/100M/1000M 乙太網晶元的一些基礎軟體硬體配置做一些說明,拋磚引玉,有不對之處,請多多指教。 2、88e1111 phy晶元的硬體相關 1、ph ...
關於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晶元,這樣才能使寄存器的配置生效。