互聯(lián)網技術對人類社會的影響不言而喻。當今大部分電子設備都能以不同的方式接入互聯(lián)網(Internet),在家庭中PC常見的互聯(lián)網接入方式是使用路由器(Router)組建小型局域網(LAN),利用互聯(lián)網專線或者調制調解器(modem)經過電話線網絡,連接到互聯(lián)網服務提供商(ISP),由互聯(lián)網服務提供商把用戶的局域網接入互聯(lián)網。而企業(yè)或學校的局域網規(guī)模較大,常使用交換機組成局域網,經過路由以不同的方式接入到互聯(lián)網中。
39.1 互聯(lián)網模型
通信至少是兩個設備的事,需要相互兼容的硬件和軟件支持,我們稱之為通信協(xié)議。以太網通信在結構比較復雜,國際標準組織將整個以太網通信結構制定了OSI模型,總共分層七個層,分別為應用層、表示層、會話層、傳輸層、網絡層、數(shù)據(jù)鏈路層以及物理層,每個層功能不同,通信中各司其職,整個模型包括硬件和軟件定義。OSI模型是理想分層,一般的網絡系統(tǒng)只是涉及其中幾層。
TCP/IP是互聯(lián)網最基本的協(xié)議,是互聯(lián)網通信使用的網絡協(xié)議,由網絡層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP只有四個分層,分別為應用層、傳輸層、網絡層以及網絡訪問層。雖然TCP/IP分層少了,但與OSI模型是不沖突的,它把OSI模型一些層次整合一起的,本質上可以實現(xiàn)相同功能。
實際上,還有一個TCP/IP混合模型,分為五個層,參考圖 391,它實際與TCP/IP四層模型是相通的,只是把網絡訪問層拆成數(shù)據(jù)鏈路層和物理層。這種分層方法對我們學習理解更容易。
圖 391 TCP/IP混合參考模型
設計網絡時,為了降低網絡設計的復雜性,對組成網絡的硬件、軟件進行封裝、分層,這些分層即構成了網絡體系模型。在兩個設備相同層之間的對話、通信約定,構成了層級協(xié)議。設備中使用的所有協(xié)議加起來統(tǒng)稱協(xié)議棧。在這個網絡模型中,每一層完成不同的任務,都提供接口供上一層訪問。而在每層的內部,可以使用不同的方式來實現(xiàn)接口,因而內部的改變不會影響其它層。
在TCP/IP混合參考模型中,數(shù)據(jù)鏈路層又被分為LLC層(邏輯鏈路層)和MAC層(媒體介質訪問層)。目前,對于普通的接入網絡終端的設備, LLC層和MAC層是軟、硬件的分界線。如PC的網卡主要負責實現(xiàn)參考模型中的MAC子層和物理層,在PC的軟件系統(tǒng)中則有一套龐大程序實現(xiàn)了LLC層及以上的所有網絡層次的協(xié)議。
由硬件實現(xiàn)的物理層和MAC子層在不同的網絡形式有很大的區(qū)別,如以太網和Wi-Fi,這是由物理傳輸方式決定的。但由軟件實現(xiàn)的其它網絡層次通常不會有太大區(qū)別,在PC上也許能實現(xiàn)完整的功能,一般支持所有協(xié)議,而在嵌入式領域則按需要進行裁剪。
39.2 以太網
以太網(Ethernet)是互聯(lián)網技術的一種,由于它是在組網技術中占的比例最高,很多人直接把以太網理解為互聯(lián)網。
以太網是指遵守IEEE 802.3標準組成的局域網,由IEEE 802.3標準規(guī)定的主要是位于參考模型的物理層(PHY)和數(shù)據(jù)鏈路層中的介質訪問控制子層(MAC)。在家庭、企業(yè)和學校所組建的PC局域網形式一般也是以太網,其標志是使用水晶頭網線來連接(當然還有其它形式)。IEEE還有其它局域網標準,如IEEE 802.11是無線局域網,俗稱Wi-Fi。IEEE 802.15是個人域網,即藍牙技術,其中的802.15.4標準則是ZigBee技術。
現(xiàn)階段,工業(yè)控制、環(huán)境監(jiān)測、智能家居的嵌入式設備產生了接入互聯(lián)網的需求,利用以太網技術,嵌入式設備可以非常容易地接入到現(xiàn)有的計算機網絡中。
39.2.1 PHY層
在物理層,由IEEE 802.3標準規(guī)定了以太網使用的傳輸介質、傳輸速度、數(shù)據(jù)編碼方式和沖突檢測機制,物理層一般是通過一個PHY芯片實現(xiàn)其功能的。
1. 傳輸介質
傳輸介質包括同軸電纜、雙絞線(水晶頭網線是一種雙絞線)、光纖。根據(jù)不同的傳輸速度和距離要求,基于這三類介質的信號線又衍生出很多不同的種類。最常用的是"五類線"適用于100BASE-T和10BASE-T的網絡,它們的網絡速率分別為100Mbps和10Mbps。
2. 編碼
為了讓接收方在沒有外部時鐘參考的情況也能確定每一位的起始、結束和中間位置,在傳輸信號時不直接采用二進制編碼。在10BASE-T的傳輸方式中采用曼徹斯特編碼,在100BASE-T中則采用4B/5B編碼。
曼徹斯特編碼把每一個二進制位的周期分為兩個間隔,在表示"1"時,以前半個周期為高電平,后半個周期為低電平。表示"0"時則相反,見圖 392
圖 392 曼徹斯特編碼
采用曼徹斯特碼在每個位周期都有電壓變化,便于同步。但這樣的編碼方式效率太低,只有50%。
在100BASE-T 采用的4B/5B編碼是把待發(fā)送數(shù)據(jù)位流的每4位分為一組,以特定的5位編碼來表示,這些特定的5位編碼能使數(shù)據(jù)流有足夠多的跳變,達到同步的目的,而且效率也從曼徹斯特編碼的50%提高到了80%。
3. CSMA/CD沖突檢測
早期的以太網大多是多個節(jié)點連接到同一條網絡總線上(總線型網絡),存在信道競爭問題,因而每個連接到以太網上的節(jié)點都必須具備沖突檢測功能。以太網具備CSMA/CD沖突檢測機制,如果多個節(jié)點同時利用同一條總線發(fā)送數(shù)據(jù),則會產生沖突,總線上的節(jié)點可通過接收到的信號與原始發(fā)送的信號的比較檢測是否存在沖突,若存在沖突則停止發(fā)送數(shù)據(jù),隨機等待一段時間再重傳。
現(xiàn)在大多數(shù)局域網組建的時候很少采用總線型網絡,大多是一個設備接入到一個獨立的路由或交換機接口,組成星型網絡,不會產生沖突。但為了兼容,新出的產品還是帶有沖突檢測機制。
39.2.2 MAC子層
1. MAC的功能
MAC子層是屬于數(shù)據(jù)鏈路層的下半部分,它主要負責與物理層進行數(shù)據(jù)交接,如是否可以發(fā)送數(shù)據(jù),發(fā)送的數(shù)據(jù)是否正確,對數(shù)據(jù)流進行控制等。它自動對來自上層的數(shù)據(jù)包加上一些控制信號,交給物理層。接收方得到正常數(shù)據(jù)時,自動去除MAC控制信號,把該數(shù)據(jù)包交給上層。
2. MAC數(shù)據(jù)包
IEEE對以太網上傳輸?shù)臄?shù)據(jù)包格式也進行了統(tǒng)一規(guī)定,見圖 393。該數(shù)據(jù)包被稱為MAC數(shù)據(jù)包。
圖 393 MAC數(shù)據(jù)包格式
MAC數(shù)據(jù)包由前導字段、幀起始定界符、目標地址、源地址、數(shù)據(jù)包類型、數(shù)據(jù)域、填充域、校驗和域組成。
? 前導字段,也稱報頭,這是一段方波,用于使收發(fā)節(jié)點的時鐘同步。內容為連續(xù)7個字節(jié)的0x55。字段和幀起始定界符在MAC收到數(shù)據(jù)包后會自動過濾掉。
? 幀起始定界符(SFD):用于區(qū)分前導段與數(shù)據(jù)段的,內容為0xD5。
? MAC地址: MAC地址由48位數(shù)字組成,它是網卡的物理地址,在以太網傳輸?shù)淖畹讓樱褪歉鶕?jù)MAC地址來收發(fā)數(shù)據(jù)的。部分MAC地址用于廣播和多播,在同一個網絡里不能有兩個相同的MAC地址。PC的網卡在出廠時已經設置好了MAC地址,但也可以通過一些軟件來進行修改,在嵌入式的以太網控制器中可由程序進行配置。數(shù)據(jù)包中的DA是目標地址,SA是源地址。
? 數(shù)據(jù)包類型:本區(qū)域可以用來描述本MAC數(shù)據(jù)包是屬于TCP/IP協(xié)議層的IP包、ARP包還是SNMP包,也可以用來描述本MAC數(shù)據(jù)包數(shù)據(jù)段的長度。如果該值被設置大于0x0600,不用于長度描述,而是用于類型描述功能,表示與以太網幀相關的MAC客戶端協(xié)議的種類。
? 數(shù)據(jù)段:數(shù)據(jù)段是MAC包的核心內容,它包含的數(shù)據(jù)來自MAC的上層。其長度可以從0~1500字節(jié)間變化。
? 填充域:由于協(xié)議要求整個MAC數(shù)據(jù)包的長度至少為64字節(jié)(接收到的數(shù)據(jù)包如果少于64字節(jié)會被認為發(fā)生沖突,數(shù)據(jù)包被自動丟棄),當數(shù)據(jù)段的字節(jié)少于46字節(jié)時,在填充域會自動填上無效數(shù)據(jù),以使數(shù)據(jù)包符合長度要求。
? 校驗和域:MAC數(shù)據(jù)包的尾部是校驗和域,它保存了CRC校驗序列,用于檢錯。
以上是標準的MAC數(shù)據(jù)包,IEEE 802.3同時還規(guī)定了擴展的MAC數(shù)據(jù)包,它是在標準的MAC數(shù)據(jù)包的SA和數(shù)據(jù)包類型之間添加4個字節(jié)的QTag前綴字段,用于獲取標志的MAC幀。前2個字節(jié)固定為0x8100,用于識別QTag前綴的存在;后兩個字節(jié)內容分別為3個位的用戶優(yōu)先級、1個位的標準格式指示符(CFI)和一個12位的VLAN標識符。
39.3 TCP/IP協(xié)議棧
標準TCP/IP協(xié)議是用于計算機通信的一組協(xié)議,通常稱為TCP/IP協(xié)議棧,通俗講就是符合以太網通信要求的代碼集合,一般要求它可以實現(xiàn)圖 391中每個層對應的協(xié)議,比如應用層的HTTP、FTP、DNS、SMTP協(xié)議,傳輸層的TCP、UDP協(xié)議、網絡層的IP、ICMP協(xié)議等等。關于TCP/IP協(xié)議詳細內容推薦閱讀《TCP-IP詳解》和《用TCP/IP進行網際互連》理解。
Windows操作系統(tǒng)、UNIX類操作系統(tǒng)都有自己的一套方法來實現(xiàn)TCP/IP通信協(xié)議,它們都提供非常完整的TCP/IP協(xié)議。對于一般的嵌入式設備,受制于硬件條件沒辦法支持使用在Window或UNIX類操作系統(tǒng)的運行的TCP/IP協(xié)議棧,一般只能使用簡化版本的TCP/IP協(xié)議棧,目前開源的適合嵌入式的有uIP、TinyTCP、uC/TCP-IP、LwIP等等。其中LwIP是目前在嵌入式網絡領域被討論和使用廣泛的協(xié)議棧。本章內容其中一個目的就是移植LwIP到開發(fā)板上運行。
39.3.1 為什么需要協(xié)議棧
物理層主要定義物理介質性質,MAC子層負責與物理層進行數(shù)據(jù)交接,這兩部分是與硬件緊密聯(lián)系的,就嵌入式控制芯片來說,很多都內部集成了MAC控制器,完成MAC子層功能,所以依靠這部分功能是可以實現(xiàn)兩個設備數(shù)據(jù)交換,而時間傳輸?shù)臄?shù)據(jù)就是MAC數(shù)據(jù)包,發(fā)送端封裝好數(shù)據(jù)包,接收端則解封數(shù)據(jù)包得到可用數(shù)據(jù),這樣的一個模型與使用USART控制器實現(xiàn)數(shù)據(jù)傳輸是非常類似的。但如果將以太網運用在如此基礎的功能上,完全是大材小用,因為以太網具有傳輸速度快、可傳輸距離遠、支持星型拓撲設備連接等等強大功能。功能強大的東西一般都會用高級的應用,這也是設計者的初衷。
使用以太網接口的目的就是為了方便與其它設備互聯(lián),如果所有設備都約定使用一種互聯(lián)方式,在軟件上加一些層次來封裝,這樣不同系統(tǒng)、不同的設備通訊就變得相對容易了。而且只要新加入的設備也使用同一種方式,就可以直接與之前存在于網絡上的其它設備通訊。這就是為什么產生了在MAC之上的其它層次的網絡協(xié)議及為什么要使用協(xié)議棧的原因。又由于在各種協(xié)議棧中TCP/IP協(xié)議棧得到了最廣泛使用,所有接入互聯(lián)網的設備都遵守TCP/IP協(xié)議。所以,想方便地與其它設備互聯(lián)通信,需要提供對TCP/IP協(xié)議的支持。
39.3.2 各網絡層的功能
用以太網和Wi-Fi作例子,它們的MAC子層和物理層有較大的區(qū)別,但在MAC之上的LLC層、網絡層、傳輸層和應用層的協(xié)議,是基本上同的,這幾層協(xié)議由軟件實現(xiàn),并對各層進行封裝。根據(jù)TCP/IP協(xié)議,各層的要實現(xiàn)的功能如下:
LLC層:處理傳輸錯誤;調節(jié)數(shù)據(jù)流,協(xié)調收發(fā)數(shù)據(jù)雙方速度,防止發(fā)送方發(fā)送得太快而接收方丟失數(shù)據(jù)。主要使用數(shù)據(jù)鏈路協(xié)議。
網絡層:本層也被稱為IP層。LLC層負責把數(shù)據(jù)從線的一端傳輸?shù)搅硪欢耍芏鄷r候不同的設備位于不同的網絡中(并不是簡單的網線的兩頭)。此時就需要網絡層來解決子網路由拓撲問題、路徑選擇問題。在這一層主要有IP協(xié)議、ICMP協(xié)議。
傳輸層:由網絡層處理好了網絡傳輸?shù)穆窂絾栴}后,端到端的路徑就建立起來了。傳輸層就負責處理端到端的通訊。在這一層中主要有TCP、UDP協(xié)議
應用層:經過前面三層的處理,通訊完全建立。應用層可以通過調用傳輸層的接口來編寫特定的應用程序。而TCP/IP協(xié)議一般也會包含一些簡單的應用程序如Telnet遠程登錄、FTP文件傳輸、SMTP郵件傳輸協(xié)議。
實際上,在發(fā)送數(shù)據(jù)時,經過網絡協(xié)議棧的每一層,都會給來自上層的數(shù)據(jù)添加上一個數(shù)據(jù)包的頭,再傳遞給下一層。在接收方收到數(shù)據(jù)時,一層層地把所在層的數(shù)據(jù)包的頭去掉,向上層遞交數(shù)據(jù),參考圖 394。
圖 394 數(shù)據(jù)經過每一層的封裝和還原
39.4 以太網外設(ETH)
STM32F42x系列控制器內部集成了一個以太網外設,它實際是一個通過DMA控制器進行介質訪問控制(MAC),它的功能就是實現(xiàn)MAC層的任務。借助以太網外設,STM32F42x控制器可以通過ETH外設按照IEEE 802.3-2002標準發(fā)送和接收MAC數(shù)據(jù)包。ETH內部自帶專用的DMA控制器用于MAC,ETH支持兩個工業(yè)標準接口介質獨立接口(MII)和簡化介質獨立接口(RMII)用于與外部PHY芯片連接。MII和RMII接口用于MAC數(shù)據(jù)包傳輸,ETH還集成了站管理接口(SMI)接口專門用于與外部PHY通信,用于訪問PHY芯片寄存器。
物理層定義了以太網使用的傳輸介質、傳輸速度、數(shù)據(jù)編碼方式和沖突檢測機制,PHY芯片是物理層功能實現(xiàn)的實體,生活中常用水晶頭網線+水晶頭插座+PHY組合構成了物理層。
ETH有專用的DMA控制器,它通過AHB主從接口與內核和存儲器相連,AHB主接口用于控制數(shù)據(jù)傳輸,而AHB從接口用于訪問"控制與狀態(tài)寄存器"(CSR)空間。在進行數(shù)據(jù)發(fā)送是,先將數(shù)據(jù)有存儲器以DMA傳輸?shù)桨l(fā)送TX FIFO進行緩沖,然后由MAC內核發(fā)送;接收數(shù)據(jù)時,RX FIFO先接收以太網數(shù)據(jù)幀,再由DMA傳輸至存儲器。ETH系統(tǒng)功能框圖見圖 395。
圖 395 ETH功能框圖
39.4.1 SMI接口
SMI是MAC內核訪問PHY寄存器標志接口,它由兩根線組成,數(shù)據(jù)線MDIO和時鐘線MDC。SMI支持訪問32個PHY,這在設備需要多個網口時非常有用,不過一般設備都只使用一個PHY。PHY芯片內部一般都有32個16位的寄存器,用于配置PHY芯片屬性、工作環(huán)境、狀態(tài)指示等等,當然很多PHY芯片并沒有使用到所有寄存器位。MAC內核就是通過SMI向PHY的寄存器寫入數(shù)據(jù)或從PHY寄存器讀取PHY狀態(tài),一次只能對一個PHY的其中一個寄存器進行訪問。SMI最大通信頻率為2.5MHz,通過控制以太網MAC MII地址寄存器 (ETH_MACMIIAR)的CR位可選擇時鐘頻率。
1. SMI幀格式
SMI是通過數(shù)據(jù)幀方式與PHY通信的,幀格式如表 391,數(shù)據(jù)位傳輸順序從左到右。
表 391 SMI幀格式
PADDR用于指定PHY地址,每個PHY都有一個地址,一般由PHY硬件設計決定,所以是固定不變的。RADDR用于指定PHY寄存器地址。TA為狀態(tài)轉換域,若為讀操作,MAC輸出兩個位高阻態(tài),而PHY芯片則在第一位時輸出高阻態(tài),第二位時輸出"0"。若為寫操作,MAC輸出"10",PHY芯片則輸出高阻態(tài)。數(shù)據(jù)段有16位,對應PHY寄存器每個位,先發(fā)送或接收到的位對應以太網 MAC MII 數(shù)據(jù)寄存器(ETH_MACMIIDR)寄存器的位15。
2. SMI讀寫操作
當以太網MAC MII地址寄存器 (ETH_MACMIIAR)的寫入位和繁忙位被置1時,SMI將向指定的PHY芯片指定寄存器寫入ETH_MACMIIDR中的數(shù)據(jù)。寫操作時序見圖 396。
圖 396 SMI寫操作
當以太網MAC MII地址寄存器 (ETH_MACMIIAR)的寫入位為0并且繁忙位被置1時,SMI將從向指定的PHY芯片指定寄存器讀取數(shù)據(jù)到ETH_MACMIIDR內。讀操作時序見圖 397。
圖 397 SMI讀操作
39.4.2 MII和RMII接口
介質獨立接口(MII)用于理解MAC控制器和PHY芯片,提供數(shù)據(jù)傳輸路徑。RMII接口是MII接口的簡化版本,MII需要16根通信線,RMII只需7根通信,在功能上是相同的。圖 398為MII接口連接示意圖,圖 399為RMII接口連接示意圖。
圖 398 MII接口連接
圖 399 RMII接口連接
? TX_CLK:數(shù)據(jù)發(fā)送時鐘線。標稱速率為10Mbit/s時為2.5MHz;速率為100Mbit/s時為25MHz。RMII接口沒有該線。
? RX_CLK:數(shù)據(jù)接收時鐘線。標稱速率為10Mbit/s時為2.5MHz;速率為100Mbit/s時為25MHz。RMII接口沒有該線。
? TX_EN:數(shù)據(jù)發(fā)送使能。在整個數(shù)據(jù)發(fā)送過程保存有效電平。
? TXD[3:0]或TXD[1:0]:數(shù)據(jù)發(fā)送數(shù)據(jù)線。對于MII有4位,RMII只有2位。只有在TX_EN處于有效電平數(shù)據(jù)線才有效。
? CRS:載波偵聽信號,由PHY芯片負責驅動,當發(fā)送或接收介質處于非空閑狀態(tài)時使能該信號。在全雙工模式該信號線無效。
? COL:沖突檢測信號,由PHY芯片負責驅動,檢測到介質上存在沖突后該線被使能,并且保持至沖突解除。在全雙工模式該信號線無效。
? RXD[3:0]或RXD[1:0]:數(shù)據(jù)接收數(shù)據(jù)線,由PHY芯片負責驅動。對于MII有4位,RMII只有2位。在MII模式,當RX_DV禁止、RX_ER使能時,特定的RXD[3:0]值用于傳輸來自PHY的特定信息。
? RX_DV:接收數(shù)據(jù)有效信號,功能類似TX_EN,只不過用于數(shù)據(jù)接收,由PHY芯片負責驅動。對于RMII接口,是把CRS和RX_DV整合成CRS_DV信號線,當介質處于不同狀態(tài)時會自切換該信號狀態(tài)。
? RX_ER:接收錯誤信號線,由PHY驅動,向MAC控制器報告在幀某處檢測到錯誤。
? REF_CLK:僅用于RMII接口,由外部時鐘源提供50MHz參考時鐘。
因為要達到100Mbit/s傳輸速度,MII和RMII數(shù)據(jù)線數(shù)量不同,使用MII和RMII在時鐘線的設計是完全不同的。對于MII接口,一般是外部為PHY提供25MHz時鐘源,再由PHY提供TX_CLK和RX_CLK時鐘。對于RMII接口,一般需要外部直接提供50MHz時鐘源,同時接入MAC和PHY。
開發(fā)板板載的PHY芯片型號為LAN8720A,該芯片只支持RMII接口,電路設計時參考圖 399。
ETH相關硬件在STM32F42x控制器分布參考表 392。
表 392 ETH復用引腳
其中,PPS_OUT是IEEE 1588定義的一個時鐘同步機制。
39.4.3 MAC數(shù)據(jù)包發(fā)送和接收
ETH外設負責MAC數(shù)據(jù)包發(fā)送和接收。利用DMA從系統(tǒng)寄存器得到數(shù)據(jù)包數(shù)據(jù)內容,ETH外設自動填充完成MAC數(shù)據(jù)包封裝,然后通過PHY發(fā)送出去。在檢測到有MAC數(shù)據(jù)包需要接收時,ETH外設控制數(shù)據(jù)接收,并解封MAC數(shù)據(jù)包得到解封后數(shù)據(jù)通過DMA傳輸?shù)较到y(tǒng)寄存器內。
1. MAC數(shù)據(jù)包發(fā)送
MAC數(shù)據(jù)幀發(fā)送全部由DMA控制,從系統(tǒng)存儲器讀取的以太網幀由DMA推入FIFO,然后將幀彈出并傳輸?shù)組AC內核。幀傳輸結束后,從MAC內核獲取發(fā)送狀態(tài)并傳回DMA。在檢測到SOF(Start Of Frame)時,MAC接收數(shù)據(jù)并開始MII發(fā)送。在EOF(End Of Frame)傳輸?shù)組AC內核后,內核將完成正常的發(fā)送,然后將發(fā)送狀態(tài)返回給DMA。如果在發(fā)送過程中發(fā)送常規(guī)沖突,MAC內核將使發(fā)送狀態(tài)有效,然后接受并丟棄所有后續(xù)數(shù)據(jù),直至收到下一SOF。檢測到來自MAC的重試請求時,應從SOF重新發(fā)送同一幀。如果發(fā)送期間未連續(xù)提供數(shù)據(jù),MAC將發(fā)出下溢狀態(tài)。在幀的正常傳輸期間,如果MAC在未獲得前一幀的EOF的情況下接收到SOF,則將忽略該SOF并將新的幀視為前一幀的延續(xù)。
MAC控制MAC數(shù)據(jù)包的發(fā)送操作,它會自動生成前導字段和SFD以及發(fā)送幀狀態(tài)返回給DMA,在半雙工模式下自動生成阻塞信號,控制jabber(MAC看門狗)定時器用于在傳輸字節(jié)超過2048字節(jié)時切斷數(shù)據(jù)包發(fā)送。在半雙工模式下,MAC使用延遲機制進行流量控制,程序通過將ETH_MACFCR寄存器的BPA位置1來請求流量控制。MAC包含符合IEEE 1588的時間戳快照邏輯。MAC數(shù)據(jù)包發(fā)送時序參考圖 3910。
圖 3910 MAC數(shù)據(jù)包發(fā)送時序(無沖突)
2. MAC數(shù)據(jù)包接收
MAC接收到的數(shù)據(jù)包填充RX FIFO,達到FIFO設定閾值后請求DMA傳輸。在默認直通模式下,當FIFO接收到64個字節(jié)(使用ETH_DMAOMR寄存器中的RTC位配置)或完整的數(shù)據(jù)包時,數(shù)據(jù)將彈出,其可用性將通知給DMA。DMA向AHB接口發(fā)起傳輸后,數(shù)據(jù)傳輸將從FIFO持續(xù)進行,直到傳輸完整個數(shù)據(jù)包。完成EOF幀的傳輸后,狀態(tài)字將彈出并發(fā)送到DMA控制器。在Rx FIFO存儲轉發(fā)模式(通過ETH_DMAOMR寄存器中的RSF位配置)下,僅在幀完全寫入Rx FIFO后才可讀出幀。
當MAC在MII上檢測到SFD時,將啟動接收操作。MAC內核將去除報頭和SFD,然后再繼續(xù)處理幀。檢查報頭字段以進行過濾,F(xiàn)CS字段用于驗證幀的CRC如果幀未通過地址濾波器,則在內核中丟棄該幀。MAC數(shù)據(jù)包接收時序參考圖 3911。
圖 3911 MAC數(shù)據(jù)包接收時序(無錯誤)
39.4.4 MAC過濾
MAC過濾功能可以選擇性的過濾設定目標地址或源地址的MAC幀。它將檢查所有接收到的數(shù)據(jù)幀的目標地址和源地址,根據(jù)過濾選擇設定情況,檢測后報告過濾狀態(tài)。針對目標地址過濾可以有三種,分別是單播、多播和廣播目標地址過濾;針對源地址過濾就只有單播源地址過濾。
單播目標地址過濾是將接收的相應DA字段與預設的以太網MAC地址寄存器內容比較,最高可預設4個過濾MAC地址。多播目標地址過濾是根據(jù)幀過濾寄存器中的HM位執(zhí)行對多播地址的過濾,是對MAC地址寄存器進行比較來實現(xiàn)的。單播和多播目標地址過濾都還支持Hash過濾模式。廣播目標地址過濾通過將幀過濾寄存器的BFD位置1使能,這使得MAC丟棄所有廣播幀。
單播源地址過濾是將接收的SA字段與SA寄存器內容進行比較過濾。
MAC過濾還具備反向過濾操作功能,即讓過濾結構求補集。
39.5 PHY:LAN8720A
LAN8720A是SMSC公司(已被Microchip公司收購)設計的一個體積小、功耗低、全能型10/100Mbps的以太網物理層收發(fā)器。它是針對消費類電子和企業(yè)應用而設計的。LAN8720A總共只有24Pin,僅支持RMII接口。由它組成的網絡結構見圖 3912。
圖 3912 由LAN8720A組成的網絡系統(tǒng)結構
LAN8720A通過RMII與MAC連接。RJ45是網絡插座,在與LAN8720A連接之間還需要一個變壓器,所以一般使用帶電壓轉換和LED指示燈的HY911105A型號的插座。一般來說,必須為使用RMII接口的PHY提供50MHz的時鐘源輸入到REF_CLK引腳,不過LAN8720A內部集成PLL,可以將25MHz的時鐘源陪頻到50MHz并在指定引腳輸出該時鐘,所以我們可以直接使其與REF_CLK連接達到提供50MHz時鐘效果。
LAN8720A內部系統(tǒng)結構見圖 3913。
圖 3913 LAN8720A內部系統(tǒng)結構
LAN8720A有各個不同功能模塊組成,最重要的要數(shù)接收控制器和發(fā)送控制器,其它的基本上都是與外部引腳掛鉤,實現(xiàn)信號傳輸。部分引腳是具有雙重功能的,比如PHYAD0與RXER引腳是共用的,在系統(tǒng)上電后LAN8720A會馬上讀取這部分共用引腳的電平,以確定系統(tǒng)的狀態(tài)并保存在相關寄存器內,之后則自動轉入作為另一功能引腳。
PHYAD[0]引腳用于配置SMI通信的LAN8720A地址,在芯片內部該引腳已經自帶下拉電阻,默認認為0(即使外部懸空不接),在系統(tǒng)上電時會檢測該引腳獲取得到LAN8720A的地址為0或者1,并保存在特殊模式寄存器(R18)的PHYAD位中,該寄存器的PHYAD有5個位,在需要超過2個LAN8720A時可以通過軟件設置不同SMI通信地址。PHYAD[0]是與RXER引腳共用。
MODE[2:0]引腳用于選擇LAN8720A網絡通信速率和工作模式,可選10Mbps或100Mbps通信速度,半雙工或全雙工工作模式,另外LAN8720A支持HP Auto-MDIX自動翻轉功能,即可自動識別直連或交叉網線并自適應。一般將MODE引腳都設置為1,可以讓LAN8720A啟動自適應功能,它會自動尋找最優(yōu)工作方式。MODE[0]與RXD0引腳共用、MODE[1]與RXD1引腳共用、MODE[2]與CRS_DV引腳共用。
上一篇:第27章 LTDC/DMA2D—液晶顯示—零死角玩轉STM32-F429系列
下一篇:第1章-如何使用本書—零死角玩轉STM32-F429系列
推薦閱讀最新更新時間:2025-06-30 07:11


設計資源 培訓 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產品線 推出PWM 分辨率和 ADC 速度業(yè)界領先的新器件
- 意法半導體STM32MP23x:突破成本限制的工業(yè)AI應用核心
- 意法半導體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網頁和arduino的通訊
- ESP32 freeRTOS使用測試
- LTM8052AEY ±5A、2.5V、2 象限穩(wěn)壓器的典型應用
- LTC2992CMS-1 雙極性電源功率監(jiān)視器的典型應用(1.5kHz I2C 接口)
- OP213FSZ耳機輸出放大器多媒體聲音編解碼器典型應用
- NCP130AMX080TCGEVB:NCP130AMX080TC 偏置軌 LDO 穩(wěn)壓器演示板
- 4455C-868-PDK,用于 Si4455 868-MHz 射頻收發(fā)器的 EZRadio 雙向鏈路開發(fā)套件
- LT1818 的典型應用 - 400MHz、2500V/us、9mA 單通道運算放大器
- 使用一個 iCoupler 實現(xiàn)半雙工單通道系統(tǒng)隔離
- LTC3857EGN-1 高效率雙路 1V/1.2V 降壓轉換器的典型應用電路,具有電感器 DCR 電流檢測
- LTC3625EDE 演示板,VIN = 2.7V 至 5.5V,VOUT= 5.3V / 4.8V @IOUT 高達 1A
- AD9707-DPG2-EBZ,使用 AD9707 單通道、14 位、175 MSPS 數(shù)模轉換器的評估板