STM32網絡ETH

芯片是:STM32F207VCT6

本人主要介紹STM32F207VCT6的ETH部分,基本是把ETH部分英文翻譯一下,加上自己的理解。

歡迎查看本文所在的系列,STM32的LWIP應用,點擊跳轉

1、基礎介紹


通過DMA控制器進行介質訪問控制

這部分內容應用於STM32F20X和STM32F21系列,其他的 不適用

28.1 以太網簡介

部分版權 2004 2005 新思科技(美國公司)。所有權利保留,使用需要認可。

藉助STM32F20X和STM32F21的以太網外設可接受和發送數據按照IEE 802.3-2002標準

以太網提供一個完整的、靈活的外設去滿足不同應用和要求。它支持與外部相連(PHY)的兩個標準的工業接口:默認情況使用在IEEE802.3規範找中定義的獨立介質接口(MII)和精簡介質獨立接口(RMII)。它可以被用於大量的需求,例如開關(交換機)、網絡接口卡等等


以太網滿足下列標準

  • IEEE802.3-2002,用於以太網 MAC
  • IEEE1588-2008 標準,用於規定聯網時鐘同步的精度
  • AMBA2.0,用於AHB 主/從端口
  • RMII聯盟的RMII 規範


28.2  以太網的主要特性

以太網外設包括以下特性,通過類型列舉


28.2.1  MAC內核特性

  • 支持外部 PHY 接口實現 10/100 Mbit/s 數據傳輸速率
  • 通過符合 IEEE 802.3 的 MII 接口與外部快速以太網 PHY 進行通信
  • 支持全雙工和半雙工操作
  1. 支持適用於半雙工操作的 CSMA/CD 協議
  2. 支持適用於全雙工操作的 IEEE 802.3x 流量控制
  3. 全雙工操作時可以將接收的暫停控制幀轉發到用戶應用程序
  4. 半雙工操作時提供背壓流量控制
  5. 全雙工操作中如果流量控制輸入信號消失,將自動發送零時間片暫停幀


兩組 FIFO:一個具有可編程閾值功能的 2 KB 發送 FIFO 和一個具有可配置閾值(默認爲 64 個字節)功能的 2 KB 接收FIFO


從這裏我們可以看出207支持MII接口和RMII接口


28.4  網絡功能描述

以太網外設包括一個MAC 802.3(介質訪問控制)和一個DMA控制器。它默認情況下支持MII和RMII接口,通過一個選擇位進行切換(參考SYSCFG_PMC寄存器)


DMA控制器通過AHB主從接口和內核與內存相連。AHB主接口控制數據傳輸,AHB從接口用於訪問控制和狀態寄存器(CSR)空間


在MAC內核發送數據之前,數據進過DMA的方式發送到FIFO中緩存。同樣的,接收FIFO存儲通過線路收到的以太網數據幀,直到這些數據幀通過DMA被傳輸到系統內存。


以太網外設也包括一個SMI,用於和外部PHY通訊。通過一組寄存器的配置,用戶可以選擇MAC和DMA控制器的不同模式和功能


當使用以太網時,AHB時鐘必須至少25MHZ。下面試ETH的框圖


區域1:我們稱爲SMI接口,用於配置外部PHY芯片區域2:是數據交換接口,也就是上面我們說的MII接口和RMII接口

關於AHB的連接信息


2、數據接口

2.1、SMI接口


28.4.1   站管理接口:SMI站管理接口允許任何PHY寄存器請求通過2線時鐘和數據線。這個接口支持最多到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幀結構

給出了讀操作和寫操作幀結構,位傳輸必須要求從左到右,SMI的幀格式,讀寫操作


SMI時鐘選擇

MAC 啓動管理寫/讀操作。SMI 時鐘是一個分頻時鐘,其時鐘源爲應用時鐘(AHB 時鐘)。 分頻係數取決於 MII 地址寄存器中設置的時鐘範圍。

2.2、MII接口


介質獨立接口 (MII) 定義了 10 Mbit/s 和 100 Mbit/s 的數據傳輸速率下 MAC 子層與 PHY 之   間的互連。


剩餘的部分基本都是管腳介紹


  • MII_TX_CLK:連續時鐘信號。該信號提供進行 TX 數據傳輸時的參考時序。標稱頻率爲:速率爲 10 Mbit/s 時爲 2.5 MHz;速率爲 100 Mbit/s 時爲 25 MHz
  • MII_RX_CLK:連續時鐘信號。該信號提供進行 RX 數據傳輸時的參考時序。標稱頻率爲:速率爲 10 Mbit/s 時爲 2.5 MHz;速率爲 100 Mbit/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_DV 禁止、MII_RX_ER 使能時,特定的MII_RXD[3:0] 值用於傳輸來自 PHY 的特定信息(請參見表 142)
  • MII_RX_DV:接收數據有效信號。該信號表示 PHY 當前正針對 MII 接收已恢復並解碼的半字節。該信號必須與恢復幀的頭半字節進行同步(MII_RX_CLK),並且一直保持同步到恢復幀的最後半字節。該信號必須在最後半字節隨後的第一個時鐘週期之前禁止。爲了正確地接收幀,MII_RX_DV 信號必須在時間範圍上涵蓋要接收的幀,其開始時間不得遲於 SFD 字段出現的時間


  • MII_RX_ER:接收錯誤信號。該信號必須保持一個或多個週期(MII_RX_CLK),從而向MAC 子層指示在幀的某處檢測到錯誤。該錯誤條件必須通過 MII_RX_DV 驗證,如表142 所示

表141.TX 接口信號編碼


表142. RX 接口信號編碼



要生成 TX_CLK 和 RX_CLK 時鐘信號,必須向外部 PHY 提供 25MHz 時鐘,如圖 所 示。除了使用外部 25 MHz 石英晶體提供該時鐘,還可以通過 STM32F20xx 微控制器的 MCO引腳輸出該信號。這種情況下,必須對 PLL 倍頻進行配置,以通過 25 MHz 外部石英晶體在 MCO 引腳上獲得所需頻率。


2.3、RMII接口

Reducedmedia-independent interface: RMII

翻譯:精簡介質獨立接口: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 位寬(雙位)的發送和接收數據路徑

這裏時鐘管腳比MII接口少,

又一個非常重要的點,那就是時鐘源必須是50MHZ

時鐘源


使用外部 50 MHz 時鐘驅動 PHY 或使用嵌入式 PLL 生成 50 MHz 頻率信號來驅動 PHY

2.5、MII和RMII的接口選擇


使用 SYSCFG_PMC 寄存器中的配置位 23 MII_RMII_SEL 選擇 MII 或 RMII 模式。以太網控 制器處於復位模式或使能時鐘前,應用程序必須設置 MII/RMII 模式

MII/RMII內部時鐘方案

支持 MII 和 RMII 以及 10 和 100 Mbit/s 運行所需的時鐘方案如圖 321所示



1. 通過 SYSCFG_PMC 寄存器中的位 23 MII_RMII_SEL 控制 MII/RMII 選擇


要節省引腳,需在同一個 GPIO 引腳上覆用 RMII_REF_CK 和 MII_RX_CLK 這兩個輸入時 鍾信號。

3、MAC 802.3

跳過

4、DMA控制器操作


28.6   以太網功能說明:DMA控制器操作

       DMA具有自主的發送和接收引擎,還有一個 CSR(控制和狀態寄存器)空間。發送引擎將數據從系統存儲器傳送到 Tx FIFO,而接收引擎將數據從 Rx FIFO 傳送到系統存儲器。控制器(也就是DMA)利用描述符有效的將數據從源地址移動到目的地,很小的CPU干預。DMA 專爲面 向包的數據傳送(如以太網中的幀)而設計。控制器可以編程去打斷CPU,例如完成幀發送和接收傳送操作時以及其它正常/錯誤條件下。DMA 和STM32F20x 和STM32F21x 通過以下兩種數 據結構進行通信:

  • 控制和狀態寄存器 (CSR)
  • 描述符列表和數據緩衝區

控制和狀態寄存器在28.8節第895頁。細節的介紹和描述在875頁。



DMA控制器發送接收到的數據幀到STM32F20x 的接收緩存中和STM32F21x 存儲器中,也可以發送數據幀從STM32F20x 和STM32F21x 的存儲器的發送緩存。位於STM32F20x 和STM32F21x存儲器的描述符指向這些緩存。這裏有兩個描述符列表:一個用於接收,一個用於發送。兩個列表的基地址被寫入DMA寄存器3和4。描述符是前向列表(無論是隱式還是顯式)。最後一個描述符會指向第一個描述符,形成環形結構。顯 式鏈接的描述完成,通過配置在接收和發送描述符(RDES1[14] 和 TDES0[20])的第二個地址連接。描述符列表位於主機的物理存儲空間。每一個描述符最多可以指向兩個緩衝區。這樣可以使用連個物理緩衝區代替存儲器中兩個連續的緩衝區。數據緩衝區位於主機的物理存儲空間,通常由整個幀或部分幀組成,但不會超過單個幀。緩衝區中僅包含數據。緩衝區的住哪個臺保存在描述符中。一個單一的描述符不能跨越多個幀。當幀結束時,DMA會跳到下一幀緩衝區。數據連接可以被使能或終止。描述符環形和鏈式結構顯示在圖片339。


注意:這裏說的描述符是軟件,不是硬件,其實就是個結構體。圖片的左邊是環形結構,右圖是鏈式結構(關於環形和鏈式結構,英文直譯這樣,這個地方比較亂,不管這些,我們就使用上圖右邊的結構,鏈式結構)


使用DMA傳送進行的初始化

MAC的初始化步驟如下:

  1. 對 ETH_DMABMR 執行寫操作以設置 STM32F20x 總線訪問參數
  2. 對 ETH_DMAIER 寄存器執行寫操作以屏蔽不必要的中斷源
  3. 軟件驅動器創建發送和接收描述符列表。隨後對 ETH_DMARDLAR 和 ETH_DMATDLAR 寄存器執行寫操作,爲 DMA 提供各列表的起始地址
  4. 對 MAC 寄存器 1、2 和 3 執行寫操作以選擇所需的過濾選項
  5. 對 MAC ETH_MACCR 寄存器執行寫操作以配置和使能發送與接收工作模式。可根據自 動協商結果將 PS 位與 DM 位置 1(讀取自 PHY)
  6. 對 ETH_DMAOMR 寄存器執行寫操作,將位 13 和位 1 置 1 以啓動發送和接收
  7. 發送與接收引擎進入運行狀態,並嘗試從相應描述符列表中獲取描述符。這兩個引擎隨後開始處理接收和發送操作。發送和接收處理過程彼此獨立,可單獨進行啓動或停止

5、DMA描述符

ST提供的以太網驅動庫stm32f2x7_eth.c中使用是鏈接結構,鏈接結構如下


描述符注意事項:

  1. 一個以太網數據包可以跨越一個或多個DMA描述符
  2. 一個DMA描述符只能用於一個以太網數據包
  3. DMA描述符列表中的最後一個描述符指向第一個,形成鏈式結構!

描述符有分爲增強描述符和常規描述符,我們只講常規描述符!因爲我們的網絡例程只使用到了常規描述符。常規描述符和增強描述符的結構體成員變量不同。常規描述符只使用了描述符的前4個成員變量

常規描述符和增強描述符又有發送描述符和接收描述符兩種,下圖是常規Tx DMA描述符:




位 20 TCH:鏈接的第二個地址 (Second address chained)

該位置 1 時,表示描述符中的第二個地址是下一個描述符地址,而非第二個緩衝區地址。TDES0[20] 置 1 時,TBS2 (TDES1[28:16])爲「無 關」值。TDES0[21] 優 先 級 高 於TDES0[20]

常規Tx DMA描述符中TDES0的bit20用來表示描述符中的第二個地址是用來保存下一個描述符地址還是第二個緩衝區的地址,這點很重要!

常規Rx DMA描述符如下



常規Tx DMA描述符和常規Rx DMA描述符的成員變量的意義不同!

常規Rx DMA描述符中RDES1的bit14用來表示描述符中的第二個地址是用來保存一個描述符地址還是第二個緩衝區的地址

ST官方以太網庫stm32f2x7中使用鏈接結構的DMA描述符,那麼在以太網描述符結構體ETH_DMADESCTypeDef中Buffer1Addr就是緩衝區的地址,Buffer2NextDescAddr就是下一個描述符的地址,如下圖。


5、網絡中斷

網絡中斷向量:一個用於正常的網絡操作,另一個當它映射到EXIT線路19的時候,用於以太網喚醒事件(帶有喚醒幀或魔術數據包檢測)


第一個網絡中斷保留爲MAC和DMA產生的中斷,正如在MAC中斷和DMA中斷部分。

第二個中斷保留爲喚醒事件時PMT產生的中斷。喚醒事件對EXIT線路19的映射是造成STM32F20X和STM32F21X退出低功耗模式,並且產生中斷。


當映射到EXIT線路19的以太網喚醒事件發生和,MACPMT中斷使能並且有一個上升沿的EXIT線路19中斷也被使能,他們都能喚醒中斷


可使用看門狗定時器(請參見 ETH_DMARSWTR 寄存器)靈活控制 RS 位(ETH_DMASR 寄存器)。當此看門狗定時器使用非零值編程時,看門狗定時器激活,只要RXDMA完成發送一個接收的數據幀到系統存儲,在沒有觸發接收狀態,因爲它不是使能的在相應的接收描述符(RDES1[31])(也就是:未在相應接收描述符 (RDES1[31]) 使能接收狀態)。當定時器按照編程值運行時,RS位被置1並且中斷髮生,如果ETH_DMAIER寄存器中相應位使能。看門狗定時失效在運行前,當數據幀被髮送到內存,並且RS置1,因爲定時器被使能爲描述符。


注意:

讀取 PMT 控制和狀態寄存器會自動將接收的喚醒幀和接收的魔術數據包 PMT 中斷標誌清零。 但是,由於用於這些標誌的寄存器位於 CLK_RX 域,因此在固件能發現此更新前可能有顯著 的延遲。當 RX 時鐘很慢(在 10 Mbit 模式)和當 AHB 總線爲高頻時,該延遲會特別長。
由於從 PMT 到 CPU 的中斷請求基於 CLK_RX 域中的相同寄存器,所以即使在讀取 PMT_CSR 之後,CPU 也可能錯誤地第二次調用中斷例程。因此,可能需要固件輪詢接收的 喚醒幀和接收的魔術數據包位,並僅在發現它們都爲‘0’時退出中斷服務程序。

如果看文字版太枯燥,可以點擊看視頻版:點擊跳轉