這兩天修改網卡驅動以實現10/100/1000M自適應,因此研究了下phy芯片和emac驅動如何兼容10/100/1000M網絡環境,記錄在此。
網絡中設備端數據鏈路層由mac芯片和phy芯片組成,phy芯片根據外部網絡環境完成自動協商以及配置,驅動中根據phy狀態來配置mac,以達到phy與mac的相互配合工作。
現在主流的網卡phy芯片為100M和1000M,都是向下兼容。100M phy支持10/100M環境,1000M phy支持10/100/1000M環境。
http://blog.csdn.net/skyflying2012/article/details/8252843
以GMII/MII為例來研究,GMII是有8根rx/tx線,MII有4根rx/tx線。
首先以外接100Mphy芯片來研究。phy與外界網絡環境完成自動協商來確定其本身的速度。100M phy都支持MII接口,因此mac端就需要以MII接口定義與phy相連。
數據收發最重要的是提供正確的數據時鐘,來保證數據正確的采樣與發送。
對于100M phy,這個問題好解決,因為MII接口支持10/100M,4根數據線,只需要mac給phy提供2.5/25MHZ數據時鐘即可。
最值得研究的是外接1000M phy時如何適應10/100/1000M網絡環境。
首先說,這是一個倒推的過程,首先來看phy是如何處理10/100M和1000M環境的。mac的接口模式以及時鐘再根據phy的配置進行配置。
隨便找了一個1000M phy芯片的datasheet,RTL88E1111,對于GMII/MII接口的描述如下:


可以看出對于1000M phy,GTX_CLK TX_CLK都需要與mac相連,在10/100/1000M環境下我分別用示波器測量clk的確如上所說。
當然phy在自動協商完成后是其硬件邏輯會完成模式GMII/MII的轉換,而對于mac,則要由驅動根據phy的工作狀態來確定mac的接口模式以及需要提供的clk。
這也是我們軟件開發人員最需要關注的地方,根據phy的狀態,如何配置mac(接口模式 數據時鐘)來保證與phy一致。
網絡中設備端數據鏈路層由mac芯片和phy芯片組成,phy芯片根據外部網絡環境完成自動協商以及配置,驅動中根據phy狀態來配置mac,以達到phy與mac的相互配合工作。
現在主流的網卡phy芯片為100M和1000M,都是向下兼容。100M phy支持10/100M環境,1000M phy支持10/100/1000M環境。
首先說10/100/1000M都是指的數據收發速率,單位是bps。所以這里要從mac以及phy的數據收發接口下手。
mac與phy主流數據接口有GMII MII RMII等。接口規范中定義了數據收發信號線個數。接口定義可以看這篇文章:http://blog.csdn.net/skyflying2012/article/details/8252843
以GMII/MII為例來研究,GMII是有8根rx/tx線,MII有4根rx/tx線。
首先以外接100Mphy芯片來研究。phy與外界網絡環境完成自動協商來確定其本身的速度。100M phy都支持MII接口,因此mac端就需要以MII接口定義與phy相連。
數據收發最重要的是提供正確的數據時鐘,來保證數據正確的采樣與發送。
對于100M phy,這個問題好解決,因為MII接口支持10/100M,4根數據線,只需要mac給phy提供2.5/25MHZ數據時鐘即可。
最值得研究的是外接1000M phy時如何適應10/100/1000M網絡環境。
首先說,這是一個倒推的過程,首先來看phy是如何處理10/100M和1000M環境的。mac的接口模式以及時鐘再根據phy的配置進行配置。
隨便找了一個1000M phy芯片的datasheet,RTL88E1111,對于GMII/MII接口的描述如下:
根據這段描述看出,GMII接口模式支持1000M環境,但是在10/100M環境下phy完成自動協商確定為10/100BASE-TX后就切換為MII模式,GMII引腳都是與MII兼容的(MII下8根數據線有4根不用),GMII接口定義中有2個clk線,GTX_CLK TX_CLK(GMII/MII下rx clk由phy提供),GTX_CLK在GMII模式下提供125MHZ,TX_CLK在MII模式下提供2.5/25MHZ。下面給出一個mac與1000M phy硬件電路連接圖。
可以看出對于1000M phy,GTX_CLK TX_CLK都需要與mac相連,在10/100/1000M環境下我分別用示波器測量clk的確如上所說。
綜上,
對于100M phy,外部網絡10/100M切換,僅需要改變mac提供的數據時鐘即可,mac接口模式不變,因為MII兼容10/100M。
對于1000M phy,外部網絡10/100/1000M切換,首先需要改變mac的接口模式(使用的數據線個數不同了),因為10/100M下phy會切換為MII模式,根據接口模式在改變其數據時鐘。當然phy在自動協商完成后是其硬件邏輯會完成模式GMII/MII的轉換,而對于mac,則要由驅動根據phy的工作狀態來確定mac的接口模式以及需要提供的clk。
這也是我們軟件開發人員最需要關注的地方,根據phy的狀態,如何配置mac(接口模式 數據時鐘)來保證與phy一致。