mac與phy如何?網路自適應,macphy自適應
這兩天修改網卡驅動以實現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環境。
首先說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一致。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。