問(wèn):如何實(shí)現(xiàn)單片以太網(wǎng)微控制器?
答:訣竅是將微控制器、以太網(wǎng)媒體接入控制器(MAC)和物理接口收發(fā)器(PHY)整合進(jìn)同一芯片,這樣能去掉許多外接元器件.這種方案可使MAC和PHY實(shí)現(xiàn)很好的匹配,同時(shí)還可減小引腳數(shù)、縮小芯片面積.單片以太網(wǎng)微控制器還降低了功耗,特別是在采用掉電模式的情況下.
問(wèn):以太網(wǎng)MAC是什么?
答:MAC即Media Access Control,即媒體訪(fǎng)問(wèn)控制子層協(xié)議.該協(xié)議位于OSI七層協(xié)議中數(shù)據(jù)鏈路層的下半部分,主要負(fù)責(zé)控制與連接物理層的物理介質(zhì).在發(fā)送數(shù)據(jù)的時(shí)候,MAC協(xié)議可以事先判斷是否可以發(fā)送數(shù)據(jù),如果可以發(fā)送將給數(shù)據(jù)加上一些控制信息,最終將數(shù)據(jù)以及控制信息以規(guī)定的格式發(fā)送到物理層;在接收數(shù)據(jù)的時(shí)候,MAC協(xié)議首先判斷輸入的信息并是否發(fā)生傳輸錯(cuò)誤,如果沒(méi)有錯(cuò)誤,則去掉控制信息發(fā)送至LLC層.該層協(xié)議是以太網(wǎng)MAC由IEEE-802.3以太網(wǎng)標(biāo)準(zhǔn)定義.最新的MAC同時(shí)支持10Mbps和100Mbps兩種速率.
以太網(wǎng)數(shù)據(jù)鏈路層其實(shí)包含MAC(介質(zhì)訪(fǎng)問(wèn)控制)子層和LLC(邏輯鏈路控制)子層.一塊以太網(wǎng)卡MAC芯片的作用不但要實(shí)現(xiàn)MAC子層和LLC子層的功能,還要提供符合規(guī)范的PCI界面以實(shí)現(xiàn)和主機(jī)的數(shù)據(jù)交換.
MAC從PCI總線(xiàn)收到IP數(shù)據(jù)包(或者其他網(wǎng)絡(luò)層協(xié)議的數(shù)據(jù)包)后,將之拆分并重新打包成最大1518Byte,最小64Byte的幀.這個(gè)幀里面包括了目標(biāo)MAC地址、自己的源MAC地址和數(shù)據(jù)包里面的協(xié)議類(lèi)型(比如IP數(shù)據(jù)包的類(lèi)型用80表示).最后還有一個(gè)DWORD(4Byte)的CRC碼.
可是目標(biāo)的MAC地址是哪里來(lái)的呢?這牽扯到一個(gè)ARP協(xié)議(介乎于網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層的一個(gè)協(xié)議).第一次傳送某個(gè)目的IP地址的數(shù)據(jù)的時(shí)候,先會(huì)發(fā)出一個(gè)ARP包,其MAC的目標(biāo)地址是廣播地址,里面說(shuō)到:”誰(shuí)是xxx.xxx.xxx.xxx這個(gè)IP地址的主人?”因?yàn)槭菑V播包,所有這個(gè)局域網(wǎng)的主機(jī)都收到了這個(gè)ARP請(qǐng)求.收到請(qǐng)求的主機(jī)將這個(gè)IP地址和自己的相比較,如果不相同就不予理會(huì),如果相同就發(fā)出ARP響應(yīng)包.這個(gè)IP地址的主機(jī)收到這個(gè)ARP請(qǐng)求包后回復(fù)的ARP響應(yīng)里說(shuō)到:”我是這個(gè)IP地址的主人”.這個(gè)包里面就包括了他的MAC地址.以后的給這個(gè)IP地址的幀的目標(biāo)MAC地址就被確定了.(其它的協(xié)議如IPX/SPX也有相應(yīng)的協(xié)議完成這些操作.)
IP地址和MAC地址之間的關(guān)聯(lián)關(guān)系保存在主機(jī)系統(tǒng)里面,叫做ARP表,由驅(qū)動(dòng)程序和操作系統(tǒng)完成.在Microsoft的系統(tǒng)里面可以用arp-a的命令查看ARP表.收到數(shù)據(jù)幀的時(shí)候也是一樣,做完CRC以后,如果沒(méi)有CRC效驗(yàn)錯(cuò)誤,就把幀頭去掉,把數(shù)據(jù)包拿出來(lái)通過(guò)標(biāo)準(zhǔn)的借口傳遞給驅(qū)動(dòng)和上層的協(xié)議客棧,最終正確的達(dá)到我們的應(yīng)用程序.
還有一些控制幀,例如流控幀也需要MAC直接識(shí)別并執(zhí)行相應(yīng)的行為.
以太網(wǎng)MAC芯片的一端接計(jì)算機(jī)PCI總線(xiàn),另外一端就接到PHY芯片上,它們之間是通過(guò)MII接口鏈接的.
問(wèn):什么是MII?
答:MII即媒體獨(dú)立接口,它是IEEE-802.3定義的以太網(wǎng)行業(yè)標(biāo)準(zhǔn)."媒體獨(dú)立"表明在不對(duì)MAC硬件重新設(shè)計(jì)或替換的情況下,任何類(lèi)型的PHY設(shè)備都可以正常工作.它包括一個(gè)數(shù)據(jù)接口,以及一個(gè)MAC和PHY之間的管理接口.
數(shù)據(jù)接口包括分別用于發(fā)送器和接收器的兩條獨(dú)立信道.每條信道都有自己的數(shù)據(jù),時(shí)鐘和控制信號(hào).MII數(shù)據(jù)接口總共需要16個(gè)信號(hào),包括TX_ER,TXD<3:0>,TX_EN,TX_CLK, COL,RXD<3:0>,RX_EX,RX_CLK,CRS,RX_DV等.MII以4位半字節(jié)方式傳送數(shù)據(jù)雙向傳輸,時(shí)鐘速率25MHz.其工作速率可達(dá)100Mb/s;
MII管理接口是個(gè)雙信號(hào)接口,一個(gè)是時(shí)鐘信號(hào),另一個(gè)是數(shù)據(jù)信號(hào).通過(guò)管理接口,上層能監(jiān)視和控制PHY.其管理是使用SMI(Serial Management Interface)總線(xiàn)通過(guò)讀寫(xiě)PHY的寄存器來(lái)完成的.PHY里面的部分寄存器是IEEE定義的,這樣PHY把自己的目前的狀態(tài)反映到寄存器里面,MAC通過(guò)SMI總線(xiàn)不斷的讀取PHY的狀態(tài)寄存器以得知目前PHY的狀態(tài),例如連接速度,雙工的能力等.當(dāng)然也可以通過(guò)SMI設(shè)置PHY的寄存器達(dá)到控制的目的,例如流控的打開(kāi)關(guān)閉,自協(xié)商模式還是強(qiáng)制模式等.不論是物理連接的MII總線(xiàn)和SMI總線(xiàn)還是PHY的狀態(tài)寄存器和控制寄存器都是有IEEE的規(guī)范的,因此不同公司的MAC和PHY一樣可以協(xié)調(diào)工作.當(dāng)然為了配合不同公司的PHY的自己特有的一些功能,驅(qū)動(dòng)需要做相應(yīng)的修改.
MII支持10Mbps和100Mbps的操作,一個(gè)接口由14根線(xiàn)組成,它的支持還是比較靈活的,但是有一個(gè)缺點(diǎn)是因?yàn)樗粋€(gè)端口用的信號(hào)線(xiàn)太多,如果一個(gè)8端口的交換機(jī)要用到112根線(xiàn),16端口就要用到224根線(xiàn),到32端口的話(huà)就要用到448根線(xiàn),一般按照這個(gè)接口做交換機(jī),是不太現(xiàn)實(shí)的,所以現(xiàn)代的交換機(jī)的制作都會(huì)用到其它的一些從MII簡(jiǎn)化出來(lái)的標(biāo)準(zhǔn),比如RMII,SMII,GMII等.
RMII是簡(jiǎn)化的MII接口,在數(shù)據(jù)的收發(fā)上它比MII接口少了一倍的信號(hào)線(xiàn),所以它一般要求是50MHz的總線(xiàn)時(shí)鐘.RMII一般用在多端口的交換機(jī),它不是每個(gè)端口安排收,發(fā)兩個(gè)時(shí)鐘,而是所有的數(shù)據(jù)端口公用一個(gè)時(shí)鐘用于所有端口的收發(fā),這里就節(jié)省了不少的端口數(shù)目.RMII的一個(gè)端口要求7個(gè)數(shù)據(jù)線(xiàn),比MII少了一倍,所以交換機(jī)能夠接入多一倍數(shù)據(jù)的端口.和MII一樣,RMII支持10Mbps和100Mbps的總線(xiàn)接口速度.
SMII是由思科提出的一種媒體接口,它有比RMII更少的信號(hào)線(xiàn)數(shù)目,S表示串行的意思.因?yàn)樗挥靡桓盘?hào)線(xiàn)傳送發(fā)送數(shù)據(jù),一根信號(hào)線(xiàn)傳輸接受數(shù)據(jù),所以為了滿(mǎn)足100Mbps的總線(xiàn)接口速度的需求,它的時(shí)鐘頻率就達(dá)到了125MHz,為什么用125MHz,是因?yàn)閿?shù)據(jù)線(xiàn)里面會(huì)傳送一些控制信息.SMII一個(gè)端口僅用4根信號(hào)線(xiàn)完成100Mbps的傳輸,比起RMII差不多又少了一倍的信號(hào)線(xiàn).SMII在工業(yè)界的支持力度是很高的.同理,所有端口的數(shù)據(jù)收發(fā)都公用同一個(gè)外部的125MHz時(shí)鐘.
GMII是千兆網(wǎng)的MII接口,這個(gè)也有相應(yīng)的RGMII接口,表示簡(jiǎn)化了的GMII接口.
MII總線(xiàn)
在IEEE802.3中規(guī)定的MII總線(xiàn)是一種用于將不同類(lèi)型的PHY與相同網(wǎng)絡(luò)控制器(MAC)相連接的通用總線(xiàn).網(wǎng)絡(luò)控制器可以用同樣的硬件接口與任何PHY .
GMII(Gigabit MII)
GMII采用8位接口數(shù)據(jù),工作時(shí)鐘125MHz,因此傳輸速率可達(dá)1000Mbps.同時(shí)兼容MII所規(guī)定的10/100 Mbps工作方式.
GMII接口數(shù)據(jù)結(jié)構(gòu)符合IEEE以太網(wǎng)標(biāo)準(zhǔn).該接口定義見(jiàn)IEEE 802.3-2000.
發(fā)送器:
GTXCLK——吉比特TX..信號(hào)的時(shí)鐘信號(hào)(125MHz)
TXCLK——10/100Mbps信號(hào)時(shí)鐘
TXD[7..0]——被發(fā)送數(shù)據(jù)
TXEN——發(fā)送器使能信號(hào)
TXER——發(fā)送器錯(cuò)誤(用于破壞一個(gè)數(shù)據(jù)包)
注:在千兆速率下,向PHY提供GTXCLK信號(hào),TXD,TXEN,TXER信號(hào)與此時(shí)鐘信號(hào)同步.否則,在10/100Mbps速率下,PHY提供TXCLK時(shí)鐘信號(hào),其它信號(hào)與此信號(hào)同步.其工作頻率為25MHz(100M網(wǎng)絡(luò))或2.5MHz(10M網(wǎng)絡(luò)).
接收器:
RXCLK——接收時(shí)鐘信號(hào)(從收到的數(shù)據(jù)中提取,因此與GTXCLK無(wú)關(guān)聯(lián))
RXD[7..0]——接收數(shù)據(jù)
RXDV——接收數(shù)據(jù)有效指示
RXER——接收數(shù)據(jù)出錯(cuò)指示
COL——沖突檢測(cè)(僅用于半雙工狀態(tài))
管理配置
MDC——配置接口時(shí)鐘
MDIO——配置接口I/O
管理配置接口控制PHY的特性.該接口有32個(gè)寄存器地址,每個(gè)地址16位.其中前16個(gè)已經(jīng)在"IEEE 802.3,2000-22.2.4 Management Functions"中規(guī)定了用途,其余的則由各器件自己指定.
RMII(Reduced Media Independant Interface)
簡(jiǎn)化媒體獨(dú)立接口
是標(biāo)準(zhǔn)的以太網(wǎng)接口之一,比MII有更少的I/O傳輸.
RMII口是用兩根線(xiàn)來(lái)傳輸數(shù)據(jù)的,MII口是用4根線(xiàn)來(lái)傳輸數(shù)據(jù)的,GMII是用8根線(xiàn)來(lái)傳輸數(shù)據(jù)的.MII/RMII只是一種接口,對(duì)于10Mbps線(xiàn)速,MII的時(shí)鐘速率是2.5MHz就可以了,RMII則需要5MHz;對(duì)于100Mbps線(xiàn)速,MII需要的時(shí)鐘速率是25MHz,RMII則是50MHz.
MII/RMII用于傳輸以太網(wǎng)包,在MII/RMII接口是4/2bit的,在以太網(wǎng)的PHY里需要做串并轉(zhuǎn)換,編解碼等才能在雙絞線(xiàn)和光纖上進(jìn)行傳 輸,其幀格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN).以太網(wǎng)幀的格式為:前導(dǎo)符+開(kāi)始位+目的mac地址+源mac地址+類(lèi)型/長(zhǎng)度+數(shù)據(jù)+padding(optional)+32bitCRC
如果有vlan,則要在類(lèi)型/長(zhǎng)度后面加上2個(gè)字節(jié)的vlan tag,其中12bit來(lái)表示vlan id,另外4bit表示數(shù)據(jù)的優(yōu)先級(jí)!
問(wèn):以太網(wǎng)PHY是什么?
答:PHY是物理接口收發(fā)器,它實(shí)現(xiàn)物理層.IEEE-802.3標(biāo)準(zhǔn)定義了以太網(wǎng)PHY.包括MII/GMII(介質(zhì)獨(dú)立接口)子層,PCS(物理編碼子層),PMA(物理介質(zhì)附加)子層,PMD(物理介質(zhì)相關(guān))子層,MDI子層.它符合IEEE-802.3k中用于10BaseT(第14條)和100BaseTX(第24條和第25條)的規(guī)范.
PHY在發(fā)送數(shù)據(jù)的時(shí)候,收到MAC過(guò)來(lái)的數(shù)據(jù)(對(duì)PHY來(lái)說(shuō),沒(méi)有幀的概念,對(duì)它來(lái)說(shuō),都是數(shù)據(jù)而不管什么地址,數(shù)據(jù)還是CRC.對(duì)于100BaseTX因?yàn)槭褂?B/5B編碼,每4bit就增加1bit的檢錯(cuò)碼),然后把并行數(shù)據(jù)轉(zhuǎn)化為串行流數(shù)據(jù),再按照物理層的編碼規(guī)則把數(shù)據(jù)編碼,再變?yōu)?a href="http://www.delux-kingway.cn/analog/" target="_blank">模擬信號(hào)把數(shù)據(jù)送出去.收數(shù)據(jù)時(shí)的流程反之.PHY還有個(gè)重要的功能就是實(shí)現(xiàn)CSMA/CD的部分功能.它可以檢測(cè)到網(wǎng)絡(luò)上是否有數(shù)據(jù)在傳送,如果有數(shù)據(jù)在傳送中就等待,一旦檢測(cè)到網(wǎng)絡(luò)空閑,再等待一個(gè)隨機(jī)時(shí)間后將送數(shù)據(jù)出去.如果兩個(gè)碰巧同時(shí)送出了數(shù)據(jù),那樣必將造成沖突,這時(shí)候,沖突檢測(cè)機(jī)構(gòu)可以檢測(cè)到?jīng)_突,然后各等待一個(gè)隨機(jī)的時(shí)間重新發(fā)送數(shù)據(jù).這個(gè)隨機(jī)時(shí)間很有講究的,并不是一個(gè)常數(shù),在不同的時(shí)刻計(jì)算出來(lái)的隨機(jī)時(shí)間都是不同的,而且有多重算法來(lái)應(yīng)付出現(xiàn)概率很低的同兩臺(tái)主機(jī)之間的第二次沖突.
許多網(wǎng)友在接入Internt寬帶時(shí),喜歡使用”搶線(xiàn)”強(qiáng)的網(wǎng)卡,就是因?yàn)椴煌腜HY碰撞后計(jì)算隨機(jī)時(shí)間的方法設(shè)計(jì)上不同,使得有些網(wǎng)卡比較”占便宜”.不過(guò),搶線(xiàn)只對(duì)廣播域的網(wǎng)絡(luò)而言的,對(duì)于交換網(wǎng)絡(luò)和ADSL這樣點(diǎn)到點(diǎn)連接到局端設(shè)備的接入方式?jīng)]什么意義.而且”搶線(xiàn)”也只是相對(duì)而言的,不會(huì)有質(zhì)的變化.
現(xiàn)在交換機(jī)的普及使得交換網(wǎng)絡(luò)的普及,使得沖突域網(wǎng)絡(luò)少了很多,極大地提高了網(wǎng)絡(luò)的帶寬.但是如果用HUB,或者共享帶寬接入Internet的時(shí)候還是屬于沖突域網(wǎng)絡(luò),有沖突碰撞的.交換機(jī)和HUB最大的區(qū)別就是:一個(gè)是構(gòu)建點(diǎn)到點(diǎn)網(wǎng)絡(luò)的局域網(wǎng)交換設(shè)備,一個(gè)是構(gòu)建沖突域網(wǎng)絡(luò)的局域網(wǎng)互連設(shè)備.
除此之外PHY還提供了和對(duì)端設(shè)備連接的重要功能并通過(guò)LED燈顯示出自己目前的連接的狀態(tài)和工作狀態(tài)讓我們知道.當(dāng)我們給網(wǎng)卡接入網(wǎng)線(xiàn)的時(shí)候,PHY不斷發(fā)出的脈沖信號(hào)檢測(cè)到對(duì)端有設(shè)備,它們通過(guò)標(biāo)準(zhǔn)的”語(yǔ)言”交流,互相協(xié)商并卻定連接速度、雙工模式、是否采用流控等.通常情況下,協(xié)商的結(jié)果是兩個(gè)設(shè)備中能同時(shí)支持的最大速度和最好的雙工模式.這個(gè)技術(shù)被稱(chēng)為AutoNegotiation或者NWAY,它們是一個(gè)意思–自動(dòng)協(xié)商.
具體傳輸過(guò)程為,發(fā)送數(shù)據(jù)時(shí),網(wǎng)卡首先偵聽(tīng)介質(zhì)上是否有載波(載波由電壓指示),如果有,則認(rèn)為其他站點(diǎn)正在傳送信息,繼續(xù)偵聽(tīng)介質(zhì).一旦通信介質(zhì)在一定時(shí)間段內(nèi)(稱(chēng)為幀間縫隙IFG=9.6微秒)是安靜的,即沒(méi)有被其他站點(diǎn)占用,則開(kāi)始進(jìn)行幀數(shù)據(jù)發(fā)送,同時(shí)繼續(xù)偵聽(tīng)通信介質(zhì),以檢測(cè)沖突.在發(fā)送數(shù)據(jù)期間,如果檢測(cè)到?jīng)_突,則立即停止該次發(fā)送,并向介質(zhì)發(fā)送一個(gè)“阻塞”信號(hào),告知其他站點(diǎn)已經(jīng)發(fā)生沖突,從而丟棄那些可能一直在接收的受到損壞的幀數(shù)據(jù),并等待一段隨機(jī)時(shí)間(CSMA/CD確定等待時(shí)間的算法是二進(jìn)制指數(shù)退避算法).在等待一段隨機(jī)時(shí)間后,再進(jìn)行新的發(fā)送.如果重傳多次后(大于16次)仍發(fā)生沖突,就放棄發(fā)送.接收時(shí),網(wǎng)卡瀏覽介質(zhì)上傳輸?shù)拿總€(gè)幀,如果其長(zhǎng)度小于64字節(jié),則認(rèn)為是沖突碎片.如果接收到的幀不是沖突碎片且目的地址是本地地址,則對(duì)幀進(jìn)行完整性校驗(yàn),如果幀長(zhǎng)度大于1518字節(jié)(稱(chēng)為超長(zhǎng)幀,可能由錯(cuò)誤的LAN驅(qū)動(dòng)程序或干擾造成)或未能通過(guò)CRC校驗(yàn),則認(rèn)為該幀發(fā)生了畸變.通過(guò)校驗(yàn)的幀被認(rèn)為是有效的,網(wǎng)卡將它接收下來(lái)進(jìn)行本地處理.
問(wèn):造成以太網(wǎng)MAC和PHY單片整合難度高的原因是什么?
答:PHY整合了大量模擬硬件,而MAC是典型的全數(shù)字器件.芯片面積及模擬/數(shù)字混合架構(gòu)是為什么先將MAC集成進(jìn)微控制器而將PHY留在片外的原因.更靈活、密度更高的芯片技術(shù)已經(jīng)可以實(shí)現(xiàn)MAC和PHY的單芯片整合.
問(wèn): 網(wǎng)卡上除RJ-45接口外,還需要其它元件嗎?
答:PHY和MAC是網(wǎng)卡的主要組成部分,網(wǎng)卡一般用RJ-45插口,10M網(wǎng)卡的RJ-45插口也只用了1,2,3,6四根針,而100M或1000M網(wǎng)卡的則是八根針都是全的.除此以外,還需要其它元件,因?yàn)殡m然PHY提供絕大多數(shù)模擬支持,但在一個(gè)典型實(shí)現(xiàn)中,仍需外接6,7只分立元件及一個(gè)局域網(wǎng)絕緣模塊.絕緣模塊一般采用一個(gè)1:1的變壓器.這些部件的主要功能是為了保護(hù)PHY免遭由于電氣失誤而引起的損壞.
另外,一顆CMOS制程的芯片工作的時(shí)候產(chǎn)生的信號(hào)電平總是大于0V的(這取決于芯片的制程和設(shè)計(jì)需求),但是這樣的信號(hào)送到100米甚至更長(zhǎng)的地方會(huì)有很大的直流分量的損失.而且如果外部網(wǎng)線(xiàn)直接和芯片相連的話(huà),電磁感應(yīng)(打雷)和靜電,很容易造成芯片的損壞.再就是設(shè)備接地方法不同,電網(wǎng)環(huán)境不同會(huì)導(dǎo)致雙方的0V電平不一致,這樣信號(hào)從A傳到B,由于A設(shè)備的0V電平和B點(diǎn)的0V電平不一樣,這樣會(huì)導(dǎo)致很大的電流從電勢(shì)高的設(shè)備流向電勢(shì)低的設(shè)備.
為了解決以上問(wèn)題Transformer(隔離變壓器)這個(gè)器件就應(yīng)運(yùn)而生.它把PHY送出來(lái)的差分信號(hào)用差模耦合的線(xiàn)圈耦合濾波以增強(qiáng)信號(hào),并且通過(guò)電磁場(chǎng)的轉(zhuǎn)換耦合到連接網(wǎng)線(xiàn)的另外一端.這樣不但使網(wǎng)線(xiàn)和PHY之間沒(méi)有物理上的連接而換傳遞了信號(hào),隔斷了信號(hào)中的直流分量,還可以在不同0V電平的設(shè)備中傳送數(shù)據(jù).
隔離變壓器本身就是設(shè)計(jì)為耐2KV~3KV的電壓的.也起到了防雷感應(yīng)(我個(gè)人認(rèn)為這里用防雷擊不合適)保護(hù)的作用.有些朋友的網(wǎng)絡(luò)設(shè)備在雷雨天氣時(shí)容易被燒壞,大都是pcb設(shè)計(jì)不合理造成的,而且大都燒毀了設(shè)備的接口,很少有芯片被燒毀的,就是隔離變壓器起到了保護(hù)作用.
隔離變壓器本身是個(gè)被動(dòng)元件,只是把PHY的信號(hào)耦合了到網(wǎng)線(xiàn)上,并沒(méi)有起到功率放大的作用.那么一張網(wǎng)卡信號(hào)的傳輸?shù)淖铋L(zhǎng)距離是誰(shuí)決定的呢?
一張網(wǎng)卡的傳輸最大距離和與對(duì)端設(shè)備連接的兼容性主要是PHY決定的.但是可以將信號(hào)送的超過(guò)100米的PHY其輸出的功率也比較大,更容易產(chǎn)生EMI的問(wèn)題.這時(shí)候就需要合適的Transformer與之配合.作PHY的老大公司Marvell的PHY,常??梢詡魉?80~200米的距離,遠(yuǎn)遠(yuǎn)超過(guò)IEEE的100米的標(biāo)準(zhǔn).
RJ-45的接頭實(shí)現(xiàn)了網(wǎng)卡和網(wǎng)線(xiàn)的連接.它里面有8個(gè)銅片可以和網(wǎng)線(xiàn)中的4對(duì)雙絞(8根)線(xiàn)對(duì)應(yīng)連接.其中100M的網(wǎng)絡(luò)中1,2是傳送數(shù)據(jù)的,3,6是接收數(shù)據(jù)的.1,2之間是一對(duì)差分信號(hào),也就是說(shuō)它們的波形一樣,但是相位相差180度,同一時(shí)刻的電壓幅度互為正負(fù).這樣的信號(hào)可以傳遞的更遠(yuǎn),抗干擾能力強(qiáng).同樣的,3,6也一樣是差分信號(hào).
網(wǎng)線(xiàn)中的8根線(xiàn),每?jī)筛ぴ谝黄鸪蔀橐粚?duì).我們制作網(wǎng)線(xiàn)的時(shí)候,一定要注意要讓1,2在其中的一對(duì),3,6在一對(duì).否則長(zhǎng)距離情況下使用這根網(wǎng)線(xiàn)的時(shí)候會(huì)導(dǎo)致無(wú)法連接或連接很不穩(wěn)定.
現(xiàn)在新的PHY支持AUTO MDI-X功能(也需要Transformer支持).它可以實(shí)現(xiàn)RJ-45接口的1,2上的傳送信號(hào)線(xiàn)和3,6上的接收信號(hào)線(xiàn)的功能自動(dòng)互相交換.有的PHY甚至支持一對(duì)線(xiàn)中的正信號(hào)和負(fù)信號(hào)的功能自動(dòng)交換.這樣我們就不必為了到底連接某個(gè)設(shè)備需要使用直通網(wǎng)線(xiàn)還是交叉網(wǎng)線(xiàn)而費(fèi)心了.這項(xiàng)技術(shù)已經(jīng)被廣泛的應(yīng)用在交換機(jī)和SOHO路由器上.
在1000Basd-T網(wǎng)絡(luò)中,其中最普遍的一種傳輸方式是使用網(wǎng)線(xiàn)中所有的4對(duì)雙絞線(xiàn),其中增加了4,5和7,8來(lái)共同傳送接收數(shù)據(jù).由于1000Based-T網(wǎng)絡(luò)的規(guī)范包含了AUTOMDI-X功能,因此不能?chē)?yán)格確定它們的傳出或接收的關(guān)系,要看雙方的具體的協(xié)商結(jié)果.
一片網(wǎng)卡主要功能的實(shí)現(xiàn)就基本上是上面這些器件了.
其他的,還有一顆EEPROM芯片,通常是一顆93C46.里面記錄了網(wǎng)卡芯片的供應(yīng)商ID,子系統(tǒng)供應(yīng)商ID,網(wǎng)卡的MAC地址,網(wǎng)卡的一些配置,如SMI總線(xiàn)上PHY的地址,BOOTROM的容量,是否啟用BOOTROM引導(dǎo)系統(tǒng)等東西.
很多網(wǎng)卡上還有BOOTROM這個(gè)東西.它是用于無(wú)盤(pán)工作站引導(dǎo)操作系統(tǒng)的.既然無(wú)盤(pán),一些引導(dǎo)用必需用到的程序和協(xié)議棧就放到里面了,例如RPL,PXE等.實(shí)際上它就是一個(gè)標(biāo)準(zhǔn)的PCI ROM.所以才會(huì)有一些硬盤(pán)寫(xiě)保護(hù)卡可以通過(guò)燒寫(xiě)網(wǎng)卡的BootRom來(lái)實(shí)現(xiàn).其實(shí)PCI設(shè)備的ROM是可以放到主板BIOS里面的.啟動(dòng)電腦的時(shí)候一樣可以檢測(cè)到這個(gè)ROM并且正確識(shí)別它是什么設(shè)備的.AGP在配置上和PCI很多地方一樣,所以很多顯卡的BIOS也可以放到主板BIOS里面.這就是為什么板載的網(wǎng)卡我們從來(lái)沒(méi)有看到過(guò)BOOTROM的原因.
最后就是電源部分了.大多數(shù)網(wǎng)卡現(xiàn)在都使用3.3V或更低的電壓.有的是雙電壓的.因此需要電源轉(zhuǎn)換電路.
而且網(wǎng)卡為了實(shí)現(xiàn)Wake on line功能,必須保證全部的PHY和MAC的極少一部分始終處于有電的狀態(tài),這需要把主板上的5V Standby電壓轉(zhuǎn)換為PHY工作電壓的電路.在主機(jī)開(kāi)機(jī)后,PHY的工作電壓應(yīng)該被從5V轉(zhuǎn)出來(lái)的電壓替代以節(jié)省5V Standby的消耗.(許多劣質(zhì)網(wǎng)卡沒(méi)有這么做).
有Wake on line功能的網(wǎng)卡一般還有一個(gè)WOL的接口.那是因?yàn)镻CI2.1以前沒(méi)有PCI設(shè)備喚醒主機(jī)的功能,所以需要著一根線(xiàn)通過(guò)主板上的WOL的接口連到南橋里面以實(shí)現(xiàn)WOL的功能.新的主板合網(wǎng)卡一般支持PCI2.2/2.3,擴(kuò)展了PME#信號(hào)功能,不需要那個(gè)接口而通過(guò)PCI總線(xiàn)就可以實(shí)現(xiàn)喚醒功能.
?
MAC和PHY集成在一顆芯片的以太網(wǎng)卡
各部件為:
①RJ-45接口
②Transformer(隔離變壓器)
③PHY芯片
④MAC芯片
⑤EEPROM
⑥BOOTROM插槽
⑦WOL接頭
⑧晶振
⑨電壓轉(zhuǎn)換芯片
網(wǎng)卡的功能主要有兩個(gè):一是將電腦的數(shù)據(jù)封裝為幀,并通過(guò)網(wǎng)線(xiàn)(對(duì)無(wú)線(xiàn)網(wǎng)絡(luò)來(lái)說(shuō)就是電磁波)將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上去;二是接收網(wǎng)絡(luò)上其它設(shè)備傳過(guò)來(lái)的幀,并將幀重新組合成數(shù)據(jù),發(fā)送到所在的電腦中.網(wǎng)卡能接收所有在網(wǎng)絡(luò)上傳輸?shù)男盘?hào),但正常情況下只接受發(fā)送到該電腦的幀和廣播幀,將其余的幀丟棄.然后,傳送到系統(tǒng)CPU做進(jìn)一步處理.當(dāng)電腦發(fā)送數(shù)據(jù)時(shí),網(wǎng)卡等待合適的時(shí)間將分組插入到數(shù)據(jù)流中.接收系統(tǒng)通知電腦消息是否完整地到達(dá),如果出現(xiàn)問(wèn)題,將要求對(duì)方重新發(fā)送.
問(wèn):10BaseT和100BaseTX PHY實(shí)現(xiàn)方式不同的原因何在?
答:兩種實(shí)現(xiàn)的分組描述本質(zhì)上是一樣的,但兩者的信令機(jī)制完全不同.其目的是阻止一種硬件實(shí)現(xiàn)容易地處理兩種速度.10BaseT采用曼徹斯特編碼,100BaseTX采用4B/5B編碼.
問(wèn):什么是曼徹斯特編碼?
答:曼徹斯特編碼又稱(chēng)曼徹斯特相位編碼,它通過(guò)相位變化來(lái)實(shí)現(xiàn)每個(gè)位(圖2).通常,用一個(gè)時(shí)鐘周期中部的上升沿表示“1”,下降沿表示“0”.周期末端的相位變化可忽略不計(jì),但有時(shí)又可能需要將這種相位變化計(jì)算在內(nèi),這取決于前一位的值.
問(wèn):什么是4B/5B編碼?
答:4B/5B編碼是一種塊編碼方式.它將一個(gè)4位的塊編碼成一個(gè)5位的塊.這就使5位塊內(nèi)永遠(yuǎn)至少包含2個(gè)“1”轉(zhuǎn)換,所以在一個(gè)5位塊內(nèi)總能進(jìn)行時(shí)鐘同步.該方法需要25%的額外開(kāi)銷(xiāo).
問(wèn):網(wǎng)卡的MAC和PHY間的關(guān)系?
答:網(wǎng)卡工作在osi的最后兩層,物理層和數(shù)據(jù)鏈路層,物理層定義了數(shù)據(jù)傳送與接收所需要的電與光信號(hào)、線(xiàn)路狀態(tài)、時(shí)鐘基準(zhǔn)、數(shù)據(jù)編碼和電路等,并向數(shù)據(jù)鏈路層設(shè)備提供標(biāo)準(zhǔn)接口.物理層的芯片稱(chēng)之為PHY.數(shù)據(jù)鏈路層則提供尋址機(jī)構(gòu)、數(shù)據(jù)幀的構(gòu)建、數(shù)據(jù)差錯(cuò)檢查、傳送控制、向網(wǎng)絡(luò)層提供標(biāo)準(zhǔn)的數(shù)據(jù)接口等功能.以太網(wǎng)卡中數(shù)據(jù)鏈路層的芯片稱(chēng)之為MAC控制器.很多網(wǎng)卡的這兩個(gè)部分是做到一起的.他們之間的關(guān)系是pci總線(xiàn)接mac總線(xiàn),mac接phy,phy接網(wǎng)線(xiàn)(當(dāng)然也不是直接接上的,還有一個(gè)變壓裝置).
PHY和MAC之間是如何傳送數(shù)據(jù)和相互溝通的.通過(guò)IEEE定義的標(biāo)準(zhǔn)的MII/GigaMII(Media Independed Interfade,介質(zhì)獨(dú)立界面)界面連接MAC和PHY.這個(gè)界面是IEEE定義的.MII界面?zhèn)鬟f了網(wǎng)絡(luò)的所有數(shù)據(jù)和數(shù)據(jù)的控制.ETHERNET的接口實(shí)質(zhì)是MAC通過(guò)MII總線(xiàn)控制PHY的過(guò)程.
問(wèn):網(wǎng)線(xiàn)上傳輸?shù)氖悄M信號(hào)還是數(shù)字信號(hào)?
答:是模擬信號(hào).因?yàn)樗鼈鞒龊徒邮帐遣捎玫哪M的技術(shù).雖然它傳送的信息是數(shù)字的(并不是傳送的信息是數(shù)字的信號(hào)就可以叫做數(shù)字信號(hào)).
簡(jiǎn)單的例子:我們知道電話(huà)是模擬信號(hào),但是當(dāng)我們撥號(hào)上網(wǎng)的時(shí)候,電話(huà)線(xiàn)里傳送的是數(shù)字信息,但信號(hào)本身依舊是模擬的.然而ADSL同樣是通過(guò)電話(huà)線(xiàn)傳送的,卻是數(shù)字信號(hào).這取決于它傳出和接受采用的技術(shù).
問(wèn):若操作系統(tǒng)沒(méi)有加載網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡雖然在系統(tǒng)設(shè)備樹(shù)上,但網(wǎng)卡接口創(chuàng)建不了,那網(wǎng)卡實(shí)際能不能接收到數(shù)據(jù)?
答:這里面有很多細(xì)節(jié), 我根據(jù)Intel網(wǎng)卡的Spec大概寫(xiě)了寫(xiě), 想盡量寫(xiě)的通俗一些,所以沒(méi)有刻意用Spec里的術(shù)語(yǔ),另外本文雖然講的是MAC/PHY,但光口卡的(SERDES)也是類(lèi)似的.
PCI設(shè)備做reset以后進(jìn)入D0uninitialized(非初始化的D0狀態(tài), 參考PCI電源管理規(guī)范),此時(shí)網(wǎng)卡的MAC和DMA都不工作,PHY是工作在一個(gè)特殊的低電源狀態(tài)的;
操作系統(tǒng)創(chuàng)建設(shè)備樹(shù)時(shí),初始化這個(gè)設(shè)備,PCI命令寄存器的 Memory Access Enable or the I/O Access Enable bit會(huì)被enable, 這就是D0active.此時(shí)PHY/MAC就使能了;
PHY被使能應(yīng)該就可以接收物理鏈路上的數(shù)據(jù)了,否則不能收到FLP/NLP, PHY就不能建立物理連接.但這類(lèi)包一般是流量間歇發(fā)送的;
驅(qū)動(dòng)程序一般要通過(guò)寄存器來(lái)控制PHY, 比如自動(dòng)協(xié)商speed/duplex, 查詢(xún)物理鏈路的狀態(tài)Link up/down;
MAC被使能后, 如果沒(méi)有驅(qū)動(dòng)設(shè)置控制寄存器的一個(gè)位(CTRL.SLU )的話(huà), MAC和PHY是不能通訊的, 就是說(shuō)MAC不知道PHY的link已經(jīng)ready, 所以收不到任何數(shù)據(jù)的.這位設(shè)置以后, PHY完成自協(xié)商, 網(wǎng)卡才會(huì)有個(gè)Link change的中斷,知道物理連接已經(jīng)Link UP了;
即使Link已經(jīng)UP, MAC還需要enable接收器的一個(gè)位(RCTL.RXEN ),包才可以被接收進(jìn)來(lái),如果網(wǎng)卡被reset,這位是0,意味著所有的包都會(huì)被直接drop掉,不會(huì)存入網(wǎng)卡的 FIFO.老網(wǎng)卡在驅(qū)動(dòng)退出前利用這位關(guān)掉接收.Intel的最新千兆網(wǎng)卡發(fā)送接收隊(duì)列的動(dòng)態(tài)配置就是依靠這個(gè)位的,重新配置的過(guò)程一定要關(guān)掉流量;
無(wú)論驅(qū)動(dòng)加載與否, 發(fā)生reset后,網(wǎng)卡EEPOM里的mac地址會(huì)寫(xiě)入網(wǎng)卡的MAC地址過(guò)濾寄存器, 驅(qū)動(dòng)可以去修改這個(gè)寄存器,現(xiàn)代網(wǎng)卡通常支持很多MAC地址,也就是說(shuō),MAC地址是可以被軟件設(shè)置的.例如,Intel的千兆網(wǎng)卡就支持16個(gè)單播 MAC地址,但只有1個(gè)是存在EEPROM里的,其它是軟件聲稱(chēng)和設(shè)置的;
但如果驅(qū)動(dòng)沒(méi)有加載,網(wǎng)卡已經(jīng)在設(shè)備樹(shù)上,操作系統(tǒng)完成了步驟1-2的初始化,此時(shí)網(wǎng)卡的PHY應(yīng)該是工作的,但因?yàn)闆](méi)有人設(shè)置控制位(CTRL.SLU)來(lái)讓MAC和PHY建立聯(lián)系,所以MAC是不收包的.這個(gè)控制位在reset時(shí)會(huì)再設(shè)置成0;
PHY可以被軟件設(shè)置加電和斷電, 斷電狀態(tài)除了接收管理命令以外,不會(huì)接收數(shù)據(jù).另外,PHY還能工作在Smart Power Down模式下,link down就進(jìn)入省電狀態(tài);
有些多口網(wǎng)卡,多個(gè)網(wǎng)口共享一個(gè)PHY, 所以BIOS里設(shè)置disbale了某個(gè)網(wǎng)口, 也未必會(huì)把PHY的電源關(guān)掉,反過(guò)來(lái),也要小心地關(guān)掉PHY的電源;
要詳細(xì)了解PHY,最終還是要熟悉IEEE以太網(wǎng)的相關(guān)協(xié)議.
審核編輯:黃飛
評(píng)論