關於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 < -- > 銅口 的結構。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229221126158-272224736.png)
2、88e1111支持的模式
88e1111不光支持以上這樣的場景,根據不同的需求對phy晶元進行配置,能夠轉換成不同的電平協議運用在不同的場景上,比如phy晶元和網路交換機連接,phy與phy晶元連接。88e1111支持多種轉換模式,查看他的數據手冊可以發現,88e1111支持的模式很多,主要分為Copper和fiber兩類,還有就是直接的電平轉換,我們對幾種常用的模式說明一下。
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301000626699-1291758098.png)
1.Copper模式
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229221126158-272224736.png)
可以看到的是,copper模式下支持的協議轉換是很多的,88e1111手冊上也沒有對這些一一做解釋,倒是有一張表格是告訴配置 HWCFG_MODE[3:0] 的對應的值來切換phy的模式,這個HWCFG_MODE[3:0]實際上對應的是寄存器 R27 Extended PHY Specific Status Register 的低四位,這個在我們後續的軟體部分再做詳細說明。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229221348817-447369907.png
)
SGMII Modes
這次主要講一下sgmii模式在配置中的一些常見誤區,sgmii的電平協議是區分Master和Slave模式,也就是說,當兩個sgmii的介面互相連接的時候要區分主從,由主機主動發起發送到從機,我們的phy晶元是預設為Master模式,一般交換機晶元預設為Slave模式(不絕對,要看一下手冊,這裡說的是bcm5396交換機),當phy晶元與phy晶元連接的時候,兩邊都為Master模式,這時不用擔心,兩邊的sgmii介面都可以主動發起,兩邊介面會相互協商成一主一從的模式,不會影響正常通信。當phy晶元與交換機連接時,一主一從,如果速率,雙工這些配置好了的話,很快就能link上。最容易出問題的就是有的時候做一些複雜項目,存在兩個交換機通過sgmii的方式互聯,此時兩邊都為Slave模式,就會出現兩邊無人發起通信的情況,導致sgmii通信一直異常,此時就要去配置一下交換機上面sgmii的主從模式,將一邊配置為Master模式即可,下麵是bcm5396交換機寄存器關於sgmii的主從模式配置的說明。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229221706366-743780088.png)
2.Fiber模式
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229235136867-1612368052.png)
通過這個圖,我們可以看到Fiber模式主要是用於轉換為光纖模式,【註】1000BASE-X表示光纖介面,1000BASE-T表示銅介質雙絞線介面。
Fiber模式下配置 HWCFG_MODE[3:0] 寄存器來切換模式的配置表如下。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229221920969-353994715.png)
GMII to Fiber Mode
手冊上強調了一下當配置HWCFG_MODE[3:0] 為”0111“,將模式選擇為GMII轉光纖的模式,如果GMII那邊是連接的MAC層的話,只能選擇強制千兆的模式,如果phy晶元是用於串列介面的電平轉換的時候,並非一邊連接的MAC層的話,是支持千兆自協商模式的。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229235235173-2039660958.png)
3.GMII/MII to SGMII and RGMII to SGMII Mode
這是手冊上寫的第三種特殊的模式,他意思是純粹的電平協議轉換,並不涉及到Copper或者Fiber。現實中我們也經常會遇到這種情況,例如一張板卡的出去的phy晶元,對外為SGMII模式,連接到另一張板卡,另一張板卡對外也是SGMII模式,兩邊的phy互相連接就是通過SGMII來互相通信,此時這種模式下,支持10M/100M/1000M自協商模式。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229235333718-1591232035.png)
phy的硬體模式配置
88e1111如果硬體配置得當,正常來說是不需要軟體進行再次配置的,我們的硬體可以通過配置管腳配置整個phy晶元的模式,全雙工還是半雙工,速率等,接下來我們來看看硬體是如何通過配置管腳來配置這些的。
1.根據數據手冊可以看到,總共有7根管腳可以對phy晶元進行配置,每根管腳對應3個bit,每個bit都有不同的含義。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229235553809-137110856.png)
2.硬體通過將這7根管腳接上不同的管腳,來配置管腳對應的bit值。88e1111提供了一個映射表,不同的管腳對應不同的值。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229235702077-891902593.png)
3.將對應不同值的管腳連接到CONFIG[6:0]上以後,就能對phy的模式進行硬體配置,88e1111的數據手冊上提供了一個例子,很好的展示了一下該如何配置硬體配置管腳,將CONFIG0直接連接LED_RX管腳,就會將phy地址bit[2:0]配置為010,將CONFIG2接到LED_DUPLEX就能將模式配置為自協商1000base-t的模式。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229235823365-2037711657.png)
3、88e1111 phy晶元的軟體相關
1、軟體配置phy晶元的介面和時序
查看88e1111的數據手冊,我們可以看到,88e1111可以通過兩種方式進行寄存器配置等,一種是MDIO協議,一種是IIC協議,IIC支持100K或400K的速率,當軟體寄存器寫入以後,板卡需要進行軟複位操作,phy地址預設使用[4:0]五個bit表示,地址由硬體配置地址管腳高低電平來確定。
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301000848436-1376957874.png)
1.MDIO訪問phy寄存器
- MDIO讀寫時序圖如下
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301000953155-1365060119.png)
2.IIC訪問phy寄存器
- IIC讀寄存器時序圖如下
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001028874-1860314914.png)
- IIC寫寄存器時序圖如下
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001057853-813380049.png)
2、phy寄存器配置及實現
1.寄存器列表
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001136590-431896186.png)
2.R22 Extended Address 寄存器
可以根據上表可以看到,phy的寄存器根據page的切換大體可以分為copper和fiber兩種模式,根據數據手冊的說明,通過配置 R22 Extended Address 寄存器可以配置page0或者1,用以切換不同的模式。
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001236118-38623086.png)
3.R0 Control Register 寄存器
對phy寄存器進行配置以後,並不會立刻生效,需要對phy進行軟複位操作以後才能夠生效,通過配置R0 Control Register寄存器可以配置自協商,雙工等,同時也可以操作phy的軟複位操作。
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001316703-1296822841.png)
4.R1 Status Register 寄存器
通過查看phy的 R1 Status Register 寄存器可以查看許多情況,有一個小技巧是,在讀取 R17 PHY Specific Status Register 寄存器之前,可以先讀一下 R1 Status Register 的bit5,可以用以確定phy是否協商完成。
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001411727-1655736470.png)
5.R17 PHY Specific Status Register 寄存器
通過查看phy的 R17 PHY Specific Status Register 寄存器可以查看phy的link狀態,phy的速率,phy雙工模式。
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001449244-1611826169.png)
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等模式。
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001526062-40303866.png)
7.R2 PHY Identifier 寄存器
通過查看 R2 PHY Identifier 寄存器,可以獲取到phy的設備id,由圖可以看到,目前phy的id是0x141,通過讀取設備id可以判斷設備類型,以及phy設備是否能正常訪問。
![](https://img2024.cnblogs.com/blog/2960230/202403/2960230-20240301001617411-297632021.png)
4、總結
88e1111的配置大體上就是這些,此次主要涉及硬體和軟體配置,如果在實際調試過程中,phy的狀態感覺一直不太對勁,link不上的話,將兩邊phy晶元速率強制一下看看。在調試1000base-x的時候,很多時候都存在自協商不成功的情況,這個時候強制速率可以來看看連接狀態是否得到改善,還有一個要註意的點就是,88e1111在上電以後,需要做硬複位操作,這樣配置的參數才能得以啟動,當開發人員操作軟體寄存器對phy進行二次配置,也需要去配置 R0 Control Register 寄存器去軟複位一下phy晶元,這樣才能使寄存器的配置生效。