擊左上方藍(lán)色“一口Linux”,選擇“設(shè)為星標(biāo)”
第一時(shí)間看干貨文章? ?【干貨】嵌入式驅(qū)動(dòng)工程師學(xué)習(xí)路線 ?【干貨】Linux嵌入式知識點(diǎn)-思維導(dǎo)圖-免費(fèi)獲取 ?【就業(yè)】一個(gè)可以寫到簡歷的基于Linux物聯(lián)網(wǎng)綜合項(xiàng)目 ?【就業(yè)】找工作簡歷模版
簡介
DMA控制器通常屬于CPU的一部分,用虛線放在這里是為了表示DMA控制器可能會參與到網(wǎng)口數(shù)據(jù)傳輸中。



什么是MAC


什么是PHY

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寄存器在IEEE802.3標(biāo)準(zhǔn)的 22.2.4 Management functions 節(jié)有介紹,但不涉及所有的寄存器,個(gè)別寄存器需要到其它章節(jié)中看,當(dāng)然,文檔里面也提到該在哪里找到哪個(gè)寄存器。
什么是MII



什么是RMII
什么是GMII
| 信號名稱 | 描述 | 方向 |
|---|---|---|
| GTX_CLK | 1000M發(fā)送時(shí)鐘 | MAC → PHY |
| TX_CLK | 100/10M發(fā)送時(shí)鐘 | MAC → PHY |
| TX_ER | 發(fā)送數(shù)據(jù)錯(cuò)誤 | MAC → PHY |
| TX_EN | 發(fā)送使能 | MAC → PHY |
| TX_[7:0] | 發(fā)送數(shù)據(jù)8bit | MAC → PHY |
| RX_CLK | 接收時(shí)鐘 | PHY → MAC |
| RX_DV | 接收數(shù)據(jù)有效 | PHY → MAC |
| RX_ER | 接收數(shù)據(jù)錯(cuò)誤 | PHY → MAC |
| RX_[7:0] | 接收數(shù)據(jù)8bit | PHY → MAC |
| CRS | 載波監(jiān)測 | PHY → MAC |
| COL | 沖突碰撞監(jiān)測 | PHY → MAC |
| MDIO | 管理數(shù)據(jù) | 雙向 |
| MDC | 管理數(shù)據(jù)時(shí)鐘 | MAC → PHY |
什么是RGMII
| 信號名稱 | 描述 | 方向 |
|---|---|---|
| TXC | 發(fā)送時(shí)鐘 | MAC→PHY |
| TX_CTL | 發(fā)送數(shù)據(jù)控制 | MAC → PHY |
| TXD[3:0] | 發(fā)送數(shù)據(jù)4bit | MAC → PHY |
| RXC | 接收時(shí)鐘 | PHY → MAC |
| RX_CTL | 接收數(shù)據(jù)控制 | PHY → MAC |
| RXD[3:0] | 接收數(shù)據(jù)4bit | PHY → MAC |
| MDIO | 管理數(shù)據(jù) | 雙向 |
| MDC | 管理數(shù)據(jù)時(shí)鐘 | MAC → PHY |
雖然RGMII信號線減半,但TXC/RXC時(shí)鐘仍為125Mhz,為了達(dá)到1000Mbit的傳輸速率,TXD/RXD信號線在時(shí)鐘上升沿發(fā)送接收GMII接口中的TXD[3:0]/RXD[3:0],在時(shí)鐘下降沿發(fā)送接收TXD[7:4]/RXD[7:4],并且信號TX_CTL反應(yīng)了TX_EN和TX_ER狀態(tài),即在TXC上升沿發(fā)送TX_EN,下降沿發(fā)送TX_ER,同樣的道理試用于RX_CTL,下圖為發(fā)送接收的時(shí)序:


什么是SMI
SMI:串行管理接口(Serial Management Interface),通常直接被稱為MDIO接口(Management Data Input/Output Interface)。MDIO最早在IEEE 802.3的第22卷定義,后來在第45卷又定義了增強(qiáng)版本的MDIO,其主要被應(yīng)用于以太網(wǎng)的MAC和PHY層之間,用于MAC層器件通過讀寫寄存器來實(shí)現(xiàn)對PHY層器件的操作與管理。
MDIO主機(jī)(即產(chǎn)生MDC時(shí)鐘的設(shè)備)通常被稱為STA(Station Management Entity),而MDIO從機(jī)通常被稱為MMD(MDIO Management Device)。通常STA都是MAC層器件的一部分,而MMD則是PHY層器件的一部分。
MDIO接口包括兩條線,MDIO和MDC,其中MDIO是雙向數(shù)據(jù)線,而MDC是由STA驅(qū)動(dòng)的時(shí)鐘線。MDC時(shí)鐘的最高速率一般為2.5MHz,MDC也可以是非固定頻率,甚至可以是非周期的。MDIO接口只是會在MDC時(shí)鐘的上升沿進(jìn)行采樣,而并不在意MDC時(shí)鐘的頻率(類似于I2C接口)。如下圖所示。

MDIO接口有兩個(gè)版本,通常被稱為卷22版本和卷45版本。卷22版本的MDIO接口最多支持連接32個(gè)MMD(PHY層設(shè)備),每個(gè)設(shè)備最多支持32個(gè)寄存器。卷45版本的MDIO接口最多支持連接32個(gè)MMD,32個(gè)設(shè)備類型,每個(gè)設(shè)備最多支持64K個(gè)寄存器。卷22版本的MDIO接口的數(shù)據(jù)幀格式如下:

具體每個(gè)bit描述如下:


卷45版本的MDIO接口的數(shù)據(jù)幀格式如下:

具體每個(gè)bit的描述如下:


如果是STA(MAC層設(shè)備)驅(qū)動(dòng)MDIO,則MDIO相對于MDC上升沿,至少要有10ns的建立時(shí)間(Setup Time)和10ns的保持時(shí)間(Hold Time)。如下圖所示:

如果MDIO是由MMD(PHY層設(shè)備)驅(qū)動(dòng)的,則MDIO相對于MDC的Tco(Clock to Output Delay)的范圍是0ns~300ns。如下圖所示:

實(shí)際上,MDC的頻率也并非一定是小于或等于2.5MHz,比如Marvell的88E1512最大支持12MHz的MDC:

IEEE 802.3建議同時(shí)對MDIO進(jìn)行下拉(下拉電阻建議為2k歐姆+5%),和上拉(上拉電阻建議為1.5k歐姆+5%),使得在TA時(shí),MDIO處于中間態(tài)。但是并非所有的PHY器件都有這樣的要求,比如Marvell的88E1512只要求對MDIO進(jìn)行上拉即可,上拉電阻范圍為1.5k~10kΩ。
QA
網(wǎng)卡工作在osi的最后兩層,物理層和數(shù)據(jù)鏈路層,物理層定義了數(shù)據(jù)傳送與接收所需要的電與光信號、線路狀態(tài)、時(shí)鐘基準(zhǔn)、數(shù)據(jù)編碼和電路等,并向數(shù)據(jù)鏈路層設(shè)備提供標(biāo)準(zhǔn)接口.物理層的芯片稱之為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ù)鏈路層的芯片稱之為MAC控制器.
很多網(wǎng)卡的這兩個(gè)部分是做到一起的.他們之間的關(guān)系是pci總線接mac總線,mac接phy,phy接網(wǎng)線(當(dāng)然也不是直接接上的,還有一個(gè)變壓裝置).
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)生的信號電平總是大于0V的(這取決于芯片的制程和設(shè)計(jì)需求),但是這樣的信號送到100米甚至更長的地方會有很大的直流分量的損失.而且如果外部網(wǎng)線直接和芯片相連的話,電磁感應(yīng)(打雷)和靜電,很容易造成芯片的損壞.再就是設(shè)備接地方法不同,電網(wǎng)環(huán)境不同會導(dǎo)致雙方的0V電平不一致,這樣信號從A傳到B,由于A設(shè)備的0V電平和B點(diǎn)的0V電平不一樣,這樣會導(dǎo)致很大的電流從電勢高的設(shè)備流向電勢低的設(shè)備.
為了解決以上問題Transformer(隔離變壓器)這個(gè)器件就應(yīng)運(yùn)而生.它把PHY送出來的差分信號用差模耦合的線圈耦合濾波以增強(qiáng)信號,并且通過電磁場的轉(zhuǎn)換耦合到連接網(wǎng)線的另外一端.這樣不但使網(wǎng)線和PHY之間沒有物理上的連接而換傳遞了信號,隔斷了信號中的直流分量,還可以在不同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的信號耦合了到網(wǎng)線上,并沒有起到功率放大的作用.那么一張網(wǎng)卡信號的傳輸?shù)淖铋L距離是誰決定的呢?
一張網(wǎng)卡的傳輸最大距離和與對端設(shè)備連接的兼容性主要是PHY決定的.但是可以將信號送的超過100米的PHY其輸出的功率也比較大,更容易產(chǎn)生EMI的問題.這時(shí)候就需要合適的Transformer與之配合.作PHY的老大公司Marvell的PHY,常常可以傳送180~200米的距離,遠(yuǎn)遠(yuǎn)超過IEEE的100米的標(biāo)準(zhǔn).
RJ-45的接頭實(shí)現(xiàn)了網(wǎng)卡和網(wǎng)線的連接.它里面有8個(gè)銅片可以和網(wǎng)線中的4對雙絞(8根)線對應(yīng)連接.其中100M的網(wǎng)絡(luò)中1,2是傳送數(shù)據(jù)的,3,6是接收數(shù)據(jù)的.1,2之間是一對差分信號,也就是說它們的波形一樣,但是相位相差180度,同一時(shí)刻的電壓幅度互為正負(fù).這樣的信號可以傳遞的更遠(yuǎn),抗干擾能力強(qiáng).同樣的,3,6也一樣是差分信號.
網(wǎng)線中的8根線,每兩根扭在一起成為一對.我們制作網(wǎng)線的時(shí)候,一定要注意要讓1,2在其中的一對,3,6在一對.否則長距離情況下使用這根網(wǎng)線的時(shí)候會導(dǎo)致無法連接或連接很不穩(wěn)定.
現(xiàn)在新的PHY支持AUTO MDI-X功能(也需要Transformer支持).它可以實(shí)現(xiàn)RJ-45接口的1,2上的傳送信號線和3,6上的接收信號線的功能自動(dòng)互相交換.有的PHY甚至支持一對線中的正信號和負(fù)信號的功能自動(dòng)交換.這樣我們就不必為了到底連接某個(gè)設(shè)備需要使用直通網(wǎng)線還是交叉網(wǎng)線而費(fèi)心了.這項(xiàng)技術(shù)已經(jīng)被廣泛的應(yīng)用在交換機(jī)和SOHO路由器上.
在1000Basd-T網(wǎng)絡(luò)中,其中最普遍的一種傳輸方式是使用網(wǎng)線中所有的4對雙絞線,其中增加了4,5和7,8來共同傳送接收數(shù)據(jù).由于1000Based-T網(wǎng)絡(luò)的規(guī)范包含了AUTOMDI-X功能,因此不能嚴(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總線上PHY的地址,BOOTROM的容量,是否啟用BOOTROM引導(dǎo)系統(tǒng)等東西.
很多網(wǎng)卡上還有BOOTROM這個(gè)東西.它是用于無盤工作站引導(dǎo)操作系統(tǒng)的.既然無盤,一些引導(dǎo)用必需用到的程序和協(xié)議棧就放到里面了,例如RPL,PXE等.實(shí)際上它就是一個(gè)標(biāo)準(zhǔn)的PCI ROM.所以才會有一些硬盤寫保護(hù)卡可以通過燒寫網(wǎng)卡的BootRom來實(shí)現(xiàn).其實(shí)PCI設(shè)備的ROM是可以放到主板BIOS里面的.啟動(dòng)電腦的時(shí)候一樣可以檢測到這個(gè)ROM并且正確識別它是什么設(shè)備的.AGP在配置上和PCI很多地方一樣,所以很多顯卡的BIOS也可以放到主板BIOS里面.這就是為什么板載的網(wǎng)卡我們從來沒有看到過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ī)開機(jī)后,PHY的工作電壓應(yīng)該被從5V轉(zhuǎn)出來的電壓替代以節(jié)省5V Standby的消耗.(許多劣質(zhì)網(wǎng)卡沒有這么做).
有Wake on line功能的網(wǎng)卡一般還有一個(gè)WOL的接口.那是因?yàn)镻CI2.1以前沒有PCI設(shè)備喚醒主機(jī)的功能,所以需要著一根線通過主板上的WOL的接口連到南橋里面以實(shí)現(xiàn)WOL的功能.新的主板合網(wǎng)卡一般支持PCI2.2/2.3,擴(kuò)展了PME#信號功能,不需要那個(gè)接口而通過PCI總線就可以實(shí)現(xiàn)喚醒功能.
我們現(xiàn)在來看兩個(gè)圖

MAC和PHY分開的以太網(wǎng)卡

MAC和PHY集成在一顆芯片的以太網(wǎng)卡
上圖中各部件為:
①RJ-45接口
②Transformer(隔離變壓器)
③PHY芯片
④MAC芯片
⑤EEPROM
⑥BOOTROM插槽
⑦WOL接頭
⑧晶振
⑨電壓轉(zhuǎn)換芯片
⑩LED指示燈
網(wǎng)卡的功能主要有兩個(gè):一是將電腦的數(shù)據(jù)封裝為幀,并通過網(wǎng)線(對無線網(wǎng)絡(luò)來說就是電磁波)將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上去;二是接收網(wǎng)絡(luò)上其它設(shè)備傳過來的幀,并將幀重新組合成數(shù)據(jù),發(fā)送到所在的電腦中.網(wǎng)卡能接收所有在網(wǎng)絡(luò)上傳輸?shù)男盘?但正常情況下只接受發(fā)送到該電腦的幀和廣播幀,將其余的幀丟棄.然后,傳送到系統(tǒng)CPU做進(jìn)一步處理.當(dāng)電腦發(fā)送數(shù)據(jù)時(shí),網(wǎng)卡等待合適的時(shí)間將分組插入到數(shù)據(jù)流中.接收系統(tǒng)通知電腦消息是否完整地到達(dá),如果出現(xiàn)問題,將要求對方重新發(fā)送.
通過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ù)的控制。
而MAC對PHY的工作狀態(tài)的確定和對PHY的控制則是使用SMI(Serial Management Interface)界面通過讀寫PHY的寄存器來完成的。PHY里面的部分寄存器也是IEEE定義的,這樣PHY把自己的目前的狀態(tài)反映到寄存器里面,MAC通過SMI總線不斷的讀取PHY的狀態(tài)寄存器以得知目前PHY的狀態(tài),例如連接速度,雙工的能力等。當(dāng)然也可以通過SMI設(shè)置PHY的寄存器達(dá)到控制的目的,例如流控的打開關(guān)閉,自協(xié)商模式還是強(qiáng)制模式等。
我們看到了,不論是物理連接的MII界面和SMI總線還是PHY的狀態(tài)寄存器和控制寄存器都是有IEEE的規(guī)范的,因此不同公司的MAC和PHY一樣可以協(xié)調(diào)工作。當(dāng)然為了配合不同公司的PHY的自己特有的一些功能,驅(qū)動(dòng)需要做相應(yīng)的修改。
一片網(wǎng)卡主要功能的實(shí)現(xiàn)就基本上是上面這些器件了。
其他的,還有一顆EEPROM芯片,通常是一顆93C46。里面記錄了網(wǎng)卡芯片的供應(yīng)商ID、子系統(tǒng)供應(yīng)商ID、網(wǎng)卡的MAC地址、網(wǎng)卡的一些配置,如SMI總線上PHY的地址,BOOTROM的容量,是否啟用BOOTROM引導(dǎo)系統(tǒng)等東西。
很多網(wǎng)卡上還有BOOTROM這個(gè)東西。它是用于無盤工作站引導(dǎo)操作系統(tǒng)的。
既然無盤,一些引導(dǎo)用必需用到的程序和協(xié)議棧就放到里面了,例如RPL、PXE等。實(shí)際上它就是一個(gè)標(biāo)準(zhǔn)的PCI ROM。所以才會有一些硬盤寫保護(hù)卡可以通過燒寫網(wǎng)卡的BootRom來實(shí)現(xiàn)。
其實(shí)PCI設(shè)備的ROM是可以放到主板BIOS里面的。啟動(dòng)電腦的時(shí)候一樣可以檢測到這個(gè)ROM并且正確識別它是什么設(shè)備的。AGP在配置上和PCI很多地方一樣,所以很多顯卡的BIOS也可以放到主板BIOS里面。這就是為什么板載的網(wǎng)卡我們從來沒有看到過BOOTROM的原因。
end
一口Linux?
關(guān)注,回復(fù)【1024】海量Linux資料贈(zèng)送
精彩文章合集
文章推薦