介紹
LWIP(Lightweight IP)是一個輕量級的開源TCP/IP協議棧,它專為嵌入式系統和小型設備而設計。LWIP旨在提供TCP/IP網絡協議支持,使嵌入式系統能夠與其他設備通過網絡進行通信
LWIP特點:
- 輕量級:LWIP被設計為占用較少的內存和處理器資源,使其能夠在嵌入式系統中高效運行。
- 可裁剪性:LWIP允許根據具體需求進行裁剪,只包含必要的協議和功能,以減小存儲空間和處理器開銷。
- 高性能:LWIP使用了一些性能優化技術,如零拷貝和事件驅動機制,以提高網絡通信的效率和吞吐量。
- 可移植性:LWIP具有良好的可移植性,可以在多種操作系統和硬件平臺上運行。 支持多種應用層協議:除了TCP/IP協議棧,LWIP還提供了一些常用的應用層協議實現,如HTTP、SNMP和MQTT。
以太網簡介
STM32中可以通過以太網按照 IEEE 802.3-2002 標準發送和接收數據。以太網提供了可配置、靈活的外設,用以滿足客戶的各種應用需求。它支持與外部物理層(PHY) 相連的兩個工業標準接口:默認情況下使用的介質獨立接口 (MII)(在 IEEE 802.3 規范中定義)和簡化介質獨立接口 (RMII)。
stm32 以太網框圖
當進行發送數據的時候,首先系統存儲器以DMA的方式發送至發送FIFO(Tx FIFO)進行緩沖,再通過MAC內核進行發送。同樣,接收 FIFO (Rx FIFO) 則存儲通過線路接收的以太網幀,直到這些幀通過 DMA 傳送到系統存儲器。
以太網外設還包括用于與外部 PHY 通信的 SMI。通過一組配置寄存器,用戶可以為 MAC 控 制器和 DMA 控制器選擇所需模式和功能。
上面的主要需要分析的模式是:MAC內核、RMII/MII介質接口、外部的PHY.
MAC內核
MAC內核是以太網控制器的關鍵組件,負責處理以太網幀的發送、接收、解析、封裝、錯誤檢測和流控制等功能。它與PHY層緊密協作,實現了STM32F4微控制器與以太網之間的可靠數據通信。
- 幀處理:MAC內核負責處理以太網數據幀的發送和接收。它與PHY層進行接口連接,將主機發送的數據封裝為以太網幀并發送到網絡上,同時從網絡接收數據幀并傳遞給主機進行處理。
- 幀解析和封裝:MAC內核負責解析接收到的以太網幀,提取其中的目標MAC地址、源MAC地址、幀類型和數據等信息。同時,它也負責封裝主機發送的數據為以太網幀,添加必要的控制信息。
- 錯誤檢測和處理:MAC內核執行幀的校驗和錯誤檢測。它會驗證接收到的幀的完整性和正確性,通過校驗和字段檢查是否存在錯誤。如果幀出現錯誤或校驗失敗,MAC內核會丟棄或丟棄該幀,并通知主機。
- 幀的重傳和丟棄:MAC內核負責處理發送失敗或接收錯誤的情況。在發送時,如果未收到幀的確認響應或檢測到沖突,MAC內核會觸發重傳機制。在接收時,如果幀出現錯誤或無效,MAC內核會丟棄該幀并通知主機。
- 幀流控制:MAC內核支持流控制機制,用于控制數據幀的發送速率。它可以根據接收端的緩沖區狀態和網絡流量情況,自動調整發送速率,以避免數據丟失或網絡擁塞。
上面是MAC內核功能的描述,了解一下即可。我們主要是要關注Mac內核與PHY的物理接口看MAC是如何管理PHY.
站管理接口:SMI
描述
站管理接口(Station Management Interface,SMI)是用于與物理層(PHY)設備進行通信和配置的接口。SMI接口提供了主機(STM32)與PHY設備之間的通信通道,使得主機能夠控制和監控PHY設備的操作。主要功能如下:
- 寄存器訪問:通過SMI接口,主機可以讀取和寫入PHY設備的寄存器。這些寄存器包含了控制PHY設備功能和配置參數的信息。主機可以通過讀取和寫入寄存器的值來配置PHY設備的工作模式、速度、雙工模式等。
- PHY設備配置:主機可以使用SMI接口來配置PHY設備的各種參數。通過讀取和寫入寄存器的值,主機可以設置PHY設備的工作模式、速度、自動協商等。這樣可以適應不同的網絡環境和需求。
- 狀態查詢:通過SMI接口,主機可以查詢PHY設備的狀態信息。主機可以讀取PHY設備的狀態寄存器,以獲取連接狀態、速度狀態、工作模式等信息。這些狀態信息可以幫助主機監測網絡連接和PHY設備的工作狀態。
- 錯誤處理:SMI接口還提供了錯誤處理的能力。主機可以讀取PHY設備的狀態寄存器以檢測錯誤標志,并根據錯誤類型采取適當的措施。例如,重新配置PHY設備、進行錯誤恢復等,以確保網絡通信的可靠性。
主要是關注SMI對PHY設置:如工作模式、速度、雙工模式、自動協商設置。
SMI 站管理接口
如上圖,SMI與PHY硬件接口由兩根組成:MDC[時鐘線]、MDIO[數據線]。通過這兩根線可以訪問多達32個PHY。SMI可以從 32 個 PHY 中選擇一個 PHY 。PHY里面包含了一個 32 個寄存器。這個寄存器中主要是對發送數據進行控制\\接收狀態信息。任意時間只能訪問一個PHY。它的幀結構如下。
幀格式
- 報頭:SMI幀以4個報頭字節(0xFFFFFFFF)開始,在發送\\寫入操作時,用于主機與PHY設備的之間建立同步通信。
- 起始:幀起始由 [01] 模式定義,用于驗證線路從默認邏輯“1”狀態變為邏輯“0”狀 態,然后再從邏輯“0”狀態變為邏輯“1”狀態。
- 操作:定義正在發生的事務(讀取[10]或寫入[01])的類型。
- PHY地址:PHY 地址有 5 位,可構成 32 個唯一 PHY 地址。最先發送和接收地址的 MSB 位。
- 寄存器地址:寄存器地址有 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”狀態。
寫操作
當應用程序將 MII 寫入位和繁忙位置 1 時,SMI 將通過傳輸 PHY 地址、PHY 中的寄存器地址以及寫入數據。來觸發對 PHY 寄存器進行寫操作。事務進行期間, 應用程序不能更改 MII 地址寄存器的內容或 MII 數據寄存器。在此期間對 MII 地址寄存器或 MII 數據寄存器執行的寫操作將會忽略(繁忙位處于高電平狀態),事務將無錯完成。寫操 作完成后,SMI 將通過復位繁忙位進行指示。
寫操作
讀操作
當用戶將以太網 MAC MII 地址寄存器 (ETH_MACMIIAR) 中的 MII 繁忙位置 1、MII 寫入位清 零時,SMI 將通過傳輸 PHY 地址和 PHY 中的寄存器地址在 PHY 寄存器中觸發讀操作。事 務進行期間,應用程序不應更改 MII 地址寄存器的內容或 MII 數據寄存器。在此期間對 MII 地址寄存器或 MII 數據寄存器執行的寫操作將會忽略(繁忙位處于高電平狀態),事務將無 錯完成。讀操作完成后,SMI 將復位繁忙位,然后用從 PHY 中讀取的數據更新 MII 數據寄存器。
讀操作
時鐘選擇
MAC 啟動管理寫/讀操作。SMI 時鐘是一個分頻時鐘,其時鐘源為應用時鐘(AHB 時鐘)。 分頻系數取決于 MII 地址寄存器中設置的時鐘范圍。
時鐘選擇
介質接口
上面我們提到過一個MII的概念。MII其實就是一種介質接口。STM32除了MII介質接口外還有RMII介質接口。介質接口是配合SMI對PHY進行控制的。比如:SMI什么時候發數據、什么時候收數據、發寫操作幀還是發讀操作幀都是需要介質接口上的寄存器的值進行控制的。為此,MAC內核與PHY的物理接口其實就是SMI+RMII/MII 組成,后面分析都是基于這兩者結合體。
介質獨立接口:MII
介質獨立接口 (MII) 定義了 10 Mbit/s 和 100 Mbit/s 的數據傳輸速率下 MAC 子層與 PHY 之間的互連。
介質獨立接口信號
- TX_CLK:連續時鐘信號。該信號提供進行 TX 數據傳輸時的參考時序。標稱頻率為: 速率為 10 Mbit/s 時為 2.5 MHz;速率為 100 Mbit/s 時為 25 MHz。
- TXD(Transmit Data):TXD信號是主機向PHY設備發送數據的并行輸出信號。主機通過TXD線將以太網幀的數據發送給PHY設備。
- TX_EN:發送使能信號。該信號必 須與報頭的前半字節進行同步 (MII_TX_CLK)
- RX_CLK:連續時鐘信號。該信號提供進行 RX 數據傳輸時的參考時序。標稱頻率 為:速率為 10 Mbit/s 時為 2.5 MHz;速率為 100 Mbit/s 時為 25 MHz。
- RXD[3:0]:數據接收信號。該信號是 4 個一組的數據信號。
- RX_ER:接收錯誤信號。該信號必須保持一個或多個周期 (MII_RX_CLK),從而向 MAC 子層指示在幀的某處檢測到錯誤。
- RX_DV:接收數據有效信號。該信號表示 PHY 當前正針對 MII 接收已恢復并解碼的半字節。
- CRS:載波偵聽信號。當發送或接收介質處于非空閑狀態時,由 PHY 使能該信號。
- COL:沖突檢測信號。檢測到介質上存在沖突后,PHY 必須立即使能沖突檢測信號, 并且只要存在沖突條件,沖突檢測信號必須保持有效狀態。該信號無需與 TX 和 RX 時 鐘保持同步。在全雙工模式下,該信號沒意義。
- MDIO(Management Data Input/Output):MDIO信號用于主機與PHY設備之間的管理數據的雙向傳輸。主機通過MDIO信號線向PHY設備發送配置和控制命令,并從PHY設備讀取狀態和配置信息。
- MDC(Management Data Clock):MDC信號是MDIO信號的時鐘信號,用于同步MDIO數據的傳輸。MDC信號的頻率由主機控制,用于提供時序同步。
TX 接口信號編碼
RX 接口信號編碼
MII時鐘源
要生成 TX_CLK 和 RX_CLK 時鐘信號,必須向外部 PHY 提供 25MHz 時鐘,如下圖示。除了使用外部 25 MHz 石英晶體提供該時鐘,還可以通過 STM32F4xx 微控制器的 MCO 引腳輸出該信號。這種情況下,必須對 PLL 倍頻進行配置,以通過 25 MHz 外部石英晶體在 MCO 引腳上獲得所需頻率。
精簡介質獨立接口:RMII
精簡介質獨立接口 (RMII) 規范降低了 10/100 Mbit/s 下微控制器以太網外設與外部 PHY 間的 引腳數。根據 IEEE 802.3u 標準,MII 包括 16 個數據和控制信號的引腳。RMII 規范將引腳 數減少為 7 個(引腳數減少 62.5%)。
RMII 接口是 MAC 和 PHY 之間的實例化對象。這有助于將 MAC 的 MII 轉換為 RMII。RMII 具有以下特性:
- 支持 10-Mbit/s 和 100-Mbit/s 的運行速率
- 參考時鐘必須是 50 MHz
- 相同的參考時鐘必須從外部提供給 MAC 和外部以太網 PHY
- 它提供了獨立的 2 位寬(雙位)的發送和接收數據路徑
RMII時鐘源
時鐘源方案
MII與RMII除了在IO接口不同外,還存在著發送位寬的不同。介質MII接口一個周期發送位寬位4位,RMII的是2位。但是由于他們發送周期不同。如果在相同的時間內,RMII發送了兩次而MII發送了一次。所以最終的速率是一樣的。
PHY
描述
上面分析的過程中,我們知道了。Mac內核的數據最終,是通過PHY發送出去的。那么PHY是什么?這里主要是對LAN8720A這款PHY進行分析。如下圖就是LAN8720A的內部框圖
LAN8720A內部框圖
PHY在計算機網絡中起著關鍵作用,負責將數字數據轉換為物理信號,并在物理介質上進行可靠的傳輸。它處理信號的編碼、調制、傳輸和解調過程,同時支持時鐘同步、錯誤檢測和糾正,以及自動協商功能。PHY的正確操作和配置對于實現高速、可靠的數據通信至關重要。
LAN8720A
PHY內部包含了32個寄存器,都是通過MAC的SMI上的MDC與MDIO這兩根線進行PHY的寄存器的讀寫。上面我們知道我們主要是通過這兩根線實現PHY的速度與雙工模式確定。
LAN8720A的32個內部寄存器如下
LAN8720A內部寄存器
而控制雙工模式以及速度的模式主要存在于第3 1個寄存器也稱為BCR寄存器,其寄存器設置如下。
雙工與模式設置寄存器
如下圖是前面提及的MDIO數據幀格式
對于2:4字段。最高位為1的時候表示是全雙工、0的時候表示半雙工。第二第三位代表的速度。01 表示10Mbit/s、10表示100Mbit/s如果我想把當前的第一個PHY假如為0x00[有多個PHY]設置為100Mbit/s 與全雙工模式。該如何操作?
首先,確定時PHY的地址。那么PHY的地址就是0x00。接下來就是寄存器的地址,這里的寄存器是最后一個寄存器地址:0x1F.最后是數據位:100Mbit/s 全雙工。對應上面表的110,所以數據位為0000000000011000.
MAC 802.3 幀格式
上面的分析其實都是在物理層于數據鏈路層的內容。既然是在物理層那么就應該有物理層的數據幀結構標準。這個幀標準就是MAC 802.3 幀格式。這個幀結構分為:有標記MAC幀格式與無標記MAC幀結構
無標記MAC幀格式
- 報頭:MAC幀以7個字節的報頭(10101010...)開始,用于同步接收方的時鐘。
- 幀起始定界符(Start Frame Delimiter,SFD):緊接著前導碼是一個字節的SFD(10101011),用于標識幀的起始。
- 目標MAC地址(Destination MAC Address):6個字節,指示數據幀的目標設備的MAC地址。該字段唯一標識了數據幀的接收方。
- 源MAC地址(Source MAC Address):6個字節,指示數據幀的發送設備的MAC地址。該字段唯一標識了數據幀的發送方。
- 長度/類型(Length/Type):2個字節,指示數據字段的長度或指示數據字段的類型。當長度小于等于1500時,它指示了上層協議類型。
- 數據字段(Data):46-1500個字節,包含了上層協議(如IP或ARP)傳輸的數據。
- 幀校驗序列(Frame Check Sequence,FCS):4個字節,用于檢測數據幀在傳輸過程中是否發生了錯誤。FCS字段使用循環冗余校驗(CRC)算法計算得出。
帶標記的 MAC 幀格式
帶標記的MAC幀格式和不帶標識符的MAC幀之間的區別在于是否包含了標識符字段。下面是它們的區別:
- 帶標記的MAC幀格式(Tagged MAC Frame):帶標記的MAC幀格式是在不同的網絡技術中使用的一種擴展幀格式。它包含了一個額外的標識符字段,用于標記幀所屬的虛擬局域網(VLAN)。標識符字段是一個特定的VLAN標簽,用于將幀與相應的VLAN關聯起來。帶標記的MAC幀格式通常用于實現虛擬局域網的劃分和管理。
- 不帶標識符的MAC幀格式(Untagged MAC Frame):不帶標識符的MAC幀格式是最常見的以太網幀格式,也被稱為普通以太網幀格式。它不包含額外的標識符字段,只包含了目標MAC地址、源MAC地址、長度/類型、數據字段和幀校驗序列。不帶標識符的MAC幀格式適用于普通的以太網通信,不涉及虛擬局域網的劃分和管理。
以太網DMA描述符
如下框圖,已經分析了MAC內核、PHY。而最后我們需要對以外網DMA與TxFiFo、RxFiFo 這部分進行分析。
stm32 以太網框圖
以太網DMA控制器操作過程:
DMA 具有獨立的發送和接收引擎以及相應的 CSR(控制和狀態寄存器)空間。發送引擎將 數據從系統存儲器傳送到 Tx FIFO,而接收引擎將數據從 Rx FIFO 傳送到系統存儲器。DMA 可以在 CPU 完全不干預的情況下,通過描述符有效地將數據從源傳送到目標。DMA 專為面 向包的數據傳送(如以太網中的幀)而設計。該控制器經過編程后,可在完成幀發送和接收 傳送操作時以及其它正常/錯誤條件下產生 CPU 中斷。DMA 和 STM32通過以下兩種數 據結構進行通信:
- 控制和狀態寄存器 (CSR)
- 描述符列表和數據緩沖區。
什么是以太網DMA描述符
DMA 既可將接收到的數據幀傳送到 STM32F4xx 存儲器中的接收緩沖區,也可以傳送 STM32 存儲器的發送緩沖區中的數據幀。位于 STM32F4xx 存儲器中的描述符用作指向這些緩沖區的指針。共有兩個描述符列表:一個用于接收,一個用于發送。兩個列表的基址分別寫入 DMA 寄存器 3 和寄存器 4。最后一個描述符會指回第一個描述符以構成環形結構。可通過配置接收和發送描述符 (RDES1[14] 和 TDES0[20])中鏈接的第二個地址來完成描述符的顯式鏈接。
簡單來說就是TxFiFo與RxFiFo緩沖區內存的管理是通過鏈表實現。不然怎么叫FIFO先入先出不就是一個隊列數據結構嘛。
DMA 既可將接收到的數據幀傳送到 STM32F4xx 存儲器中的接收緩沖區,也可以傳送 STM32 存儲器的發送緩沖區中的數據幀。位于 STM32F4xx 存儲器中的描述符用作指向這些緩沖區的指針。
描述符
描述符主要分兩種:常規描述符、增強描述符
常規描述符:管理緩沖區常規描述符:在常規描述符基礎上開啟時間戳和 IPv4校驗和減荷這里主要分析常規的描述符,其結構框圖如下
常規 Tx DMA 描述符
其中需要比較注意的位為
- TDES0[31]置0:CPU可將數據拷貝到描述符中,拷貝完成之后把該位置1,告訴DMA可以發送數據
- TDES0[20]置1:描述符中的第二個地址是下一個描述符地址
- TDES1[28:16]:如果TDES0[20] 位置1,則該字段無效
- TDES3[31:0]:取決于TDES0[20]的值,為1,則指向下一個描述符地址
常規 Rx DMA 描述符結構
- RDES0[31]置1:MAC將數據從RX FIFO傳輸到RX描述符中,拷貝完成之后該位置0,告訴CPU可以接收數據
- RDES0[14]置1:描述符中的第二個地址是下一個描述符地址
- RDES1[28:16]:如果RDES0[14]位置1,則該字段無效
- RDES3[31:0]:取決于RDES0[14]的值,為1,則指向下一個描述符地址
描述符結構
其中根據RES3/TDES3字段來判斷是什么結構,如果是指向下一個緩沖區地址那么就是鏈接結構,如果是第二個緩沖區就是1環形結構。
評論
查看更多