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


設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- LTM8052AEY ±5A、2.5V、2 象限穩(wěn)壓器的典型應(yīng)用
- LTC2992CMS-1 雙極性電源功率監(jiān)視器的典型應(yīng)用(1.5kHz I2C 接口)
- OP213FSZ耳機(jī)輸出放大器多媒體聲音編解碼器典型應(yīng)用
- NCP130AMX080TCGEVB:NCP130AMX080TC 偏置軌 LDO 穩(wěn)壓器演示板
- 4455C-868-PDK,用于 Si4455 868-MHz 射頻收發(fā)器的 EZRadio 雙向鏈路開發(fā)套件
- LT1818 的典型應(yīng)用 - 400MHz、2500V/us、9mA 單通道運(yùn)算放大器
- 使用一個(gè) iCoupler 實(shí)現(xiàn)半雙工單通道系統(tǒng)隔離
- LTC3857EGN-1 高效率雙路 1V/1.2V 降壓轉(zhuǎn)換器的典型應(yīng)用電路,具有電感器 DCR 電流檢測
- LTC3625EDE 演示板,VIN = 2.7V 至 5.5V,VOUT= 5.3V / 4.8V @IOUT 高達(dá) 1A
- AD9707-DPG2-EBZ,使用 AD9707 單通道、14 位、175 MSPS 數(shù)模轉(zhuǎn)換器的評估板
- 天華超凈:計(jì)劃25億元投建年產(chǎn)6萬噸電池級氫氧化鋰生產(chǎn)線
- VC MIPI模塊和附件現(xiàn)在可以通過貿(mào)澤電子進(jìn)行采購
- 美格智能獨(dú)家中標(biāo)了中國聯(lián)通5G AIoT智能模組
- OPPO Reno7紅絲絨新年版預(yù)售:小老虎Logo太可愛
- STM32-(ADC,DMA,重映射)
- iTOP-4412開發(fā)板-實(shí)戰(zhàn)教程-ssh服務(wù)器移植到arm開發(fā)板
- 消息稱AMD Threadripper PRO 5000工作站處理器3月發(fā)布
- 永磁同步電機(jī)常用轉(zhuǎn)子結(jié)構(gòu)的電磁振動(dòng)分析
- 示波器的存儲深度設(shè)置多大好
- 寄存器地址映射
- 上汽大眾:汽車網(wǎng)絡(luò)安全漏洞防護(hù)
- 恩智浦推出全新電池控制IC系列 助力新能源解決方案發(fā)展
- 全球首條GWh級新型固態(tài)電池生產(chǎn)線樣件下線
- 總投資455億元!三大動(dòng)力電池項(xiàng)目齊刷進(jìn)度條
- 現(xiàn)代汽車韓國建氫燃料電池廠,2028年投產(chǎn)
- 6月融資一覽:智能汽車芯片、第三代半導(dǎo)體、機(jī)器人成資本焦點(diǎn)
- 艙駕一體“點(diǎn)燃”新戰(zhàn)事
- 汽車智能化2.0引爆「萬億蛋糕」,誰在改寫游戲規(guī)則?
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財(cái)報(bào)和電話會議時(shí)間安排
- 三星Note20/Fold 2或在8月5日發(fā)布
- 格力"死磕"5G手機(jī):難見創(chuàng)新與競爭力
- 三星 Note 20 系列可能成史上最貴的 Note 機(jī)型
- 盧偉冰曬Redmi Note 8和iPhone 4:當(dāng)年的手機(jī)這么?。?/a>
- 中國電信:打造 100 元純 VoLTE的 功能手機(jī)
- 關(guān)于在stm32中使用printf函數(shù)的問題
- 關(guān)于STM32串口printf輸出調(diào)試信息問題
- “靜音語音輸入” 新專利!不用出聲就讓語音助理幫你做事?
- 微軟新專利 想用Surface Dial徹底取代鼠標(biāo)
- MSP430 ADC12采樣分析