互聯(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ī)模較大,常使用交換機組成局域網(wǎng),經(jīng)過路由以不同的方式接入到互聯(lián)網(wǎng)中。
39.1 互聯(lián)網(wǎng)模型
通信至少是兩個設(shè)備的事,需要相互兼容的硬件和軟件支持,我們稱之為通信協(xié)議。以太網(wǎng)通信在結(jié)構(gòu)比較復(fù)雜,國際標(biāo)準(zhǔn)組織將整個以太網(wǎng)通信結(jié)構(gòu)制定了OSI模型,總共分層七個層,分別為應(yīng)用層、表示層、會話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層以及物理層,每個層功能不同,通信中各司其職,整個模型包括硬件和軟件定義。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只有四個分層,分別為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層以及網(wǎng)絡(luò)訪問層。雖然TCP/IP分層少了,但與OSI模型是不沖突的,它把OSI模型一些層次整合一起的,本質(zhì)上可以實現(xiàn)相同功能。
實際上,還有一個TCP/IP混合模型,分為五個層,參考圖 391,它實際與TCP/IP四層模型是相通的,只是把網(wǎng)絡(luò)訪問層拆成數(shù)據(jù)鏈路層和物理層。這種分層方法對我們學(xué)習(xí)理解更容易。
圖 391 TCP/IP混合參考模型
設(shè)計網(wǎng)絡(luò)時,為了降低網(wǎng)絡(luò)設(shè)計的復(fù)雜性,對組成網(wǎng)絡(luò)的硬件、軟件進行封裝、分層,這些分層即構(gòu)成了網(wǎng)絡(luò)體系模型。在兩個設(shè)備相同層之間的對話、通信約定,構(gòu)成了層級協(xié)議。設(shè)備中使用的所有協(xié)議加起來統(tǒng)稱協(xié)議棧。在這個網(wǎng)絡(luò)模型中,每一層完成不同的任務(wù),都提供接口供上一層訪問。而在每層的內(nèi)部,可以使用不同的方式來實現(xiàn)接口,因而內(nèi)部的改變不會影響其它層。
在TCP/IP混合參考模型中,數(shù)據(jù)鏈路層又被分為LLC層(邏輯鏈路層)和MAC層(媒體介質(zhì)訪問層)。目前,對于普通的接入網(wǎng)絡(luò)終端的設(shè)備, LLC層和MAC層是軟、硬件的分界線。如PC的網(wǎng)卡主要負(fù)責(zé)實現(xiàn)參考模型中的MAC子層和物理層,在PC的軟件系統(tǒng)中則有一套龐大程序?qū)崿F(xiàn)了LLC層及以上的所有網(wǎng)絡(luò)層次的協(xié)議。
由硬件實現(xiàn)的物理層和MAC子層在不同的網(wǎng)絡(luò)形式有很大的區(qū)別,如以太網(wǎng)和Wi-Fi,這是由物理傳輸方式?jīng)Q定的。但由軟件實現(xiàn)的其它網(wǎng)絡(luò)層次通常不會有太大區(qū)別,在PC上也許能實現(xiàn)完整的功能,一般支持所有協(xié)議,而在嵌入式領(lǐng)域則按需要進行裁剪。
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是個人域網(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)有的計算機網(wǎng)絡(luò)中。
39.2.1 PHY層
在物理層,由IEEE 802.3標(biāo)準(zhǔn)規(guī)定了以太網(wǎng)使用的傳輸介質(zhì)、傳輸速度、數(shù)據(jù)編碼方式和沖突檢測機制,物理層一般是通過一個PHY芯片實現(xiàn)其功能的。
1. 傳輸介質(zhì)
傳輸介質(zhì)包括同軸電纜、雙絞線(水晶頭網(wǎng)線是一種雙絞線)、光纖。根據(jù)不同的傳輸速度和距離要求,基于這三類介質(zhì)的信號線又衍生出很多不同的種類。最常用的是"五類線"適用于100BASE-T和10BASE-T的網(wǎng)絡(luò),它們的網(wǎng)絡(luò)速率分別為100Mbps和10Mbps。
2. 編碼
為了讓接收方在沒有外部時鐘參考的情況也能確定每一位的起始、結(jié)束和中間位置,在傳輸信號時不直接采用二進制編碼。在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沖突檢測
早期的以太網(wǎng)大多是多個節(jié)點連接到同一條網(wǎng)絡(luò)總線上(總線型網(wǎng)絡(luò)),存在信道競爭問題,因而每個連接到以太網(wǎng)上的節(jié)點都必須具備沖突檢測功能。以太網(wǎng)具備CSMA/CD沖突檢測機制,如果多個節(jié)點同時利用同一條總線發(fā)送數(shù)據(jù),則會產(chǎn)生沖突,總線上的節(jié)點可通過接收到的信號與原始發(fā)送的信號的比較檢測是否存在沖突,若存在沖突則停止發(fā)送數(shù)據(jù),隨機等待一段時間再重傳。
現(xiàn)在大多數(shù)局域網(wǎng)組建的時候很少采用總線型網(wǎng)絡(luò),大多是一個設(shè)備接入到一個獨立的路由或交換機接口,組成星型網(wǎng)絡(luò),不會產(chǎn)生沖突。但為了兼容,新出的產(chǎn)品還是帶有沖突檢測機制。
39.2.2 MAC子層
1. MAC的功能
MAC子層是屬于數(shù)據(jù)鏈路層的下半部分,它主要負(fù)責(zé)與物理層進行數(shù)據(jù)交接,如是否可以發(fā)送數(shù)據(jù),發(fā)送的數(shù)據(jù)是否正確,對數(shù)據(jù)流進行控制等。它自動對來自上層的數(shù)據(jù)包加上一些控制信號,交給物理層。接收方得到正常數(shù)據(jù)時,自動去除MAC控制信號,把該數(shù)據(jù)包交給上層。
2. MAC數(shù)據(jù)包
IEEE對以太網(wǎng)上傳輸?shù)臄?shù)據(jù)包格式也進行了統(tǒng)一規(guī)定,見圖 393。該數(shù)據(jù)包被稱為MAC數(shù)據(jù)包。
圖 393 MAC數(shù)據(jù)包格式
MAC數(shù)據(jù)包由前導(dǎo)字段、幀起始定界符、目標(biāo)地址、源地址、數(shù)據(jù)包類型、數(shù)據(jù)域、填充域、校驗和域組成。
? 前導(dǎo)字段,也稱報頭,這是一段方波,用于使收發(fā)節(jié)點的時鐘同步。內(nèi)容為連續(xù)7個字節(jié)的0x55。字段和幀起始定界符在MAC收到數(shù)據(jù)包后會自動過濾掉。
? 幀起始定界符(SFD):用于區(qū)分前導(dǎo)段與數(shù)據(jù)段的,內(nèi)容為0xD5。
? MAC地址: MAC地址由48位數(shù)字組成,它是網(wǎng)卡的物理地址,在以太網(wǎng)傳輸?shù)淖畹讓?,就是根?jù)MAC地址來收發(fā)數(shù)據(jù)的。部分MAC地址用于廣播和多播,在同一個網(wǎng)絡(luò)里不能有兩個相同的MAC地址。PC的網(wǎng)卡在出廠時已經(jīng)設(shè)置好了MAC地址,但也可以通過一些軟件來進行修改,在嵌入式的以太網(wǎng)控制器中可由程序進行配置。數(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é)議要求整個MAC數(shù)據(jù)包的長度至少為64字節(jié)(接收到的數(shù)據(jù)包如果少于64字節(jié)會被認(rèn)為發(fā)生沖突,數(shù)據(jù)包被自動丟棄),當(dāng)數(shù)據(jù)段的字節(jié)少于46字節(jié)時,在填充域會自動填上無效數(shù)據(jù),以使數(shù)據(jù)包符合長度要求。
? 校驗和域:MAC數(shù)據(jù)包的尾部是校驗和域,它保存了CRC校驗序列,用于檢錯。
以上是標(biāo)準(zhǔn)的MAC數(shù)據(jù)包,IEEE 802.3同時還規(guī)定了擴展的MAC數(shù)據(jù)包,它是在標(biāo)準(zhǔn)的MAC數(shù)據(jù)包的SA和數(shù)據(jù)包類型之間添加4個字節(jié)的QTag前綴字段,用于獲取標(biāo)志的MAC幀。前2個字節(jié)固定為0x8100,用于識別QTag前綴的存在;后兩個字節(jié)內(nèi)容分別為3個位的用戶優(yōu)先級、1個位的標(biāo)準(zhǔn)格式指示符(CFI)和一個12位的VLAN標(biāo)識符。
39.3 TCP/IP協(xié)議棧
標(biāo)準(zhǔn)TCP/IP協(xié)議是用于計算機通信的一組協(xié)議,通常稱為TCP/IP協(xié)議棧,通俗講就是符合以太網(wǎng)通信要求的代碼集合,一般要求它可以實現(xiàn)圖 391中每個層對應(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進行網(wǎng)際互連》理解。
Windows操作系統(tǒng)、UNIX類操作系統(tǒng)都有自己的一套方法來實現(xiàn)TCP/IP通信協(xié)議,它們都提供非常完整的TCP/IP協(xié)議。對于一般的嵌入式設(shè)備,受制于硬件條件沒辦法支持使用在Window或UNIX類操作系統(tǒng)的運行的TCP/IP協(xié)議棧,一般只能使用簡化版本的TCP/IP協(xié)議棧,目前開源的適合嵌入式的有uIP、TinyTCP、uC/TCP-IP、LwIP等等。其中LwIP是目前在嵌入式網(wǎng)絡(luò)領(lǐng)域被討論和使用廣泛的協(xié)議棧。本章內(nèi)容其中一個目的就是移植LwIP到開發(fā)板上運行。
39.3.1 為什么需要協(xié)議棧
物理層主要定義物理介質(zhì)性質(zhì),MAC子層負(fù)責(zé)與物理層進行數(shù)據(jù)交接,這兩部分是與硬件緊密聯(lián)系的,就嵌入式控制芯片來說,很多都內(nèi)部集成了MAC控制器,完成MAC子層功能,所以依靠這部分功能是可以實現(xiàn)兩個設(shè)備數(shù)據(jù)交換,而時間傳輸?shù)臄?shù)據(jù)就是MAC數(shù)據(jù)包,發(fā)送端封裝好數(shù)據(jù)包,接收端則解封數(shù)據(jù)包得到可用數(shù)據(jù),這樣的一個模型與使用USART控制器實現(xiàn)數(shù)據(jù)傳輸是非常類似的。但如果將以太網(wǎng)運用在如此基礎(chǔ)的功能上,完全是大材小用,因為以太網(wǎng)具有傳輸速度快、可傳輸距離遠(yuǎn)、支持星型拓?fù)湓O(shè)備連接等等強大功能。功能強大的東西一般都會用高級的應(yīng)用,這也是設(shè)計者的初衷。
使用以太網(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é)議由軟件實現(xiàn),并對各層進行封裝。根據(jù)TCP/IP協(xié)議,各層的要實現(xiàn)的功能如下:
LLC層:處理傳輸錯誤;調(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è)備位于不同的網(wǎng)絡(luò)中(并不是簡單的網(wǎng)線的兩頭)。此時就需要網(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é)議。
實際上,在發(fā)送數(shù)據(jù)時,經(jīng)過網(wǎng)絡(luò)協(xié)議棧的每一層,都會給來自上層的數(shù)據(jù)添加上一個數(shù)據(jù)包的頭,再傳遞給下一層。在接收方收到數(shù)據(jù)時,一層層地把所在層的數(shù)據(jù)包的頭去掉,向上層遞交數(shù)據(jù),參考圖 394。
圖 394 數(shù)據(jù)經(jīng)過每一層的封裝和還原
39.4 以太網(wǎng)外設(shè)(ETH)
STM32F42x系列控制器內(nèi)部集成了一個以太網(wǎng)外設(shè),它實際是一個通過DMA控制器進行介質(zhì)訪問控制(MAC),它的功能就是實現(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支持兩個工業(yè)標(biāo)準(zhǔn)接口介質(zhì)獨立接口(MII)和簡化介質(zhì)獨立接口(RMII)用于與外部PHY芯片連接。MII和RMII接口用于MAC數(shù)據(jù)包傳輸,ETH還集成了站管理接口(SMI)接口專門用于與外部PHY通信,用于訪問PHY芯片寄存器。
物理層定義了以太網(wǎng)使用的傳輸介質(zhì)、傳輸速度、數(shù)據(jù)編碼方式和沖突檢測機制,PHY芯片是物理層功能實現(xiàn)的實體,生活中常用水晶頭網(wǎng)線+水晶頭插座+PHY組合構(gòu)成了物理層。
ETH有專用的DMA控制器,它通過AHB主從接口與內(nèi)核和存儲器相連,AHB主接口用于控制數(shù)據(jù)傳輸,而AHB從接口用于訪問"控制與狀態(tài)寄存器"(CSR)空間。在進行數(shù)據(jù)發(fā)送是,先將數(shù)據(jù)有存儲器以DMA傳輸?shù)桨l(fā)送TX FIFO進行緩沖,然后由MAC內(nèi)核發(fā)送;接收數(shù)據(jù)時,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和時鐘線MDC。SMI支持訪問32個PHY,這在設(shè)備需要多個網(wǎng)口時非常有用,不過一般設(shè)備都只使用一個PHY。PHY芯片內(nèi)部一般都有32個16位的寄存器,用于配置PHY芯片屬性、工作環(huán)境、狀態(tài)指示等等,當(dāng)然很多PHY芯片并沒有使用到所有寄存器位。MAC內(nèi)核就是通過SMI向PHY的寄存器寫入數(shù)據(jù)或從PHY寄存器讀取PHY狀態(tài),一次只能對一個PHY的其中一個寄存器進行訪問。SMI最大通信頻率為2.5MHz,通過控制以太網(wǎng)MAC MII地址寄存器 (ETH_MACMIIAR)的CR位可選擇時鐘頻率。
1. SMI幀格式
SMI是通過數(shù)據(jù)幀方式與PHY通信的,幀格式如表 391,數(shù)據(jù)位傳輸順序從左到右。
表 391 SMI幀格式
PADDR用于指定PHY地址,每個PHY都有一個地址,一般由PHY硬件設(shè)計決定,所以是固定不變的。RADDR用于指定PHY寄存器地址。TA為狀態(tài)轉(zhuǎn)換域,若為讀操作,MAC輸出兩個位高阻態(tài),而PHY芯片則在第一位時輸出高阻態(tài),第二位時輸出"0"。若為寫操作,MAC輸出"10",PHY芯片則輸出高阻態(tài)。數(shù)據(jù)段有16位,對應(yīng)PHY寄存器每個位,先發(fā)送或接收到的位對應(yīng)以太網(wǎng) MAC MII 數(shù)據(jù)寄存器(ETH_MACMIIDR)寄存器的位15。
2. SMI讀寫操作
當(dāng)以太網(wǎng)MAC MII地址寄存器 (ETH_MACMIIAR)的寫入位和繁忙位被置1時,SMI將向指定的PHY芯片指定寄存器寫入ETH_MACMIIDR中的數(shù)據(jù)。寫操作時序見圖 396。
圖 396 SMI寫操作
當(dāng)以太網(wǎng)MAC MII地址寄存器 (ETH_MACMIIAR)的寫入位為0并且繁忙位被置1時,SMI將從向指定的PHY芯片指定寄存器讀取數(shù)據(jù)到ETH_MACMIIDR內(nèi)。讀操作時序見圖 397。
圖 397 SMI讀操作
39.4.2 MII和RMII接口
介質(zhì)獨立接口(MII)用于理解MAC控制器和PHY芯片,提供數(shù)據(jù)傳輸路徑。RMII接口是MII接口的簡化版本,MII需要16根通信線,RMII只需7根通信,在功能上是相同的。圖 398為MII接口連接示意圖,圖 399為RMII接口連接示意圖。
圖 398 MII接口連接
圖 399 RMII接口連接
? TX_CLK:數(shù)據(jù)發(fā)送時鐘線。標(biāo)稱速率為10Mbit/s時為2.5MHz;速率為100Mbit/s時為25MHz。RMII接口沒有該線。
? RX_CLK:數(shù)據(jù)接收時鐘線。標(biāo)稱速率為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ù)責(zé)驅(qū)動,當(dāng)發(fā)送或接收介質(zhì)處于非空閑狀態(tài)時使能該信號。在全雙工模式該信號線無效。
? COL:沖突檢測信號,由PHY芯片負(fù)責(zé)驅(qū)動,檢測到介質(zhì)上存在沖突后該線被使能,并且保持至沖突解除。在全雙工模式該信號線無效。
? RXD[3:0]或RXD[1:0]:數(shù)據(jù)接收數(shù)據(jù)線,由PHY芯片負(fù)責(zé)驅(qū)動。對于MII有4位,RMII只有2位。在MII模式,當(dāng)RX_DV禁止、RX_ER使能時,特定的RXD[3:0]值用于傳輸來自PHY的特定信息。
? RX_DV:接收數(shù)據(jù)有效信號,功能類似TX_EN,只不過用于數(shù)據(jù)接收,由PHY芯片負(fù)責(zé)驅(qū)動。對于RMII接口,是把CRS和RX_DV整合成CRS_DV信號線,當(dāng)介質(zhì)處于不同狀態(tài)時會自切換該信號狀態(tài)。
? RX_ER:接收錯誤信號線,由PHY驅(qū)動,向MAC控制器報告在幀某處檢測到錯誤。
? REF_CLK:僅用于RMII接口,由外部時鐘源提供50MHz參考時鐘。
因為要達到100Mbit/s傳輸速度,MII和RMII數(shù)據(jù)線數(shù)量不同,使用MII和RMII在時鐘線的設(shè)計是完全不同的。對于MII接口,一般是外部為PHY提供25MHz時鐘源,再由PHY提供TX_CLK和RX_CLK時鐘。對于RMII接口,一般需要外部直接提供50MHz時鐘源,同時接入MAC和PHY。
開發(fā)板板載的PHY芯片型號為LAN8720A,該芯片只支持RMII接口,電路設(shè)計時參考圖 399。
ETH相關(guān)硬件在STM32F42x控制器分布參考表 392。
表 392 ETH復(fù)用引腳
其中,PPS_OUT是IEEE 1588定義的一個時鐘同步機制。
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è)自動填充完成MAC數(shù)據(jù)包封裝,然后通過PHY發(fā)送出去。在檢測到有MAC數(shù)據(jù)包需要接收時,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)時,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的重試請求時,應(yīng)從SOF重新發(fā)送同一幀。如果發(fā)送期間未連續(xù)提供數(shù)據(jù),MAC將發(fā)出下溢狀態(tài)。在幀的正常傳輸期間,如果MAC在未獲得前一幀的EOF的情況下接收到SOF,則將忽略該SOF并將新的幀視為前一幀的延續(xù)。
MAC控制MAC數(shù)據(jù)包的發(fā)送操作,它會自動生成前導(dǎo)字段和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設(shè)定閾值后請求DMA傳輸。在默認(rèn)直通模式下,當(dāng)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存儲轉(zhuǎn)發(fā)模式(通過ETH_DMAOMR寄存器中的RSF位配置)下,僅在幀完全寫入Rx FIFO后才可讀出幀。
當(dāng)MAC在MII上檢測到SFD時,將啟動接收操作。MAC內(nèi)核將去除報頭和SFD,然后再繼續(xù)處理幀。檢查報頭字段以進行過濾,F(xiàn)CS字段用于驗證幀的CRC如果幀未通過地址濾波器,則在內(nèi)核中丟棄該幀。MAC數(shù)據(jù)包接收時序參考圖 3911。
圖 3911 MAC數(shù)據(jù)包接收時序(無錯誤)
39.4.4 MAC過濾
MAC過濾功能可以選擇性的過濾設(shè)定目標(biāo)地址或源地址的MAC幀。它將檢查所有接收到的數(shù)據(jù)幀的目標(biāo)地址和源地址,根據(jù)過濾選擇設(shè)定情況,檢測后報告過濾狀態(tài)。針對目標(biāo)地址過濾可以有三種,分別是單播、多播和廣播目標(biāo)地址過濾;針對源地址過濾就只有單播源地址過濾。
單播目標(biāo)地址過濾是將接收的相應(yīng)DA字段與預(yù)設(shè)的以太網(wǎng)MAC地址寄存器內(nèi)容比較,最高可預(yù)設(shè)4個過濾MAC地址。多播目標(biāo)地址過濾是根據(jù)幀過濾寄存器中的HM位執(zhí)行對多播地址的過濾,是對MAC地址寄存器進行比較來實現(xiàn)的。單播和多播目標(biāo)地址過濾都還支持Hash過濾模式。廣播目標(biāo)地址過濾通過將幀過濾寄存器的BFD位置1使能,這使得MAC丟棄所有廣播幀。
單播源地址過濾是將接收的SA字段與SA寄存器內(nèi)容進行比較過濾。
MAC過濾還具備反向過濾操作功能,即讓過濾結(jié)構(gòu)求補集。
39.5 PHY:LAN8720A
LAN8720A是SMSC公司(已被Microchip公司收購)設(shè)計的一個體積小、功耗低、全能型10/100Mbps的以太網(wǎng)物理層收發(fā)器。它是針對消費類電子和企業(yè)應(yīng)用而設(shè)計的。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連接之間還需要一個變壓器,所以一般使用帶電壓轉(zhuǎn)換和LED指示燈的HY911105A型號的插座。一般來說,必須為使用RMII接口的PHY提供50MHz的時鐘源輸入到REF_CLK引腳,不過LAN8720A內(nèi)部集成PLL,可以將25MHz的時鐘源陪頻到50MHz并在指定引腳輸出該時鐘,所以我們可以直接使其與REF_CLK連接達到提供50MHz時鐘效果。
LAN8720A內(nèi)部系統(tǒng)結(jié)構(gòu)見圖 3913。
圖 3913 LAN8720A內(nèi)部系統(tǒng)結(jié)構(gòu)
LAN8720A有各個不同功能模塊組成,最重要的要數(shù)接收控制器和發(fā)送控制器,其它的基本上都是與外部引腳掛鉤,實現(xiàn)信號傳輸。部分引腳是具有雙重功能的,比如PHYAD0與RXER引腳是共用的,在系統(tǒng)上電后LAN8720A會馬上讀取這部分共用引腳的電平,以確定系統(tǒng)的狀態(tài)并保存在相關(guān)寄存器內(nèi),之后則自動轉(zhuǎn)入作為另一功能引腳。
PHYAD[0]引腳用于配置SMI通信的LAN8720A地址,在芯片內(nèi)部該引腳已經(jīng)自帶下拉電阻,默認(rèn)認(rèn)為0(即使外部懸空不接),在系統(tǒng)上電時會檢測該引腳獲取得到LAN8720A的地址為0或者1,并保存在特殊模式寄存器(R18)的PHYAD位中,該寄存器的PHYAD有5個位,在需要超過2個LAN8720A時可以通過軟件設(shè)置不同SMI通信地址。PHYAD[0]是與RXER引腳共用。
MODE[2:0]引腳用于選擇LAN8720A網(wǎng)絡(luò)通信速率和工作模式,可選10Mbps或100Mbps通信速度,半雙工或全雙工工作模式,另外LAN8720A支持HP Auto-MDIX自動翻轉(zhuǎn)功能,即可自動識別直連或交叉網(wǎng)線并自適應(yīng)。一般將MODE引腳都設(shè)置為1,可以讓LAN8720A啟動自適應(yī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系列
推薦閱讀
史海拾趣
近年來,隨著環(huán)保意識的提高,ALCOA積極推動可持續(xù)發(fā)展和環(huán)保倡議。公司致力于減少生產(chǎn)過程中的能源消耗和廢棄物排放,同時也在研發(fā)更環(huán)保的鋁材和生產(chǎn)工藝。這些努力不僅提升了公司的社會形象,也為其在電子行業(yè)中的長期發(fā)展奠定了堅實的基礎(chǔ)。
以上五個故事,只是ALCOA公司發(fā)展歷程中的一部分。然而,這些故事足以展現(xiàn)出這家公司在電子行業(yè)中的卓越成就和持續(xù)創(chuàng)新的精神。
在COVID-19全球大流行期間,CUI Devices展現(xiàn)出了高度的社會責(zé)任感。公司決定向那些致力于設(shè)計和制造抗擊疫情關(guān)鍵醫(yī)療設(shè)備的OEM、制造商、志愿者和組織提供免費的產(chǎn)品樣本。這些樣本涵蓋了呼吸器、呼吸機、血液分析儀、測試設(shè)備、患者監(jiān)護儀、成像系統(tǒng)和家庭醫(yī)用器材等多個領(lǐng)域。此外,公司還與全球的制造設(shè)施和分銷合作伙伴緊密合作,以確保其多樣化的產(chǎn)品組合能夠隨時滿足市場需求。
Cypress在半導(dǎo)體制造領(lǐng)域一直處于技術(shù)革新的前沿。公司不斷引入新的工藝技術(shù),從早期的0.8微米CMOS技術(shù)到后來的0.21微米工藝,不斷推動產(chǎn)品性能的提升。這種對技術(shù)的持續(xù)投入和追求,使Cypress在行業(yè)內(nèi)樹立了良好的技術(shù)形象,并贏得了客戶的廣泛認(rèn)可。
隨著公司業(yè)務(wù)的不斷拓展,EPIGAP公司意識到單靠自身力量難以應(yīng)對日益復(fù)雜的市場環(huán)境。于是,公司開始積極尋求與產(chǎn)業(yè)鏈上下游企業(yè)的戰(zhàn)略合作。通過與原材料供應(yīng)商、代工廠商以及終端客戶的緊密合作,EPIGAP公司實現(xiàn)了產(chǎn)業(yè)鏈的整合優(yōu)化,提高了整體運營效率。這一戰(zhàn)略不僅降低了公司的運營成本,還增強了公司的市場競爭力。
APM深知在電子行業(yè)中,單打獨斗很難取得長遠(yuǎn)的發(fā)展。因此,公司開始積極尋求與上下游企業(yè)的合作,共同構(gòu)建完整的產(chǎn)業(yè)鏈。通過與原材料供應(yīng)商、代工廠商以及終端客戶的緊密合作,APM實現(xiàn)了產(chǎn)業(yè)鏈的整合與協(xié)同發(fā)展。這不僅降低了公司的運營成本,還提高了產(chǎn)品的質(zhì)量和生產(chǎn)效率,為公司的持續(xù)發(fā)展奠定了堅實基礎(chǔ)。
隨著產(chǎn)品線的不斷豐富和技術(shù)實力的不斷提升,AMICC開始積極拓展國內(nèi)外市場。公司通過與大型電子企業(yè)建立戰(zhàn)略合作關(guān)系,成功打入國際市場。同時,AMICC還積極參加各類行業(yè)展會和交流活動,提升品牌知名度和影響力。在市場拓展的過程中,AMICC始終堅持客戶至上的原則,為客戶提供優(yōu)質(zhì)的產(chǎn)品和服務(wù),贏得了客戶的信任和好評。
求助pxa270+SST39WF800的bootloader燒錄程序及方法 我的平臺是PXA270+wince5.0,flash用的是SST39WF800A+iNand。 我原來使用的是INtel的norflash,jtag程序是jflashmm,由于這個jflashmm只能燒錄intel的flash,所以我現(xiàn)在沒有辦法燒錄現(xiàn)在使用的SST39WF800A。 在網(wǎng)上找了一下,發(fā)現(xiàn)了H-jtag軟件,支 ...… 查看全部問答∨ |
|
求助:關(guān)于stm32f103zet6的ADC時鐘問題 stm32fzet6的最高頻率是72M 那ADC的時鐘不是可以是可以除以2,4,6,8中的一個 那為什么好多資料上說增強型的芯片的ADC最大頻率是14M 請大俠說說… 查看全部問答∨ |
有個小項目,希望用STM8L151做,看中的是低功耗,AD,DA,EEPROM,VER,TEMPSENSOR 原來考慮用MPS430的,但是DA不好處理 但是我又擔(dān)心其他的問題:抗擾性能,供貨周期,開發(fā)環(huán)境等等的問題,到底比430好在哪里?還有沒有其他選擇? &nb ...… 查看全部問答∨ |
DXP菜鳥求教 CD4052BCN的封裝N16E沒有 怎么辦 這個N16E和DIP16有啥區(qū)別啊?baidu疑似都不知道.如果通用.請問怎么能一次把所有的4052封裝全改了? 另外就是布線有什么快速入門的方法么?謝謝大家啦… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 04:22 編輯 MSP430,寫了一個EEPROM的程序,IIC 通過.~在用同樣的IIC,做 MMA7455,為什么 ACK或者CHECK,或者叫respons怎么沒應(yīng)答(用一個IF()就可以知道有沒有應(yīng)答了)......今天搞了半天.... 就是不行...求指教啊.. ...… 查看全部問答∨ |
設(shè)計資源 培訓(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篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- 上汽大眾:汽車網(wǎng)絡(luò)安全漏洞防護
- 恩智浦推出全新電池控制IC系列 助力新能源解決方案發(fā)展
- 全球首條GWh級新型固態(tài)電池生產(chǎn)線樣件下線
- 總投資455億元!三大動力電池項目齊刷進度條
- 現(xiàn)代汽車韓國建氫燃料電池廠,2028年投產(chǎn)
- 6月融資一覽:智能汽車芯片、第三代半導(dǎo)體、機器人成資本焦點
- 艙駕一體“點燃”新戰(zhàn)事
- 汽車智能化2.0引爆「萬億蛋糕」,誰在改寫游戲規(guī)則?
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財報和電話會議時間安排
- 將低功耗設(shè)計進行到底——評論、轉(zhuǎn)發(fā)贏大禮!
- 芯幣競拍:感恩教師節(jié)專場
- Keysight示波器主題月有獎系列活動之 注冊大獎天天抽 搶樓踩中亦有獎
- Microchip有獎直播:VectorBlox™ SDK 報名中
- 有獎直播|ADI 慣性MEMS應(yīng)用那些事
- 借助 Microchip 生態(tài)系統(tǒng)中的 PIC® 和 AVR® 單片機開啟嵌入式到云端之旅 系列在線研討會
- 帶你零起點入門STM32(專為嵌入式應(yīng)用而開發(fā)的內(nèi)核)
- 福祿克首款熱成像萬用表Fluke-279FC 即將上市!填寫問卷贏好禮嘍!
- EEWorld Datasheet 伴你同行!快來領(lǐng)取200芯積分福利啦~
- 泰克福袋:示伴功倍,萬能福袋派送中
- 盧偉冰曬Redmi Note 8和iPhone 4:當(dāng)年的手機這么???
- 中國電信:打造 100 元純 VoLTE的 功能手機
- iOS 14 iCloud鑰匙串可提醒/幫助用戶創(chuàng)建了強密碼
- 趙明:榮耀游戲本要來了
- 工信部嚴(yán)厲通報16款違規(guī)App:侵害用戶權(quán)益還未整改
- 存儲器價格落底買氣回升,威剛3季營收恢復(fù)增長動力
- 蘋果供應(yīng)商日本顯示器:月底前將會獲500億日元金援
- 業(yè)界首款:奇景推超低功耗AI功能的WiseEye WE-I Plus芯片
- 旺季加轉(zhuǎn)單效應(yīng),4家IC設(shè)計廠第3季業(yè)績又創(chuàng)新猷
- 評芯而論:蘋果iPhone大熱銷,鴻海隱憂反而與日俱增
- 【轉(zhuǎn)】Windows XP退休之后:安全廠商將為7成用戶繼續(xù)“留守”
- ST MEMS 器件資源分庫-器件應(yīng)用指南
- CC2541 無法驅(qū)動 SHT20 溫濕度傳感器的原因
- 01如何使用STM32CUBE建立IAR_MDK工程+基于視覺跟蹤及遠(yuǎn)程監(jiān)控的智能攝像頭+入侵者
- 沁恒CH4XX系列的技術(shù)手冊和例子程序下載
- 關(guān)于電路中反饋及運放的理解
- 頻譜分析儀的正確使用
- 請教關(guān)于Cosmic編譯問題
- 曬WEBENCH設(shè)計的過程+FPGA設(shè)計試想
- 電磁兼容設(shè)計在多層PCB板設(shè)計的重要性!