1 以太網的由來
__以太網__不是單一協議,而是不同標準的完整集合。這些標準來自 IEEE,它們的名字都以 802.3 開頭。
以太網技術起源于施樂帕洛阿爾托研究中心的先鋒技術項目。人們通常認為以太網發明于1973年,當年鮑勃.梅特卡夫(Bob Metcalfe)給他PARC的老板寫了一篇有關以太網潛力的備忘錄。但是梅特卡夫本人認為以太網是之后幾年才出現的。在1976年,梅特卡夫和他的助手David Boggs發表了一篇名為《以太網:區域計算機網絡的分布式數據包交換技術》的文章。
1979年,梅特卡夫為了開發個人電腦和局域網離開了施樂(Xerox),成立了3Com公司。3Com對DEC、英特爾和施樂進行游說,希望與他們一起將以太網標準化、規范化。這個通用的以太網標準于1980年9月30日提出。當時業界有兩個流行的非公用網絡標準令牌環網和ARCNET,在以太網浪潮的沖擊下他們很快萎縮并被取代。而在此過程中,3Com也成了一個國際化的大公司。梅特卡夫曾經開玩笑說,Jerry Saltzer為3Com的成功作出了貢獻。Saltzer在一篇[哪個/哪些?]與他人合著的很有影響力的論文中指出,在理論上令牌環網要比以太網優越。受到此結論的影響,很多電腦廠商或猶豫不決或決定不把以太網接口做為機器的標準配置,這樣3Com才有機會從銷售以太網網卡大賺。這種情況也導致了另一種說法“以太網不適合在理論中研究,只適合在實際中應用”。也許只是句玩笑話,但這說明了這樣一個技術觀點:通常情況下,網絡中實際的數據流特性與人們在局域網普及之前的估計不同,而正是因為以太網簡單的結構才使局域網得以普及。梅特卡夫和Saltzer曾經在麻省理工學院MAC項目(Project MAC)的同一層樓工作,當時他正在做自己的哈佛大學畢業論文,在此期間奠定了以太網技術的理論基礎。
1985 年,美國電氣和電子工程師協會 (IEEE) 制定了一系列局域網 (LAN)標準,稱為 IEEE 802 標準。這些已被廣泛接受,現在構成了大多數 LAN 的核心。IEEE 802 標準之一,IEEE 802.3,是一種稱為“以太網”的標準。這是當今世界上使用最廣泛的 LAN 技術。盡管IEEE 802.3與原始標準(“藍皮書”)有些不同。它非常相似,兩組標準都可以用于同一個局域網。
如今,以太網采用CSMA/CD(Carrier Sense Multiple Access/Collision Detection,載波監聽多路存取和沖突檢測)介質訪問控制方式的局域網技術,最初由Xerox公司于1975年研制成功,1979年7月~1982年間,由__DEC、Intel和Xerox__三家公司制定了以太網的技術規范DIX,以此為基礎形成的IEEE802.3以太網標準在1989年正式成為國際標準。在20多年中以太網技術不斷發展,成為迄今最廣泛應用的局域網技術,產生了多種技術標準。
2 以太網概述
以太網 (Ethernet)是一種計算機__局域網__技術。IEEE組織的IEEE 802.3標準制定了以太網的技術標準,它規定了包括物理層的連線、電子信號和介質訪問控制的內容。以太網是目前應用最普遍的局域網技術,取代了其他局域網標準如令牌環、FDDI和ARCNET。
以太網的標準拓撲結構為__總線型拓撲__,但目前的快速以太網(100BASE-T、1000BASE-T標準)為了減少沖突,將能提高的網絡速度和使用效率最大化,使用交換機(Switch hub)來進行網絡連接和組織。如此一來,以太網的拓撲結構就成了星型;但在邏輯上,以太網仍然使用總線型拓撲和CSMA/CD(Carrier Sense Multiple Access/Collision Detection,即載波多重訪問/碰撞偵測)的總線技術。
__以太網 __(Ethernet) 在組網技術中占的比例最高,很多人直接把以太網理解為互聯網。因此這里有必要詳細說明以太網和互聯網的區別和聯系。
__互聯網__即INTERNET,它是一個全球性互聯網絡。它是由從地方到全球范圍內幾百萬個私人的,政府的,學術界的,企業的和政府的網絡所構成,通過電子,無線和光纖網絡技術等等一系列廣泛的技術聯系在一起。它以TCP/IP協議簇作為通信方式,體系結構分為4層:應用層,傳輸層,網絡層,網絡接口層。
__以太網__是最通用的通信協議標準。以太網絡使用CSMA/CD技術,(載波監聽多路訪問及沖突檢測)并以10M/s的速率(或100M/s 、1000M/s等速率)運行在多種類型的電纜上。它規定了包括物理層的連線、電子信號和介質訪問層協議的內容。簡單來說,以太網(Ethernet),是讓局域網連接的一種技術,取代了其他局域網標準如令牌環、FDDI和ARCNET。
以太網是指遵守 IEEE 802.3 標準組成的局域網,由 IEEE 802.3 標準規定的主要是位于參考模型的物理層 (PHY) 和數據鏈路層中的介質訪問控制子層 (MAC)。在家庭、企業和學校所組建的 PC局域網形式一般也是以太網,其標志是使用水晶頭網線來連接 (當然還有其它形式)。 IEEE 還有其它局域網標準,如 IEEE 802.11 是無線局域網,俗稱 Wi-Fi。 IEEE802.15 是個人域網,即藍牙技術,其中的 802.15.4 標準則是 ZigBee 技術。
以太網只是組成互聯網的一個子集,以太網是現在主流的局域網標準,而互聯網是指將大量的局域網連接起來,進行資源的分享。另外,互聯網與以太網是兩個不同的概念,前者是范圍概念,后者是技術概念。互聯網(Internet)、廣域網(WAN)、局域網(LAN)可以算作一類,它們都是按照區域和范圍來分類的。而以太網(Ethernet)、ATM網和FDDI網可以算作一類,它們是按照傳輸技術分類的。
以太網描述了__物理(PHY)層和數據鏈路(Data Link)層__,如下圖所示。
在物理層,有不同的電纜選項和不同的速度。然而,以太網的優點之一是它使用相同的數據鏈路層標準。你可以在網絡中混合使用不同的以太網標準。下面是一個例子:
上面我們看到三臺主機連接到使用不同以太網標準的兩臺交換機。交換機之間的連接是 10 Gbps 光纖連接。即使我們混合了不同的標準,該網絡也將能夠轉發以太網幀。
3 以太網幀格式
以太網的一大優點是,雖然有不同的標準,但都使用通用的以太網幀。自 70 年代的原始以太網標準以來,此框架沒有太大變化。這是以太網幀的樣子:
前導碼 :這是一個 7 字節的 1 和 0 模式,用于同步。
SFD :“起始幀定界符”標記前導碼的結尾,并告訴接收器接下來的字段將是實際的以太網幀,從目標字段開始。
目的地址 :這是接收方的目的地 MAC 地址。
源地址 :發送幀的設備的源MAC地址。
類型 :這告訴我們以太網幀內攜帶的內容。IPv4 數據包、IPv6 數據包或其他內容。
數據 :它攜帶我們嘗試傳輸的實際數據,例如 IPv4 數據包。
FCS :幀校驗序列幫助接收器確定幀是正確還是損壞。
綠色標記的字段就是我們所說的以太網頭。
TCP/IP 協議棧中的每層協議報文的封裝與拆裝如下:
當用戶發送數據時,將數據向下交給傳輸層,這是處于應用層的操作,應用層可以通過調用傳輸層的接口來編寫特定的應用程序。而 TCP/IP 協議一般也會包含一些簡單的應用程序如 Telnet 遠程登錄、 FTP 文件傳輸、 SMTP 郵件傳輸協議等。傳輸層會在數據前面加上傳輸層首部(此處以TCP 協議為例,傳輸層首部為 TCP 首部,也可以是 UDP 首部),然后向下交給網絡層。同樣地,網絡層會在數據前面加上網絡層首部(IP 首部),然后將數據向下交給鏈路層,鏈路層會對數據進行最后一次封裝,即在數據前面加上鏈路層首部(此處使用以太網接口為例),然后將數據交給網卡。最后,網卡將數據轉換成物理鏈路上的電平信號,數據就這樣被發送到了網絡中。
當設備的網卡接收到某個數據包后,它會將其放置在網卡的接收緩存中,并告知 TCP/IP 內核。然后 TCP/IP 內核就開始工作了,它會將數據包從接收緩存中取出,并逐層解析數據包中的協議首部信息,并最終將數據交給某個應用程序。數據的接收過程與發送過程正好相反,
常用的以太網MAC幀格式有兩種標準 : DIX Ethernet II標準,IEEE 的 802.3 標準 。
Ethernet V2可以裝載的最大數據長度是1500字節,而IEEE802.3可以裝載的最大數據是1492字節(SNAP)或是1497字節; Ethernet V2不提供MAC層的數據填充功能,而IEEE802.3不僅提供該功能,還具備服務訪問點(SAP)和SNAP層,能夠提供更有效的數據鏈路層控制和更好的傳輸保證。那么我們可以得出這樣的結論:Ethernet V2比IEEE802.3更適合于傳輸大量的數據,但EthernetV2缺乏數據鏈路層的控制,不利于傳輸需要嚴格傳輸控制的數據,這也正是IEEE802.3的優勢所在,越需要嚴格傳輸控制的應用,越需要用IEEE802.3或SNAP來封裝,但IEEE802.3也不可避免的帶來數據裝載量的損失,因此該格式的封裝往往用在較少數據量承載但又需要嚴格控制傳輸的應用中。
在實際應用中,我們會發現,大多數應用的以太網數據包是EthernetV2的幀(如HTTP、FTP、SMTP、POP3等應用),而交換機之間的BPDU(橋協議數據單元)數據包則是IEEE802.3的幀,VLANTrunk協議如802.1Q和Cisco的CDP(思科發現協議)等則是采用IEEE802.3SNAP的幀。大家有興趣的話,可以利用Sniffer等協議分析工具去捕捉數據包,然后解碼查看是不是這樣的。
4 物理層
在物理層,由 IEEE 802.3 標準規定了以太網使用的傳輸介質、傳輸速度、數據編碼方式和沖突檢測機制,物理層一般是通過一個 PHY 芯片實現其功能的。
4.1 傳輸介質
傳輸介質包括__同軸電纜、雙絞線 (Unshielded Twisted Pair, UTP)、光纖__。根據不同的傳輸速度和距離要求,基于這三類介質的信號線又衍生出很多不同的種類。最常用的是“五類線”適用于 100BASE-T和 10BASE-T 的網絡,它們的網絡速率分別為 100Mbps 和 10Mbps。
以太網有許多不同的標準,速度從 10 Mbps(兆比特每秒)到 100 Gbps(千兆比特每秒)。以下是一些流行的以太網標準的概述:
帶寬 | 通用名稱 | 非正式名稱 | IEEE****名稱 | 線纜類型 | 最大傳輸距離 |
---|---|---|---|---|---|
10 Mbps | 細纜 | 10BASE2 | 802.3 | 同軸電纜 | 200m(實際185m) |
10 Mbps | 以太網 | 10BASE-T | 802.3 | UTP | 100m |
100 Mbps | 快速以太網 | 100BASE-T | 802.3u | UTP | 100m |
1000 Mbps | 千兆以太網 | 1000BASE-LX | 802.3z | 光纖 | 5000m |
1000 Mbps | 千兆以太網 | 1000BASE-T | 802.3ab | UTP | 100m |
10 Gbps | 10千兆以太網 | 10GBASE-T | 802.3an | UTP | 100m |
不同的標準是由不同的名字組合而成:
- 10/100/1000: 數字100用單位MHz (Megahertz)表示網線設計的__頻率__。即100 MHz。MHz的值越大,網線所支持的速度就越快。如果你嘗試將這種類型的網線用于更高的頻率(和速度)中,那么它將不工作或者變得極為不可靠。100 MHz以每秒100Mbit的速度傳輸,這在理論上指的就是12 Mbps。然而,在實際中,可能還無法獲得超過4 Mbps。
- BASE: BASE是英文baseband的縮寫,指的就是__基帶__。表示沒有使用頻分復用或者其它頻率轉換技術,每一個信號在一個單一頻率上完全控制線纜。
- 數字T/F/C等: 一般數組表示__傳輸長度__;T代表承載信號的物理介質是雙絞線纜(分為UTP(Unshielded Twisted Pair,非屏蔽雙絞線)和STP(Shielded Twicted Pair,屏蔽雙絞線)),在這里每一對傳送信號的雙絞線互相纏繞以(FEXT和NEXT之間)減少電磁干擾和串擾;F表示光纖
- 最后的字母或數字(4/X等): 在同一種傳送速率下有多種不同的標準,它們之間以一個字母或數字跟隨T/F/C之后的方式來區隔(例如TX)。它顯示了網線的結構并指出包含的絞線對的數量。某些高速標準使用同軸電纜,則分配代號為CX。
下面以不同類型的傳輸介質進行介紹。
1.同軸電纜
同軸電纜的主要代表是10BASE5和10BASE2。
10BASE5 (又稱粗纜(Thick Ethernet)或黃色電纜)──最早實現10 Mbit/s以太網。
早期IEEE標準,使用單根RG-11同軸電纜,最大距離為500米,并最多可以連接100臺電腦的收發器,而纜線兩端必須接上50歐姆的終端電阻。接收端通過所謂的“插入式分接頭”插入電纜的內芯和屏蔽層。在電纜終結處使用N型連接器。
盡管由于早期的大量布設,到現在還有一些系統在使用,這一標準實際上被10BASE2取代。
利用基帶的10M傳輸速率,采用曼徹斯特編碼傳輸數據。 該系統在安裝和維護上難度較大。
在IEEE Std 802.3?的Clause 8有詳細的介紹。
Physical Layer partitioning, relationship to the ISO/IEC Open Systems Interconnection (OSI) reference model
10BASE2 (又稱細纜(Thin Ethernet)或模擬網絡)── 10BASE5后的產品,使用RG-58同軸電纜,最長轉輸距離約200米(實際為185米),僅能連接30臺計算機,計算機使用T型適配器連接到帶有BNC連接器的網卡,而__線路兩頭需要50歐姆的終結器__。
利用基帶的10M傳輸速率,采用曼徹斯特編碼傳輸數據。雖然在能力、規格上不及10BASE5,但是因為其線材較細、布線方便、成本也便宜,所以得到更廣泛的使用,淘汰了10BASE5。由于雙絞線的普及,它也被各式的雙絞線網絡取代。
在IEEE Std 802.3?的Clause 10有詳細的介紹。
Physical Layer partitioning, relationship to the ISO/IEC Open Systems Interconnection (OSI) reference model
https://www.telecomworld101.com/Thinnet.html
【注】自2011年9月以來,該標準不再考慮維護變更。
2.雙絞線
StarLAN是第一個雙絞線上實現的以太網絡標準10 Mbit/s。后發展成10BASE-T,以及100BASE-TX和1000BASE-T
__10BASE-T__使用兩對非屏蔽雙絞線,一對線發送數據,另一對線接收數據,用RJ-45模塊作為端接器,星形拓撲結構,信號頻率為20MHz,必須使用3類或更好的UTP電纜;布線按照EIA568標準,站點中繼器和中繼器中繼器的最大距離為100m。保持了10base5的4中繼器/5網段的設計能力,使10base-T局域網的最大直徑為500m。
10Base-T的集線器和網卡每16秒就發出“滴答”(Hear-beat)脈沖,集線器和網卡都要監聽此脈沖,收到“滴答” 信號表示物理連接已建立,10base-T設備通過LED向網絡管理員指示鏈路是否正常。
如下圖所示,UTP 電纜有 4 對線對,每對 2 根線。每對線都有兩種匹配的顏色。例如,藍色和藍白色。在 UTP 電纜的末端,我們使用 RJ45 連接器。
RJ45 連接器有 8 個可以插入電線的位置,稱為“引腳”。我們從左到右數針數,查看 RJ45 連接器的底部。
10base-T因為價格便宜、配置靈活和易于管理而流行起來,現在占整個以太網銷售量的90%以上。
在IEEE Std 802.3?的Clause 14有詳細的介紹。
10BASE-T relationship to the ISO/IEC Open Systems Interconnection (OSI) reference model and the IEEE 802.3 CSMA/CD LAN model
__100base-T__稱Fast Ethernet(快速以太網),是許多以標稱速率100 Mbit/s(較早的以太網速度為10 Mbit / s)傳輸流量的以太網標準的統稱。在快速以太網標準中,100BASE-TX是最常見的。
名稱中的“100”是指100Mbit/s的傳輸速度;而“BASE”是指基帶信令; 破折號后面的字母(“T”或“F”)是指承載信號的物理介質(分別為雙絞線或光纖);而最后一個字符(“X”,“4”等)指的是使用的行代碼方法。 快速以太網有時被稱為100BASE-X,其中“X”是FX和TX變體的占位符。
1995年5月正式通過了快速以太網/100Base-T規范,即IEEE 802.3u標準,是對IEEE802.3的補充。與10base-T一樣采用星形拓撲結構,但100Base-T包含4個不同的物理層規范,并且包含了網絡拓撲方面的許多新規則。可以說是10Base-T的升級版。
在IEEE Std 802.3?的Clause 21有詳細的介紹。
Architectural positioning of 100BASE-T
__1000BASE-T__采用四對五類平衡電纜的1000 Mb/s 物理層規格。與10Base-T、100Base-T完全兼容。
前面兩種標準有兩根線對,一根用于傳輸,另一根用于接收。然而,1000BASE-T使用所有 4 對線。它不是使用不同的線對進行傳輸/接收,而是能夠在每個線對上同時發送和接收。
RJ45 連接器中的引腳布局相同,但我們使用了額外的電線:
在IEEE Std 802.3?的Clause 40有詳細的介紹。
Type 1000BASE-T PHY relationship to the ISO Open Systems Interconnection (OSI) Reference Model and the IEEE 802.3 CSMA/CD LAN Model
3.光纖
目前傳輸速度最快傳播距離最長的就是光纖,主要有1000BASE-LX(long wavelength laser)、1000BASE-SX (Short Wavelength Laser)、1000BASE-T。
IEEE802.3z定義了基于光纖和短距離銅纜的1000Base-X,采用8B/10B編碼技術,信道傳輸速度為1.25Gbit/s,去耦后實現1000Mbit/s傳輸速度。
1000BASE-X 采用單模或多模長波激光器的規格。采用直徑為62.5um或50um的多模光纖時,工作波長范圍為1270-1355nm,傳輸距離為550m;采用直徑為9um或10um的單模光纖,工作波長范圍為1270-1355nm,傳輸距離為5km左右。
在IEEE Std 802.3?的Clause 38有詳細的介紹。
Relationship of 1000BASE-X and the PMDs
4.2編碼
為了讓接收方在沒有外部時鐘參考的情況也能確定每一位的起始、結束和中間位置,在傳輸信號時不直接采用二進制編碼。在 10BASE-T 的傳輸方式中采用曼徹斯特編碼,在 100BASE-T 中則采用 4B/5B 編碼。
曼徹斯特編碼把每一個二進制位的周期分為兩個間隔,在表示“1”時,以前半個周期為高電平,后半個周期為低電平。表示“0”時則相反,具體見下圖。
采用曼徹斯特碼在每個位周期都有電壓變化,便于同步。但這樣的編碼方式效率太低,只有 50%。在 100BASE-T 采用的 4B/5B 編碼是把待發送數據位流的每 4 位分為一組,以特定的 5 位編碼來表示,這些特定的 5 位編碼能使數據流有足夠多的跳變,達到同步的目的,而且效率也從曼徹斯特編碼的 50% 提高到了 80%。
4.3 CSMA/CD沖突檢測
早期的以太網大多是多個節點連接到同一條網絡總線上 (總線型網絡),存在信道競爭問題,因而每個連接到以太網上的節點都必須具備沖突檢測功能。
上面我們看到 H1 和 H2 都在發送以太網幀。集線器在連接到 H3 的端口上重復這些幀。當這同時發生時,我們會發生碰撞并且兩幀都丟失了。
為了解決這個問題,我們必須使用半雙工。
半雙工意味著我們不能同時發送和接收。當一臺計算機正在傳輸時,其他所有人都必須等待。當沒有人傳輸時,我們可以拍攝并傳輸一幀。
然而,這并不意味著我們完全沒有碰撞。當兩臺計算機決定“線路空閑”并開始傳輸時,我們仍然會發生碰撞。為了解決這個問題,我們有一個叫做 CSMA/CD 的協議 。
CSMA/CD全稱是Carrier Sense Multiple Access with Collision Detection,載波偵聽多路訪問/沖突檢測協議),已廣泛應用于以太網中。
所謂__載波偵聽__(Carrier Sense),意思是網絡上各個工作站在發送數據前都要確認總線上有沒有數據傳輸。若有數據傳輸(稱總線為忙),則不發送數據;若無數據傳輸(稱總線為空),立即發送準備好的數據。
所謂__多路訪問__(Multiple Access),意思是網絡上所有工作站收發數據共同使用同一條總線,且發送數據是廣播式的。
所謂__沖突__(Collision),意思是若網上有兩個或兩個以上工作站同時發送數據,在總線上就會產生信號的混合,這樣哪個工作站都辨別不出真正的數據是什么。這種情況稱為數據沖突,又稱為__碰撞__。
__CSMA/CD 沖突檢測機制大致__如下:如果多個節點同時利用同一條總線發送數據,則會產生沖突,總線上的節點可通過接收到的信號與原始發送的信號的比較檢測是否存在沖突,若存在沖突則停止發送數據,隨機等待一段時間再重傳。如果再次碰撞,發射節點再次等待,等待時間幾乎是前一個的兩倍:這就是所謂的退避(即“下降”)指數。除非它已經達到了最大值。
現在大多數局域網組建的時候很少采用總線型網絡,大多是一個設備接入到一個獨立的路由或交換機接口,組成星型網絡,不會產生沖突。但為了兼容,新出的產品還是帶有沖突檢測機制。
CSMA/CD 的整個方案如下圖所示:
CSMA/CD的幀格式
IEEE 802.3 標準規定的幀格式包含以下字段。
1.前導碼 :提供位同步的七個字節(56 位)。它由交替的 Os 和 1s 組成。目的是提供警報和定時脈沖。
2.起始幀定界符(SFD) :它是一個字節字段,具有獨特的模式:10 10 1011。它標志著幀的開始。
3.目標地址(DA) :它是包含數據包目標物理地址的六字節字段。
4.源地址(SA) :它也是一個六字節字段,包含源或最后一個轉發數據包的設備(最近的路由器到接收器)的物理地址。
5.長度 :這兩個字節字段指定數據字段中的長度或字節數。
6.數據 :它可以是 46 到 1500 字節,取決于幀的類型和信息字段的長度。
7.幀校驗序列(FCS) :這對于字節字段包含用于錯誤檢測的 CRC。
CSMA/CD流程
第一步:載波監聽,當一個站點想要發送數據的時候,它檢測網絡查看是否有其他站點正在傳輸,即偵聽信道是否空閑,要確保沒有其他節點信道,所以該節點首先要監聽信道上的動靜,也就是先聽后說。如果信道在一定時段內寂靜無聲(稱為幀間縫隙IFG),則該節點就開始傳輸,也就是無聲則說。
第二步:沖突檢測,如果信道一直很忙碌,就一直監視信道,直到出現最小的IFG時段時,該節點才開始發送它的數據,也就是有空就說。如果兩個節點或更多的節點都在監聽和等待發送,然后在信道空時同時決定立即(幾乎同時)開始發送數據,此時就發生碰撞。這一事件會導致沖突,并使雙方信息包都受到損壞。以太網在傳輸過程中不斷地監聽信道,以檢測__碰撞沖突__,也就是邊聽邊說。
第三步:如果一個節點在傳輸期間檢測出碰撞沖突,則立即停止該次傳輸,并向信道發出一個“擁擠”信號,以確保其他所有節點也發現該沖突,從而摒棄可能一直在接收的受損的信息包也就是沖突停止,即一次只能一人講。
第四步:多路存取,在等待一段時間(稱為后退)后,想發送的節點試圖進行新的發送。 這時采用一種叫二進制指數退避策略(Binary Exponential Back off Policy)的算法來決定不同的節點在試圖再次發送數據前要等待一段時間,也就是隨機延遲。當延時一段時間后,總線為空閑時,再重新發送未發完的數據。
總結:先聽后說,無聲則說;有空就說,邊聽邊說;一旦沖突,立即停說,隨機延遲,等待再說。
CSMA/CD控制方式的優點是:原理比較簡單,技術上易實現,網絡中各工作站處于平等地位,不需集中控制,不提供優先級控制。但在網絡負載增大時,發送時間增長,發送效率急劇下降。
4.4 PHY 層芯片:LAN8742A
接下來介紹一款常用于嵌入式的PHY芯片,其他芯片也是類似的原理。
LAN8742A是 SMSC 公司 (已被 Microchip 公司收購) 設計的一個體積小、功耗低、全能型10/100Mbps 的以太網PHY 層收發器,I/O 引腳電壓符合 IEEE802.3-2005 標準。它是針對消費類電子和企業應用而設計的。 LAN8742A 總共只有 24Pin,僅支持 RMII 接口。LAN8742A可以通過自協商的方式與目的主機最佳的連接方式(速度和雙工模式),支持 HP Auto-MDIX 自動翻轉功能,無需更換網線即可將連接更改為直連或交叉連接。
LAN8742A的主要特點如下:
- 高性能的 10/100M 以太網傳輸模塊
- 支持 RMII 接口以減少引腳數
- 支持全雙工和半雙工模式
- 兩個狀態 LED 輸出
- 可以使用 25M 晶振以降低成本
- 支持自協商模式
- 支持 HP Auto-MDIX 自動翻轉功能
- 支持 SMI 串行管理接口
- 支持 MAC 接口
- 支持WOL網絡喚醒功能
LAN8742A組成的網絡結構見下圖。
LAN8742A通過 RMII 與 MAC 連接。 RJ45 是網絡插座,在與 LAN8742A連接之間還需要一個變壓器,所以一般使用帶電壓轉換和 LED 指示燈的 HY911105A 型號的插座。一般來說,必須為使用 RMII 接口的 PHY 提供 50MHz 的時鐘源輸入到 REF_CLK 引腳,不過 LAN8742A內部集成PLL,可以將 25MHz 的時鐘源陪頻到 50MHz 并在指定引腳輸出該時鐘,所以我們可以直接使其與 REF_CLK 連接達到提供 50MHz 時鐘效果。
LAN8742A內部系統結構見下圖。
LAN8742A有各個不同功能模塊組成,最重要的要數接收控制器和發送控制器,其它的基本上都是與外部引腳掛鉤,實現信號傳輸。部分引腳是具有雙重功能的,比如 PHYAD0 與 RXER 引腳是共用的,在系統上電后 LAN8742A會馬上讀取這部分共用引腳的電平,以確定系統的狀態并保存在相關寄存器內,之后則自動轉入作為另一功能引腳。
__PHYAD[0]__引腳用于配置 SMI 通信的 LAN8742A地址,在芯片內部該引腳已經自帶下拉電阻,默認認為 0(即使外部懸空不接),在系統上電時會檢測該引腳獲取得到 LAN8742A的地址為 0 或者1,并保存在特殊模式寄存器 (R18) 的 PHYAD 位中,該寄存器的 PHYAD 有 5 個位,在需要超過2 個 LAN8742A時可以通過軟件設置不同 SMI 通信地址。 PHYAD[0] 是與 RXER 引腳共用。
__MODE[2:0]__引腳用于選擇 LAN8742A網絡通信速率和工作模式,可選 10Mbps 或 100Mbps 通信速度,半雙工或全雙工工作模式,另外 LAN8742A支持 HP Auto-MDIX 自動翻轉功能,即可自動識別直連或交叉網線并自適應。一般將 MODE 引腳都設置為 1,可以讓 LAN8742A啟動自適應功能,它會自動尋找最優工作方式。 MODE[0] 與 RXD0 引腳共用、 MODE[1] 與 RXD1 引腳共用、MODE[2] 與 CRS_DV 引腳共用。
__nINT/REFCLKO__引腳用于 RMII 接口中 REF_CLK 信號線,當 nINTSEL 引腳為低電平時,也就是REF_CLK Out 模式,nINT/REFCLKO 作為 REF_CLK 時鐘源。它也可以被設置成 50MHz 時鐘輸出,這樣可以直接與 STM32F746 的 REF_CLK 引腳連接為其提供50MHz 時鐘源,這種模式要求為 XTAL1 與 XTAL2 之間或為 TAL1/CLKIN 提供 25MHz 時鐘,由LAN8742A內部 PLL 電路陪頻得到 50MHz 時鐘,此時 nIN/REFCLKO 引腳的中斷功能不可用,用于 50MHz 時鐘輸出。
當 nINTSEL 引腳為高電平時,也就是REF_CLK In 模式,nINT/REFCLKO 作為中斷引腳。LAN8742A被設置為時鐘輸入,即外部時鐘源直接提供 50MHz 時鐘接入 STM32F46的REF_CLK 引腳和 LAN8742A的 XTAL1/CLKIN 引腳,此時 INT/REFCLKO 可用于中斷功能。 nINTSEL 與 LED2 引腳共用,一般使用下拉。
REGOFF 引腳用于配置內部 +1.2V 電壓源, LAN8742A內部需要 +1.2V 電壓,可以通過 VDDCR引腳輸入 +1.2V 電壓提供,也可以直接利用 LAN8742A內部 +1.2V 穩壓器提供。當 REGOFF 引腳為低電平時選擇內部 +1.2V 穩壓器。 REGOFF 與 LED1 引腳共用。
5 數據鏈路層
數據鏈路層的主要職責是通過單個鏈路傳輸數據報。數據鏈路層協議定義了跨節點交換的數據包的格式以及錯誤檢測,重傳,流控制和隨機訪問等操作。
數據鏈路層提供服務:
成幀和鏈路訪問 :數據鏈路層協議在鏈路層傳輸之前將每個網絡幀封裝在鏈路層幀內。幀由包含網絡層數據報的數據字段和多個數據字段組成。它規定了幀的結構以及通過鏈路傳輸幀的信道訪問協議。
可靠的交付 :數據鏈路層提供可靠的交付服務,即無錯誤地傳輸網絡層數據報。通過傳輸和確認完成可靠的傳送服務。數據鏈路層主要通過鏈路提供可靠的傳送服務,因為它們具有較高的錯誤率并且可以在本地校正,發生錯誤的鏈路而不是強制重新傳輸數據。
流控制 :接收節點可以以比處理幀更快的速率接收幀。如果沒有流量控制,接收器的緩沖區可能會溢出,幀可能會丟失。為了克服這個問題,數據鏈路層使用流控制來防止鏈路一側的發送節點壓倒鏈路另一側的接收節點。
錯誤檢測 :可以通過信號衰減和噪聲引入錯誤。數據鏈路層協議提供了一種檢測一個或多個錯誤的機制。這是通過在幀中添加錯誤檢測位來實現的,然后接收節點可以執行錯誤檢查。
糾錯 :糾錯與錯誤檢測類似,不同之處在于接收節點不僅檢測錯誤,還確定錯誤發生在幀中的位置。
半雙工和全雙工 :在全雙工模式下,兩個節點都可以同時傳輸數據。在半雙工模式下,只有一個節點可以同時傳輸數據。
5.1錯誤檢測
當數據從一臺設備傳輸到另一臺設備時,系統不保證該設備接收到的數據與另一臺設備發送的數據是否相同。錯誤是接收端收到的消息與傳輸的消息不同的情況。
錯誤可以分為兩類: 單比特錯誤和突發錯誤 。
1.單比特錯誤
給定數據單元的唯一一位從1變為0或從0變為1。
單比特錯誤主要發生在并行數據傳輸中。例如,如果使用8條線來發送一個字節的8位,如果其中一條線路有噪聲,則每個字節會損壞單個位。
2.突發錯誤
兩個或多個位從0更改為1或從1更改為0稱為突發錯誤。從第一個損壞位到最后一個損壞位確定突發錯誤。
突發錯誤最有可能發生在串行數據傳輸中。受影響的位數取決于噪聲和數據速率的持續時間。
5.2 糾錯
最流行的錯誤檢測技術是: 單一奇偶校驗、二維奇偶校驗、校驗、循環冗余校驗 。
1.單一奇偶校驗
單奇偶校驗是一種簡單的機制,檢測錯誤的成本低廉。在該技術中,冗余比特也稱為奇偶校驗比特,其附加在數據單元的末端,使得1的數量變為偶數。因此,傳輸比特的總數將是9比特。
如果1位的數量是奇數,則附加奇偶校驗位1,如果1位的數量是偶數,則在數據單元的末尾附加奇偶校驗位0。
在接收端,根據接收的數據位計算奇偶校驗位,并與接收的奇偶校驗位進行比較。
此技術生成偶數的總數為1,因此稱為偶數奇偶校驗。
單奇偶校驗的缺點有兩點:第一,它只能檢測非常罕見的單位錯誤;第二,如果兩個位互換,則它無法檢測到錯誤。
2.二維奇偶校驗
使用以表格形式組織數據的二維奇偶校驗可以提高性能。為每一行計算奇偶校驗位,相當于單奇偶校驗。
在二維奇偶校驗中,將一個位塊分成行,并將冗余位行添加到整個塊中。
在接收端,奇偶校驗位與根據接收數據計算的奇偶校驗位進行比較。
二維奇偶校驗的缺點有兩點:第一,如果一個數據單元中的兩個位被破壞,而另一個數據單元中完全相同位置的兩個位也被破壞,那么二維奇偶校驗器將無法檢測到錯誤;第二,在某些情況下,此技術不能用于檢測 4 位或更多位錯誤。
3.校驗
校驗和是基于冗余概念的__錯誤檢測__技術。它分為兩部分: 校驗和生成器以及校驗和檢查 。
校驗和__在發送方生成。校驗和生成器將數據細分為每個n位的相等段,并且所有這些段通過使用一個補碼算法加在一起。該和被補充并附加到原始數據,稱為__校驗和字段 。擴展數據通過網絡傳輸。
校驗和在接收方驗證。接收器將輸入數據細分為每個n比特的相等段,并且將所有這些段加在一起,然后補充該總和。如果和的補碼為零,則接受數據,否則拒絕數據。
接收方遵循以下步驟:
- 塊單元被分成k個部分和n個比特中的每一個。
- 通過使用一個補碼算法將所有k個部分加在一起得到總和。
- 總和是補充。
- 如果和的結果為零,則接受數據,否則丟棄數據。
4.循環冗余校驗(CRC)
CRC是用于確定錯誤的__冗余錯誤__技術。以下是CRC中用于錯誤檢測的步驟:
第一步:在CRC技術中,一串n 0被附加到數據單元,并且該n數小于預定數量的比特數,稱為n + 1比特的除法。
第二步:使用一個過程將新擴展的數據除以除數稱為二進制除法。從該除法產生的余數稱為CRC余數。
第三步:CRC余數替換原始數據末尾的附加0。這個新生成的單元被發送到接收器。
第四步:接收器接收數據,然后接收CRC余數。接收器將整個單元視為一個單元,并將其除以用于查找CRC余數的相同除數。
如果該除法的結果為零,這意味著它沒有錯誤,并且數據被接受。如果該除法的結果不為零,則意味著數據由錯誤組成。因此,數據被丟棄。
5.3 數據鏈路控制
數據鏈路控制是數據鏈路層提供的服務,可通過物理介質提供可靠的數據傳輸。例如,在半雙工傳輸模式中,一個設備一次只能傳輸數據。如果鏈路末端的兩個設備同時傳輸數據,它們將發生沖突并導致信息丟失。數據鏈路層提供設備之間的協調,以便不發生沖突。
數據鏈路層提供三個功能:
- 線路控制
- 流量控制
- 錯誤控制
1.線路控制
線路控制是數據鏈路層的一項功能,它提供鏈路系統之間的協調。它確定哪個設備可以發送,以及何時可以發送數據。
線路控制可以通過兩種方式實現:ENQ/ACK、Poll/select。
(1) END / ACK
END / ACK代表查詢/確認當鏈路上沒有錯誤的接收器并且在兩個設備之間具有專用路徑以使得能夠接收傳輸的設備是預期的設備時使用。END / ACK協調哪個設備將開始傳輸以及接收者是否準備好。
發送器發送稱為查詢(ENQ)的幀,詢問接收器是否可用于接收數據。
接收器響應肯定確認(ACK)或否定確認(NACK),其中肯定確認意味著接收器準備接收傳輸,否定確認意味著接收器不能接受傳輸。
以下是接收者的回復:
- 如果對ENQ的響應是肯定的,則發送方將發送其數據,并且一旦其所有數據都已被發送,則設備利用EOT(發送結束)幀完成其發送。
- 如果對ENQ的響應是否定的,則發送方斷開連接并在另一時間重新開始傳輸。
- 如果響應既不是負面也不是正面,則發送方假定ENQ幀在傳輸過程中丟失,并且在放棄之前嘗試三次建立鏈接。
(2) Pool/Select
線路控制的Pool/Select方法適用于將一個設備指定為主站,而其他設備為二級站的拓撲。
在這種情況下,主設備和多個從設備組成一條傳輸線,所有的交換都是通過主設備進行的,即使目的地是從設備。主要設備控制通信鏈路,而次要設備遵循主要設備的指令。主要設備確定允許哪個設備使用通信信道。因此,我們可以說它是會話的發起者。
如果主設備想要從輔助設備接收數據,它會要求輔助設備發送任何數據,這個過程稱為Pool。如果主設備想要向從設備發送一些數據,那么它會告訴目標從設備準備接收數據,這個過程稱為Select。
Select
當主設備有要發送的內容時使用Select模式。
當主設備想要發送一些數據時,它通過發送選擇(SEL)幀向輔助設備警告即將到來的傳輸,幀的一個字段包括預期的輔助設備的地址。
當輔助設備接收SEL幀時,它發送指示輔助就緒狀態的確認。
如果輔助設備準備好接受數據,則主設備將兩個或更多個數據幀發送到預期的輔助設備。數據傳輸完成后,輔助設備會發送一個確認,指出已收到數據。
Pool
當主設備想要從輔助設備接收一些數據時,使用輪詢模式。
當主設備想要接收數據時,它會詢問每個設備是否有任何要發送的內容。
首先,主要詢問(輪詢)第一個輔助設備,如果它以NACK(否定確認)響應則表示它沒有任何要發送的內容。現在,它接近第二個輔助設備,它用ACK響應意味著它有要發送的數據。輔助設備可以一個接一個地發送一個以上的幀,或者有時可能需要在發送每個幀之前發送ACK,這取決于所使用的協議的類型。
2.流量控制
它是一組程序,告訴發送方在數據壓倒接收方之前它可以傳輸多少數據。接收設備具有有限的速度和有限的存儲器來存儲數據。因此,接收設備必須能夠在達到限制之前通知發送設備暫時停止發送。它需要一個緩沖區,一塊內存,用于存儲信息,直到它們被處理完畢。
目前有兩種方法來控制數據流: 停止與等待、滑動窗口 。
(1) 停止與等待
在停止與等待方法中,發送方在它發送的每個幀之后等待確認。
收到確認后,只發送下一幀。交替發送和等待幀的過程繼續,直到發送者發送EOT(發送結束)幀。
停止等待的好處
停止與等待方法很簡單,因為在發送下一幀之前檢查并確認每個幀。
停止等待的缺點
停止等待技術使用效率低,因為每個幀必須一直傳輸到接收器,并且確認在下一幀發送之前一直傳播。發送和接收的每個幀使用遍歷鏈路所需的整個時間。
(2) 滑動窗口
滑動窗口是一種流控制方法,其中發送方可以在獲得確認之前發送若干幀。在滑動窗口控制中,可以一個接一個地發送多個幀,由于可以有效地利用通信信道的容量。滑動窗口是指發送方和接收方端的虛擬框。窗口可以在任一端保持幀,并且它提供在確認之前可以傳輸的幀數的上限。
發件人窗口
在傳輸開始時,發送方窗口包含n-1幀,當它們被發送出去時,左邊界向內移動縮小窗口的大小。例如,如果窗口的大小為w,如果發送了三個幀,則發送方窗口中遺漏的幀數為w-3。
一旦ACK到達,則發送方窗口擴展到將等于ACK確認的幀數的數字。
例如,窗口的大小為7,如果已發送幀0到4并且沒有到達確認,則發送方窗口僅包含兩個幀,即5和6.現在,如果ACK已到達,則數字4表示0到3幀未損壞,發送方窗口擴展到包括接下來的四個幀。因此,發送方窗口包含六個幀(5,6,7,0,1,2)。
接收窗口
在傳輸開始時,接收器窗口不包含n幀,但它包含n-1個幀空間。當新幀到達時,窗口的大小會縮小。
接收器窗口不表示接收的幀數,但它表示在發送ACK之前可以接收的幀數。例如,窗口的大小是w,如果接收到三個幀,則窗口中可用的空間數是(w-3)。
一旦發送確認,接收器窗口擴展的數量等于確認的幀數。
假設窗口的大小為7意味著接收器窗口包含七個幀的七個空格。如果接收到一幀,則接收器窗口收縮并將邊界從0移動到1.這樣,窗口逐個縮小,因此窗口現在包含六個空格。如果已發送0到4的幀,則窗口在發送確認之前包含兩個空格。
3.錯誤控制
錯誤控制是一種錯誤檢測和重傳技術。錯誤控制的類型如下:
(1) 停止等待ARQ
停止等待ARQ是一種用于在幀損壞或丟失的情況下重新傳輸數據的技術。該技術的工作原理是發送方在收到最后發送幀的確認之前不發送下一幀。
(2) 重傳
重傳需要四個功能:
- 發送設備保留最后發送幀的副本,直到收到確認。如果未正確接收幀,則保留副本允許發送方重新傳輸數據。
- 數據幀和ACK幀都交替編號為0和1,以便可以單獨識別它們。假設數據1幀確認數據0幀意味著數據0幀已正確到達并期望接收數據1幀。
- 如果在最后發送的幀中發生錯誤,則接收器發送未編號的NAK幀。收到NAK幀后,發送方重新發送數據。
- 它適用于計時器。如果在規定的時間內沒有收到確認,則發送方認為幀在傳輸過程中丟失,因此它將重新發送幀。
重傳的兩種可能性:
- 損壞的幀 :當接收器接收到損壞的幀時,即幀包含錯誤,然后它返回NAK幀。例如,當發送數據0幀,然后接收器發送ACK 1幀意味著數據0已正確到達,并發送數據1幀。發送方發送下一幀:數據1.它達到未損壞,接收方返回ACK 0.發送方發送下一幀:數據0.接收方報告錯誤并返回NAK幀。發送方重新傳輸數據0幀。
- 丟失幀 :發送者配備定時器,并在幀發送時啟動。有時框架沒有到達接收端,因此無論是正面還是負面都不能確認。發送器等待確認,直到定時器熄滅。如果定時器熄滅,它將重新發送最后一個發送的幀。
(3) 滑動窗ARQ
__滑動窗__ARQ是一種用于連續傳輸錯誤控制的技術。
用于重傳的三個功能:
- 在這種情況下,發送方保留所有發送幀的副本,直到它們被確認為止。假設已經發送了從0到4的幀,并且最后一次確認是針對第2幀,發送方必須保留第3幀和第4幀的副本,直到它們正確接收為止。
- 接收器可以根據條件發送NAK或ACK。NAK幀告訴發件人數據已被收到損壞。由于滑動窗口是連續傳輸機制,因此必須對ACK和NAK進行編號以識別幀。ACK幀由一個數字組成,表示接收方希望接收的下一幀。NAK幀由表示損壞幀的數字組成。
- 滑動窗口ARQ配備有計時器以處理丟失的確認。假設在收到任何確認之前已經發送了n-1幀。發送方等待確認,因此它啟動計時器并等待再發送之前。如果分配的時間用完,則發送方根據使用的協議重新發送一個或所有幀。
滑動窗口ARQ中使用的兩個協議:
Go-Back-n ARQ :在Go-Back-N ARQ協議中,如果一幀丟失或損壞,則它重新發送所有幀,之后它不接收肯定ACK。
選擇性拒絕ARQ :選擇性拒絕ARQ技術比Go-Back-n ARQ更有效。在該技術中,僅重傳那些已經接收到否定確認(NAK)的幀。接收器存儲緩沖區保持所有損壞的幀保持不變,直到正確接收到錯誤幀。接收器必須具有適當的邏輯,以便以正確的順序重新插入幀。發送方必須包含一個搜索機制,該機制僅選擇所請求的重傳幀。
6 STM32 的 ETH 外設
前文講解了以太網的相關理論知識,接下來筆者將從實際出發,介紹STM32XX7系列ETH外設,從而將理論結合實際應用。
如果從硬件角度來看以太網,則由CPU,MAC,PHY三部分組成的,如下圖所示:
上圖中DMA集成在CPU,CPU、MAC、PHY并不是集成在同一個芯片內,由于PHY包含大量模擬器件,而MAC是典型的數字電路,考慮到芯片面積及模擬/數字混合架構的原因,將MAC集成進CPU而將PHY留在片外,這種結構是最常見的。 下圖是網絡接口內部結構圖,虛框表示CPU,MAC集成在CPU中,PHY芯片通過MII接口與CPU上的MAC連接。
STM32XX7系列控制器內部集成了一個以太網外設,它實際是一個通過 DMA 控制器進行介質訪問控制 (MAC),它的功能就是實現 MAC 層的任務。
以太網提供了可配置、靈活的外設,用以滿足客戶的各種應用需求。它支持與外部物理層(PHY) 相連的兩個工業標準接口:默認情況下使用的介質獨立接口 (MII)(在 IEEE 802.3 規范中定義)和簡化介質獨立接口 (RMII)。它有多種應用領域,例如交換機、網絡接口卡等。Nucleo-F746ZG借助以太網外設,STM32F746 控制器可以通過 ETH 外設按照 IEEE 802.3-2002 標準發送和接收 MAC 數據包。遵循IEEE 1588-2008 標準,用于規定聯網時鐘同步的精度。
ETH 內部自帶專用的 DMA 控制器用于 MAC, ETH 支持兩個工業標準接口介質獨立接口 (MII)和簡化介質獨立接口 (RMII) 用于與外部 PHY 芯片連接。 MII 和 RMII 接口用于 MAC 數據包傳輸, ETH 還集成了站管理接口 (SMI) 接口專門用于與外部 PHY 通信,用于訪問 PHY 芯片寄存器。
ETH 有專用的 DMA 控制器,它通過 AHB 主從接口與內核和存儲器相連, AHB 主接口用于控制數據傳輸,而 AHB 從接口用于訪問“控制與狀態寄存器” (CSR) 空間。在進行數據發送是,先將數據有存儲器以 DMA 傳輸到發送 TX FIFO 進行緩沖,然后由 MAC 內核發送;接收數據時, RXFIFO 先接收以太網數據幀,再由 DMA 傳輸至存儲器。 ETH 系統功能框圖見下圖。
【注】當使用以太網時, AHB 時鐘頻率必須至少為 25 MHz。
6.1 站管理接口:SMI
站管理接口 (SMI) 允許應用程序通過 2 線時鐘和數據線訪問任意 PHY 寄存器。該接口支持訪問多達 32 個 PHY。
應用程序可以從 32 個 PHY 中選擇一個 PHY,然后從任意 PHY 包含的 32 個寄存器中選擇一個寄存器,發送控制數據或接收狀態信息。任意給定時間內只能對一個 PHY 中的一個寄存器進行尋址。
MDC 時鐘線和 MDIO 數據線在微控制器中均用作復用功能 I/O:
- MDC :周期性時鐘,提供以最大頻率 2.5 MHz 傳輸數據時的參考時序。 MDC 的最短高電平時間和最短低電平時間必須均為 160 ns。 MDC 的最小周期必須為 400 ns。在空閑狀態下, SMI 管理接口將 MDC 時鐘信號驅動為低電平。
- MDIO :數據輸入/輸出比特流,用于通過 MDC 時鐘信號向/從 PHY 設備同步傳輸狀態信息。
SMI 幀格式
下表中給出了與讀操作或寫操作有關的幀結構,位傳輸順序必須從左到右。
管理幀字段 | |
---|---|
報頭(32位) | |
讀取 | 1... 1 |
寫入 | 1... 1 |
管理幀包括八個字段:
- 報頭:每個事務(讀取或寫入)均可通過報頭字段啟動,報頭字段對應于 MDIO 線上 32個連續的邏輯“1”位以及 MDC 上的 32 個周期。該字段用于與 PHY 設備建立同步。
- 起始:幀起始由 <01> 模式定義,用于驗證線路從默認邏輯“ 1”狀態變為邏輯“ 0”狀態,然后再從邏輯“0”狀態變為邏輯“1”狀態。
- 操作:定義正在發生的事務(讀取或寫入)的類型。
- PADDR: PHY 地址有 5 位,可構成 32 個唯一 PHY 地址。最先發送和接收地址的MSB 位。
- PADDR:寄存器地址有 5 位,從而可在所選 PHY 設備中對 32 個不同的寄存器進行尋址。最先發送和接收地址的 MSB 位。
- TA:周轉字段在 RADDR 和 DATA 字段間定義了一個 2 位模式,以避免在讀取事務期間出現競爭現象。讀取事務時, MAC 控制器將 TA 的 2 個位驅動為 MDIO 線上的高阻態。 PHY 設備必須將 TA 的第一位驅動為高阻態,將 TA 的第二位驅動為“0”。寫入事務時, MAC 控制器針對 TA 字段驅動 <10> 模式。 PHY 設備必須將 TA 的 2 個位驅動為高阻態。
- 數據:數據字段為 16 位。最先發送和接收的位必須為 ETH_MIID 寄存器的位 15。
- 空閑: MDIO 線驅動為高阻態。三態驅動器必須禁止, PHY 的上拉電阻使線路保持邏輯“1”狀態。
SMI 寫操作
當應用程序將 MII 寫入位和繁忙位(在以太網 MAC MII 地址寄存器 (ETH_MACMIIAR) 中)置 1 時, SMI 將通過傳輸 PHY 地址、 PHY 中的寄存器地址以及寫入數據(在以太網 MACMII 數據寄存器 (ETH_MACMIIDR) 中)來觸發對 PHY 寄存器進行寫操作。事務進行期間,應用程序不應更改 MII 地址寄存器的內容或 MII 數據寄存器。在此期間對 MII 地址寄存器或MII 數據寄存器執行的寫操作將會忽略(繁忙位處于高電平狀態),事務將無錯完成。寫操作完成后, SMI 將通過復位繁忙位進行指示。
下圖顯示了寫操作的幀格式。
SMI 時鐘選擇
MAC 啟動管理寫/讀操作。 SMI 時鐘是一個分頻時鐘,其時鐘源為應用時鐘( AHB 時鐘)。分頻系數取決于 MII 地址寄存器中設置的時鐘范圍。下表顯示了如何設置時鐘范圍。
選擇 | HCLK時鐘 | MDC時鐘 |
---|---|---|
000 | 60-100MHz | AHB時鐘/42 |
001 | 100-150MHz | AHB時鐘/62 |
010 | 20-35MHz | AHB時鐘/16 |
011 | 35-60MHz | AHB時鐘/26 |
100 | 150-216MHz | AHB時鐘/102 |
101, 110,111 | 保留 | - |
6.2介質獨立接口: MII
介質獨立接口 (MII) 定義了 10 Mb/s 和 100 Mb/s 的數據傳輸速率下 MAC 子層與 PHY 之間的互連。
- MII_TX_CLK:連續時鐘信號。該信號提供進行 TX 數據傳輸時的參考時序。標稱頻率為:速率為 10 Mb/s 時為 2.5 MHz;速率為 100 Mb/s 時為 25 MHz。
- MII_RX_CLK:連續時鐘信號。該信號提供進行 RX 數據傳輸時的參考時序。標稱頻率為:速率為 10 Mb/s 時為 2.5 MHz;速率為 100 Mb/s 時為 25 MHz。
- MII_TX_EN:發送使能信號。該信號表示 MAC 當前正針對 MII 發送半字節。該信號必須與報頭的前半字節進行同步 (MII_TX_CLK),并在所有待發送的半字節均發送到 MII時必須保持同步。
- MII_TXD[3:0]:數據發送信號。該信號是 4 個一組的數據信號,由 MAC 子層同步驅動,在MII_TX_EN 信號有效時才為有效信號(有效數據)。 MII_TXD[0] 為最低有效位,MII_TXD[3] 為最高有效位。禁止 MII_TX_EN 時,發送數據不會對 PHY 產生任何影響。
- MII_CRS:載波偵聽信號。當發送或接收介質處于非空閑狀態時,由 PHY 使能該信號。發送和接收介質均處于空閑狀態時,由 PHY 禁止該信號。 PHY 必須確保 MII_CS 信號在沖突條件下保持有效狀態。該信號無需與 TX 和 RX 時鐘保持同步。在全雙工模式下,該信號沒意義。
- MII_COL:沖突檢測信號。檢測到介質上存在沖突后, PHY 必須立即使能沖突檢測信號,并且只要存在沖突條件,沖突檢測信號必須保持有效狀態。該信號無需與 TX 和 RX 時鐘保持同步。在全雙工模式下,該信號沒意義。
- MII_RXD[3:0]:數據接收信號。該信號是 4 個一組的數據信號,由 PHY 同步驅動,在MII_RX_DV 信號有效時才為有效信號(有效數據)。 MII_RXD[0] 為最低有效位,MII_RXD[3] 為最高有效位。當 MII_RX_EN 禁止、 MII_RX_ER 使能時,特定的MII_RXD[3:0] 值用于傳輸來自 PHY 的特定信息。
- MII_RX_DV:接收數據有效信號。該信號表示 PHY 當前正針對 MII 接收已恢復并解碼的半字節。該信號必須與恢復幀的頭半字節進行同步 (MII_RX_CLK),并且一直保持同步到恢復幀的最后半字節。該信號必須在最后半字節隨后的第一個時鐘周期之前禁止。為了正確地接收幀, MII_RX_DV 信號必須在時間范圍上涵蓋要接收的幀,其開始時間不得遲于 SFD 字段出現的時間。
- MII_RX_ER:接收錯誤信號。該信號必須保持一個或多個周期 (MII_RX_CLK),從而向MAC 子層指示在幀的某處檢測到錯誤。該錯誤條件必須通過 MII_RX_DV 驗證。
TX 接口信號編碼
MII_TX_EN | MII_TXD[3:0] | 說明 |
---|---|---|
0 | 0000到1111 | 正常幀間 |
1 | 0000到1111 | 正常數據發送 |
RX 接口信號編碼
MII_RX_DV | MII_RX_ERR | MII_RXD[3:0] | 說明 |
---|---|---|---|
0 | 0 | 0000到1111 | 正常幀間 |
0 | 1 | 0000 | 正常幀間 |
0 | 1 | 0001到1101 | 保留 |
0 | 1 | 1110 | 錯誤載波檢測 |
0 | 1 | 1111 | 保留 |
1 | 0 | 0000到1111 | 正常數據接收 |
1 | 1 | 0000到1111 | 數據接收出現錯誤 |
MII 時鐘源
要生成 TX_CLK 和 RX_CLK 時鐘信號,必須向外部 PHY 提供 25MHz 時鐘,如圖 474 所示。除了使用外部 25 MHz 石英晶體提供該時鐘,還可以通過 STM32F75xxx 和 STM32F74xxx 微控制器的 MCO 引腳輸出該信號。這種情況下,必須對 PLL 倍頻進行配置,以通過 25 MHz外部石英晶體在 MCO 引腳上獲得所需頻率。
6.3 精簡介質獨立接口:RMII
精簡介質獨立接口 (RMII) 規范降低了 10/100 Mb/s 下微控制器以太網外設與外部 PHY 間的引腳數。根據 IEEE 802.3u 標準, MII 包括 16 個數據和控制信號的引腳。 RMII 規范將引腳數減少為 7 個(引腳數減少 62.5%)。
RMII 是 MAC 和 PHY 之間的實例化對象。這有助于將 MAC 的 MII 轉換為 RMII。 RMII 具有以下特性:
- 支持 10 Mb/s 和 100 Mb/s 的運行速率
- 參考時鐘必須是 50 MHz
- 相同的參考時鐘必須從外部提供給 MAC 和外部以太網 PHY
- 它提供了獨立的 2 位寬(雙位)的發送和接收數據路徑
RMII 時鐘源
使用外部 50 MHz 時鐘驅動 PHY 或使用嵌入式 PLL 生成 50 MHz 頻率信號來驅動 PHY。
如果使用RMII接口時,50MHz時鐘來源有以下幾種方式:
方式一:外部時鐘
一個50MHz的外部晶振同時給MAC和PHY供應50MHz時鐘,MCU其他的部分用自己獨立的時鐘。這個方式需要外掛一顆晶振。
方式二:與MCU共用外部時鐘
MAC, PHY, MCU都用一顆50MHz外部晶振統一提供時鐘源。
方式三:STM32輸出時鐘源
把50MHz換成25MHz,通過STM32的MCO引腳可以輸出同樣的25MHz時鐘給PHY,然后用PHY內部的PLL配置出50MHz時鐘反補給STM32的MAC,這樣就滿足了PHY和MAC都是50MHz。
值得注意的是,以上設計針對STM32XX7系列。
最后,來看看一個實際硬件案例。
下圖是Nucleo-F746ZG開發板的ETH硬件電路圖。主要是 LAN8742A 通過 RMII 和 SMI接口與 STM32F746 控制器連接,見下圖。
STM32F746通過RMII 接口連接PHY芯片LAN8742, 然后經過百兆網絡變壓器到RJ45接口。因為 LAN8742A只有 RMII 接口,因此這里與開發板的連接采用了 RMII 接口。電路設計時,將 nINTSEL 引腳通過下拉電阻拉低,也就是REF_CLK Out 模式,設置 nINT/FEFCLKO 為輸出 50MHz 時鐘,當然前提是在 XTAL1 和 XTAL2 接入了 25MHz 的時鐘源。
PHY芯片LAN8742的nRST復位引腳連接到了STM32F746的復位引腳, 兩者可以同時使用復位按鈕。
-
以太網
+關注
關注
40文章
5447瀏覽量
172134 -
計算機
+關注
關注
19文章
7522瀏覽量
88290 -
網絡
+關注
關注
14文章
7586瀏覽量
88994 -
交換技術
+關注
關注
1文章
23瀏覽量
8530
發布評論請先 登錄
相關推薦
評論