天天看點

網口掃盲三:以太網晶片MAC和PHY的關系(轉) - limanjihe

網口掃盲三:以太網晶片MAC和PHY的關系(轉)

問:如何實作單片以太網微控制器?

答:訣竅是将微控制器、以太網媒體接入控制器(MAC)和實體接口收發器(PHY)整合進同一晶片,這樣能去掉許多外接元器件.這種方案可使MAC和PHY實作很好的比對,同時還可減小引腳數、縮小晶片面積.單片以太網微控制器還降低了功耗,特别是在采用掉電模式的情況下.

問:以太網MAC是什麼?

答:MAC即Media Access Control,即媒體通路控制子層協定.該協定位于OSI七層協定中資料鍊路層的下半部分,主要負責控制與連接配接實體層的實體媒體.在發送資料的時候,MAC協定可以事先判斷是否可以發送資料,如果可以發送将給資料加上一些控制資訊,最終将資料以及控制資訊以規定的格式發送到實體層;在接收資料的時候,MAC協定首先判斷輸入的資訊并是否發生傳輸錯誤,如果沒有錯誤,則去掉控制資訊發送至LLC層.該層協定是以太網MAC由IEEE-802.3以太網标準定義.最新的MAC同時支援10Mbps和100Mbps兩種速率.

以太網資料鍊路層(OSI協定)其實包含MAC(媒體通路控制)子層和LLC(邏輯鍊路控制)子層.一塊以太網卡MAC晶片的作用不但要實作MAC子層和LLC子層的功能,還要提供符合規範的PCI接口以實作和主機的資料交換.

MAC從PCI總線收到IP資料包(或者其他網絡層協定的資料包)後,将之拆分并重新打包成最大1518Byte,最小64Byte的幀.這個幀裡面包括了目标MAC位址、自己的源MAC位址和資料包裡面的協定類型(比如IP資料包的類型用80表示).最後還有一個DWORD(4Byte)的CRC碼.

可是目标的MAC位址是哪裡來的呢?這牽扯到一個ARP協定(介乎于網絡層和資料鍊路層的一個協定).第一次傳送某個目的IP位址的資料的時候,先會發出一個ARP包,其MAC的目标位址是廣播位址,裡面說到:”誰是xxx.xxx.xxx.xxx這個IP位址的主人?”因為是廣播包,所有這個區域網路的主機都收到了這個ARP請求.收到請求的主機将這個IP位址和自己的相比較,如果不相同就不予理會,如果相同就發出ARP響應包.這個IP位址的主機收到這個ARP請求包後回複的ARP響應裡說到:”我是這個IP位址的主人”.這個包裡面就包括了他的MAC位址.以後的給這個IP位址的幀的目标MAC位址就被确定了.(其它的協定如IPX/SPX也有相應的協定完成這些操作.)

IP位址和MAC位址之間的關聯關系儲存在主機系統裡面,叫做ARP表,由驅動程式和作業系統完成.在Microsoft的系統裡面可以用 “arp -a”指令檢視ARP表.

收到資料幀的時候也是一樣,做完CRC以後,如果沒有CRC效驗錯誤,就把幀頭去掉,把資料包拿出來通過标準的接口傳遞給驅動和上層的協定棧,最終正确的達到我們的應用程式.

還有一些控制幀,例如流控幀也需要MAC直接識别并執行相應的行為.

以太網MAC晶片的一端接計算機PCI總線,另外一端就接到PHY晶片上,它們之間是通過MII接口連結的.

問:什麼是MII?

答:MII即媒體獨立接口,它是IEEE-802.3定義的以太網行業标準."媒體獨立"表明在不對MAC硬體重新設計或替換的情況下,任何類型的PHY裝置都可以正常工作.它包括一個資料接口,以及一個MAC和PHY之間的管理接口.

  • 資料接口包括分别用于發送器和接收器的兩條獨立信道.每條信道都有自己的資料,時鐘和控制信号.MII資料接口總共需要16個信号,包括TX_ER,TXD<3:0>,TX_EN,TX_CLK, COL,RXD<3:0>,RX_EX,RX_CLK,CRS,RX_DV等.MII以4位半位元組方式傳送資料雙向傳輸,時鐘速率25MHz.其工作速率可達100Mb/s;
  • MII管理接口是個雙信号接口,一個是時鐘信号,另一個是資料信号.通過管理接口,上層能監視和控制PHY.其管理是使用SMI(Serial Management Interface)總線通過讀寫PHY的寄存器來完成的.PHY裡面的部分寄存器是IEEE定義的,這樣PHY把自己的目前的狀态反映到寄存器裡面,MAC通過SMI總線不斷的讀取PHY的狀态寄存器以得知目前PHY的狀态,例如連接配接速度,雙工的能力等.當然也可以通過SMI設定PHY的寄存器達到控制的目的,例如流控的打開關閉,自協商模式還是強制模式等.不論是實體連接配接的MII總線和SMI總線還是PHY的狀态寄存器和控制寄存器都是有IEEE的規範的,是以不同公司的MAC和PHY一樣可以協調工作.當然為了配合不同公司的PHY的自己特有的一些功能,驅動需要做相應的修改.

MII支援10Mbps和100Mbps的操作,一個接口由14根線組成,它的支援還是比較靈活的,但是有一個缺點是因為它一個端口用的信号線太多,如果一個8端口的交換機要用到112根線,16端口就要用到224根線,到32端口的話就要用到448根線,一般按照這個接口做交換機,是不太現實的,是以現代的交換機的制作都會用到其它的一些從MII簡化出來的标準,比如RMII,SMII,GMII等.

RMII是簡化的MII接口,在資料的收發上它比MII接口少了一倍的信号線,是以它一般要求是50MHz的總線時鐘.RMII一般用在多端口的交換機,它不是每個端口安排收,發兩個時鐘,而是所有的資料端口公用一個時鐘用于所有端口的收發,這裡就節省了不少的端口數目.RMII的一個端口要求7個資料線,比MII少了一倍,是以交換機能夠接入多一倍資料的端口.和MII一樣,RMII支援10Mbps和100Mbps的總線接口速度.

SMII是由思科提出的一種媒體接口,它有比RMII更少的信号線數目,S表示串行的意思.因為它隻用一根信号線傳送發送資料,一根信号線傳輸接受資料,是以為了滿足100Mbps的總線接口速度的需求,它的時鐘頻率就達到了125MHz,為什麼用125MHz,是因為資料線裡面會傳送一些控制資訊.SMII一個端口僅用4根信号線完成100Mbps的傳輸,比起RMII差不多又少了一倍的信号線.SMII在工業界的支援力度是很高的.同理,所有端口的資料收發都公用同一個外部的125MHz時鐘.

GMII是千兆網的MII接口,這個也有相應的RGMII接口,表示簡化了的GMII接口.   (注意區分:xMII接口信号線數 ,即TX/RX+CTRL  vs. xMII接口傳輸信号線數 ,即TX/RX)

MII總線

在IEEE802.3中規定的MII總線是一種用于将不同類型的PHY與相同網絡控制器(MAC)相連接配接的通用總線.網絡控制器可以用同樣的硬體接口與任何PHY .

GMII(Gigabit MII)

GMII采用8位接口資料,工作時鐘125MHz,是以傳輸速率可達1000Mbps.同時相容MII所規定的10/100 Mbps工作方式.

GMII接口資料結構符合IEEE以太網标準.該接口定義見IEEE 802.3-2000.

發送器:

  • GTXCLK——吉比特TX..信号的時鐘信号(125MHz)
  • TXCLK——10/100Mbps信号時鐘
  • TXD[7..0]——被發送資料
  • TXEN——發送器使能信号
  • TXER——發送器錯誤(用于破壞一個資料包)

注:在千兆速率下,向PHY提供GTXCLK信号,TXD,TXEN,TXER信号與此時鐘信号同步.否則,在10/100Mbps速率下,PHY提供TXCLK時鐘信号,其它信号與此信号同步.其工作頻率為25MHz(100M網絡)或2.5MHz(10M網絡).

接收器:

  • RXCLK——接收時鐘信号(從收到的資料中提取,是以與GTXCLK無關聯)
  • RXD[7..0]——接收資料
  • RXDV——接收資料有效訓示
  • RXER——接收資料出錯訓示
  • COL——沖突檢測(僅用于半雙工狀态)

管理配置

  • MDC——配置接口時鐘
  • MDIO——配置接口I/O

管理配置接口控制PHY的特性.該接口有32個寄存器位址,每個位址16位.其中前16個已經在"IEEE 802.3,2000-22.2.4 Management Functions"中規定了用途,其餘的則由各器件自己指定.

RMII(Reduced Media Independant Interface)

簡化媒體獨立接口

是标準的以太網接口之一,比MII有更少的I/O傳輸.

RMII口是用兩根線來傳輸資料的,MII口是用4根線來傳輸資料的,GMII是用8根線來傳輸資料的.MII/RMII隻是一種接口,對于10Mbps線速,MII的時鐘速率是2.5MHz就可以了,RMII則需要5MHz;對于100Mbps線速,MII需要的時鐘速率是25MHz,RMII則是50MHz.

MII/RMII用于傳輸以太網包,在MII/RMII接口是4/2bit的,在以太網的PHY裡需要做串并轉換,編解碼等才能在雙絞線和光纖上進行傳 輸,其幀格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN).以太網幀的格式為:前導符+開始位+目的mac位址+源mac位址+類型/長度+資料+padding(optional)+32bitCRC

如果有VLAN,則要在類型/長度後面加上2個位元組的vlan tag,其中12bit來表示vlan id,另外4bit表示資料的優先級!      

VLAN(Virtual Local Area Network)又稱虛拟區域網路,是指在交換區域網路的基礎上,采用網絡管理軟體建構的可跨越不同網段、不同網絡的端到端的邏輯網絡。一個VLAN組成一個邏輯子網,即一個邏輯廣播域,它可以覆寫多個網絡裝置,允許處于不同地理位置的網絡使用者加入到一個邏輯子網中。

問:以太網PHY是什麼?

答:PHY是實體接口收發器,它實作實體層.IEEE-802.3标準定義了以太網PHY.包括MII/GMII(媒體獨立接口)子層,PCS(實體編碼子層),PMA(實體媒體附加)子層,PMD(實體媒體相關)子層,MDI子層.它符合IEEE-802.3k中用于10Base-T(第14條)和100Base-TX(第24條和第25條)的規範.

PHY在發送資料的時候,收到MAC過來的資料(對PHY來說,沒有幀的概念,對它來說,都是資料而不管什麼位址,資料還是CRC.對于100BaseTX因為使用4B/5B編碼,每4bit就增加1bit的檢錯碼),然後把并行資料轉化為串行流資料,再按照實體層的編碼規則把資料編碼,再變為模拟信号把資料送出去.收資料時的流程反之. PHY還有個重要的功能就是實作CSMA/CD的部分功能.它可以檢測到網絡上是否有資料在傳送,如果有資料在傳送中就等待,一旦檢測到網絡空閑,再等待一個随機時間後将送資料出去.如果兩個碰巧同時送出了資料,那樣必将造成沖突,這時候,沖突檢測機制可以檢測到沖突,然後各等待一個随機的時間重新發送資料. 這個随機時間很有講究的,并不是一個常數,在不同的時刻計算出來的随機時間都是不同的,而且有多重算法來應付出現機率很低的同兩台主機之間的第二次沖突.

許多網友在接入Internt寬帶時,喜歡使用”搶線”強的網卡,就是因為不同的PHY碰撞後計算随機時間的方法設計上不同,使得有些網卡比較”占便宜”.不過,搶線隻對廣播域的網絡而言的,對于交換網絡和ADSL這樣點到點連接配接到局端裝置的接入方式沒什麼意義.而且”搶線”也隻是相對而言的,不會有質的變化.

現在交換機的普及使得交換網絡的普及,使得沖突域網絡少了很多,極大地提高了網絡的帶寬.但是如果用HUB,或者共享帶寬接入Internet的時候還是屬于沖突域網絡,有沖突碰撞的.交換機和HUB最大的差別就是:一個是建構點到點網絡的區域網路交換裝置,一個是建構沖突域網絡的區域網路互連裝置.

除此之外PHY還提供了和對端裝置連接配接的重要功能并通過LED燈顯示出自己目前的連接配接的狀态和工作狀态讓我們知道.當我們給網卡接入網線的時候,PHY不斷發出的脈沖信号檢測到對端有裝置,它們通過标準的”語言”交流,互相協商并卻定連接配接速度、雙工模式、是否采用流控等.通常情況下,協商的結果是兩個裝置中能同時支援的最大速度和最好的雙工模式.這個技術被稱為Auto-Negotiation或者NWAY,它們是一個意思–自動協商.

具體傳輸過程為,發送資料時,網卡首先偵聽媒體上是否有載波(載波由電壓訓示),如果有,則認為其他站點正在傳送資訊,繼續偵聽媒體.一旦通信媒體在一定時間段内(稱為幀間縫隙IFG=9.6微秒)是安靜的,即沒有被其他站點占用,則開始進行幀資料發送,同時繼續偵聽通信媒體,以檢測沖突.在發送資料期間,如果檢測到沖突,則立即停止該次發送,并向媒體發送一個“阻塞”信号,告知與其他站點已經發生沖突,進而丢棄那些可能一直在接收的、受到損壞的幀資料,并等待一段随機時間(CSMA/CD确定等待時間的算法是二進制指數退避算法).在等待一段随機時間後,再進行新的發送.如果重傳多次後(大于16次)仍發生沖突,就放棄發送. 接收時,網卡浏覽媒體上傳輸的每個幀,如果其長度小于64位元組,則認為是沖突碎片.如果接收到的幀不是沖突碎片且目的位址是本地位址,則對幀進行完整性校驗,如果幀長度大于1518位元組(稱為超長幀,可能由錯誤的LAN驅動程式或幹擾造成)或未能通過CRC校驗,則認為該幀發生了畸變.通過校驗的幀被認為是有效的,網卡将它接收下來進行本地處理.

網口掃盲三:以太網晶片MAC和PHY的關系(轉) - limanjihe

問:造成以太網MAC和PHY單片整合難度高的原因是什麼?

答:PHY整合了大量模拟硬體,而MAC是典型的全數字器件.晶片面積及模拟/數字混合架構是為什麼先将MAC內建進微控制器而将PHY留在片外的原因.更靈活、密度更高的晶片技術已經可以實作MAC和PHY的單晶片整合.

問: 網卡上除RJ-45接口外,還需要其它元件嗎?

答:PHY和MAC是網卡的主要組成部分,網卡一般用RJ-45插口,10M網卡的RJ-45插口也隻用了1,2,3,6四根針,而100M或1000M網卡的則是八根針都是全的.除此以外,還需要其它元件,因為雖然PHY提供絕大多數模拟支援,但在一個典型實作中,仍需外接6,7隻分立元件及一個區域網路絕緣子產品.絕緣子產品一般采用一個1:1的變壓器.這些部件的主要功能是為了保護PHY免遭由于電氣失誤而引起的損壞. 另外,一顆CMOS制程的晶片工作的時候産生的信号電平總是大于0V的(這取決于晶片的制程和設計需求),但是這樣的信号送到100米甚至更長的地方會有很大的直流分量的損失.而且如果外部網線直接和晶片相連的話,電磁感應(打雷)和靜電,很容易造成晶片的損壞.再就是裝置接地方法不同,電網環境不同會導緻雙方的0V電平不一緻,這樣信号從A傳到B,由于A裝置的0V電平和B點的0V電平不一樣,這樣會導緻很大的電流從電勢高的裝置流向電勢低的裝置.

  為了解決以上問題Transformer(隔離變壓器)這個器件就應運而生.它把PHY送出來的差分信号用差模耦合的線圈耦合濾波以增強信号,并且通過電磁場的轉換耦合到連接配接網線的另外一端.這樣不但使網線和PHY之間沒有實體上的連接配接而換傳遞了信号,隔斷了信号中的直流分量,還可以在不同0V電平的裝置中傳送資料. 隔離變壓器本身就是設計為耐2KV~3KV的電壓的.也起到了防雷感應(我個人認為這裡用防雷擊不合适)保護的作用.有些朋友的網絡裝置在雷雨天氣時容易被燒壞,大都是PCB設計不合理造成的,而且大都燒毀了裝置的接口,很少有晶片被燒毀的,就是隔離變壓器起到了保護作用. 隔離變壓器本身是個被動元件,隻是把PHY的信号耦合了到網線上,并沒有起到功率放大的作用.那麼一張網卡信号的傳輸的最長距離是誰決定的呢?

     一張網卡的傳輸最大距離和與對端裝置連接配接的相容性主要是PHY決定的.但是可以将信号送的超過100米的PHY其輸出的功率也比較大,更容易産生EMI的問題.這時候就需要合适的Transformer與之配合.作PHY的老大公司Marvell的PHY,常常可以傳送180~200米的距離,遠遠超過IEEE的100米的标準.

  RJ-45的接頭實作了網卡和網線的連接配接.它裡面有8個銅片可以和網線中的4對雙絞(8根)線對應連接配接.其中100M的網絡中1,2是傳送資料的,3,6是接收資料的.1,2之間是一對差分信号,也就是說它們的波形一樣,但是相位相差180度,同一時刻的電壓幅度互為正負.這樣的信号可以傳遞的更遠,抗幹擾能力強.同樣的,3,6也一樣是差分信号. 網線中的8根線,每兩根扭在一起成為一對.我們制作網線的時候,一定要注意要讓1,2在其中的一對,3,6在一對.否則長距離情況下使用這根網線的時候會導緻無法連接配接或連接配接很不穩定.

  現在新的PHY支援AUTO MDI-X功能(也需要Transformer支援).它可以實作RJ-45接口的1,2上的傳送信号線和3,6上的接收信号線的功能自動互相交換.有的PHY甚至支援一對線中的正信号和負信号的功能自動交換.這樣我們就不必為了到底連接配接某個裝置需要使用直通網線還是交叉網線而費心了.這項技術已經被廣泛的應用在交換機和SOHO路由器上.

  在1000Basd-T網絡中,其中最普遍的一種傳輸方式是使用網線中所有的4對雙絞線,其中增加了4,5和7,8來共同傳送接收資料.由于1000Based-T網絡的規範包含了AUTOMDI-X功能,是以不能嚴格确定它們的傳出或接收的關系,要看雙方的具體的協商結果.

  一片網卡主要功能的實作就基本上是上面這些器件了.

  其他的,還有一顆EEPROM晶片,通常是一顆93C46.裡面記錄了網卡晶片的供應商ID,子系統供應商ID,網卡的MAC位址,網卡的一些配置,如SMI總線上PHY的位址,BOOTROM的容量,是否啟用BOOTROM引導系統等東西.

  很多網卡上還有BOOTROM這個東西.它是用于無盤工作站引導作業系統的.既然無盤,一些引導用必需用到的程式和協定棧就放到裡面了,例如RPL,PXE等.實際上它就是一個标準的PCI ROM.是以才會有一些硬碟寫保護卡可以通過燒寫網卡的BootRom來實作.其實PCI裝置的ROM是可以放到主機闆BIOS裡面的.啟動電腦的時候一樣可以檢測到這個ROM并且正确識别它是什麼裝置的.AGP在配置上和PCI很多地方一樣,是以很多顯示卡的BIOS也可以放到主機闆BIOS裡面.這就是為什麼闆載的網卡我們從來沒有看到過BOOTROM的原因.

最後就是電源部分了.大多數網卡現在都使用3.3V或更低的電壓.有的是雙電壓的.是以需要電源轉換電路.

       而且網卡為了實作Wake on LAN功能,必須保證全部的PHY和MAC的極少一部分始終處于有電的狀态,這需要把主機闆上的5V Standby電壓轉換為PHY工作電壓的電路.在主機開機後,PHY的工作電壓應該被從5V轉出來的電壓替代以節省5V Standby的消耗.(許多劣質網卡沒有這麼做). 有Wake on LAN功能的網卡一般還有一個WOL的接口.那是因為PCI2.1以前沒有PCI裝置喚醒主機的功能,是以需要着一根線通過主機闆上的WOL的接口連到南橋裡面以實作WOL的功能.新的主機闆合網卡一般支援PCI2.2/2.3,擴充了PME#信号功能,不需要那個接口而通過PCI總線就可以實作喚醒功能.

我們現在來看兩個圖

網口掃盲三:以太網晶片MAC和PHY的關系(轉) - limanjihe

                                                                                                    MAC和PHY分開的以太網卡

網口掃盲三:以太網晶片MAC和PHY的關系(轉) - limanjihe

                                                                                MAC和PHY內建在一顆晶片的以太網卡

上圖中各部件為:

①RJ-45接口

②Transformer(隔離變壓器)

③PHY晶片

④MAC晶片

⑤EEPROM

⑥BOOTROM插槽

⑦WOL接頭

⑧晶振

⑨電壓轉換晶片

⑩LED訓示燈

網卡的功能主要有兩個:一是将電腦的資料封裝為幀,并通過網線(對無線網絡來說就是電磁波)将資料發送到網絡上去;二是接收網絡上其它裝置傳過來的幀,并将幀重新組合成資料,發送到所在的電腦中.網卡能接收所有在網絡上傳輸的信号,但正常情況下隻接受發送到該電腦的幀和廣播幀,将其餘的幀丢棄.然後,傳送到系統CPU做進一步處理.當電腦發送資料時,網卡等待合适的時間将分組插入到資料流中.接收系統通知電腦消息是否完整地到達,如果出現問題,将要求對方重新發送. 

問:10BaseT和100BaseTX PHY實作方式不同的原因何在?

答:兩種實作的分組描述本質上是一樣的,但兩者的信令機制完全不同.其目的是阻止一種硬體實作容易地處理兩種速度.10BaseT采用曼徹斯特編碼,100BaseTX采用4B/5B編碼.

問:什麼是曼徹斯特編碼?

答:曼徹斯特編碼又稱曼徹斯特相位編碼,它通過相位變化來實作每個位(圖2).通常,用一個時鐘周期中部的上升沿表示“1”,下降沿表示“0”.周期末端的相位變化可忽略不計,但有時又可能需要将這種相位變化計算在内,這取決于前一位的值.

網口掃盲三:以太網晶片MAC和PHY的關系(轉) - limanjihe

問:什麼是4B/5B編碼?

答:4B/5B編碼是一種塊編碼方式.它将一個4位的塊編碼成一個5位的塊.這就使5位塊内永遠至少包含2個“1”轉換,是以在一個5位塊内總能進行時鐘同步.該方法需要25%的額外開銷.

問:網卡的MAC和PHY間的關系?

答:網卡工作在OSI模型的最後兩層,實體層和資料鍊路層,實體層定義了資料傳送與接收所需要的電與光信号、線路狀态、時鐘基準、資料編碼和電路等,并向資料鍊路層裝置提供标準接口.實體層的晶片稱之為PHY.資料鍊路層則提供尋址機構、資料幀的建構、資料差錯檢查、傳送控制、向網絡層提供标準的資料接口等功能.以太網卡中資料鍊路層的晶片稱之為MAC控制器.很多網卡的這兩個部分是做到一起的.他們之間的關系是pci總線接mac總線,mac接phy,phy接網線(當然也不是直接接上的,還有一個變壓裝置).

  PHY和MAC之間是如何傳送資料和互相溝通的.通過IEEE定義的标準的MII/GigaMII(Media Independed Interfade,媒體獨立界面)界面連接配接MAC和PHY.這個界面是IEEE定義的.MII界面傳遞了網絡的所有資料和資料的控制.ETHERNET的接口實質是MAC通過MII總線控制PHY的過程.

問:網線上傳輸的是模拟信号還是數字信号?

答:是模拟信号.因為它傳出和接收是采用的模拟的技術.雖然它傳送的資訊是數字的(并不是傳送的資訊是數字的信号就可以叫做數字信号).

簡單的例子:我們知道電話是模拟信号,但是當我們撥号上網的時候,電話線裡傳送的是數字資訊,但信号本身依舊是模拟的.然而ADSL同樣是通過電話線傳送的,卻是數字信号.這取決于它傳出和接受采用的技術.

問:若作業系統沒有加載網卡驅動,網卡雖然在系統裝置樹上,但網卡接口建立不了,那網卡實際能不能接收到資料?

答:這裡面有很多細節, 我根據Intel網卡的Spec大概寫了寫, 想盡量寫的通俗一些,是以沒有刻意用Spec裡的術語,另外本文雖然講的是MAC/PHY,但光口卡的(SERDES)也是類似的. 

  1. PCI裝置做reset以後進入D0 un-initialized(非初始化的D0狀态, 參考PCI電源管理規範),此時網卡的MAC和DMA都不工作,PHY是工作在一個特殊的低電源狀态的;
  2. 作業系統建立裝置樹時,初始化這個裝置,PCI指令寄存器的 Memory Access Enable or the I/O Access Enable bit會被enable, 這就是D0-active.此時PHY/MAC就使能了;
  3. PHY被使能應該就可以接收實體鍊路上的資料了,否則不能收到FLP/NLP, PHY就不能建立實體連接配接.但這類包一般是流量間歇發送的;
  4. 驅動程式一般要通過寄存器來控制PHY, 比如自動協商speed/duplex, 查詢實體鍊路的狀态Link up/down;
  5. MAC被使能後, 如果沒有驅動設定控制寄存器的一個位(CTRL.SLU )的話, MAC和PHY是不能通訊的, 就是說MAC不知道PHY的link已經ready, 是以收不到任何資料的.這位設定以後, PHY完成自協商, 網卡才會有個Link change的中斷,知道實體連接配接已經Link UP了;
  6. 即使Link已經UP, MAC還需要enable接收器的一個位(RCTL.RXEN ),包才可以被接收進來,如果網卡被reset,這位是0,意味着所有的包都會被直接drop掉,不會存入網卡的 FIFO.老網卡在驅動退出前利用這位關掉接收.Intel的最新千兆網卡發送接收隊列的動态配置就是依靠這個位的,重新配置的過程一定要關掉流量;
  7. 無論驅動加載與否, 發生reset後,網卡EEPOM裡的mac位址會寫入網卡的MAC位址過濾寄存器, 驅動可以去修改這個寄存器,現代網卡通常支援很多MAC位址,也就是說,MAC位址是可以被軟體設定的.例如,Intel的千兆網卡就支援16個單點傳播 MAC位址,但隻有1個是存在EEPROM裡的,其它是軟體聲稱和設定的;
  8. 但如果驅動沒有加載,網卡已經在裝置樹上,作業系統完成了步驟1-2的初始化,此時網卡的PHY應該是工作的,但因為沒有人設定控制位(CTRL.SLU)來讓MAC和PHY建立聯系,是以MAC是不收包的.這個控制位在reset時會再設定成0;
  9. PHY可以被軟體設定加電和斷電, 斷電狀态除了接收管理指令以外,不會接收資料.另外,PHY還能工作在Smart Power Down模式下,link down就進入省電狀态;
  10. 有些多口網卡,多個網口共享一個PHY, 是以BIOS裡設定disbale了某個網口, 也未必會把PHY的電源關掉,反過來,也要小心地關掉PHY的電源;
  11. 要詳細了解PHY,最終還是要熟悉IEEE以太網的相關協定.

本文引用:http://blog.csdn.net/woodstar123/article/details/3324368

http://blog.csdn.net/yayong/article/details/5334565