芯片是:STM32F207VCT6
本人主要介紹STM32F207VCT6的ETH部分,基本是把ETH部分英文翻譯一下,加上自己的理解。
歡迎查看本文所在的系列,STM32的LWIP應用,點擊跳轉
通過DMA控制器進行介質訪問控制
這部分內容應用於STM32F20X和STM32F21系列,其他的 不適用
28.1 以太網簡介
部分版權 2004 2005 新思科技(美國公司)。所有權利保留,使用需要認可。
藉助STM32F20X和STM32F21的以太網外設可接受和發送數據按照IEE 802.3-2002標準
以太網提供一個完整的、靈活的外設去滿足不同應用和要求。它支持與外部相連(PHY)的兩個標準的工業接口:默認情況使用在IEEE802.3規範找中定義的獨立介質接口(MII)和精簡介質獨立接口(RMII)。它可以被用於大量的需求,例如開關(交換機)、網絡接口卡等等
以太網滿足下列標準
28.2 以太網的主要特性
以太網外設包括以下特性,通過類型列舉
28.2.1 MAC內核特性
兩組 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的連接信息
28.4.1 站管理接口:SMI站管理接口允許任何PHY寄存器請求通過2線時鐘和數據線。這個接口支持最多到32個PHY
應用程序可以從 32 個 PHY 中選擇一個 PHY,然後從任意 PHY 包含的 32 個寄存器中選擇 一個寄存器,發送控制數據或接收狀態信息。任意給定時間內只能對一個 PHY 中的一個寄 存器進行尋址
MDC時鐘線和MDIO 數據線在微控制器中均用作複用功能 I/O:
SMI幀結構
給出了讀操作和寫操作幀結構,位傳輸必須要求從左到右,SMI的幀格式,讀寫操作
SMI時鐘選擇
MAC 啓動管理寫/讀操作。SMI 時鐘是一個分頻時鐘,其時鐘源爲應用時鐘(AHB 時鐘)。 分頻係數取決於 MII 地址寄存器中設置的時鐘範圍。
介質獨立接口 (MII) 定義了 10 Mbit/s 和 100 Mbit/s 的數據傳輸速率下 MAC 子層與 PHY 之 間的互連。
剩餘的部分基本都是管腳介紹
表141.TX 接口信號編碼
表142. RX 接口信號編碼
要生成 TX_CLK 和 RX_CLK 時鐘信號,必須向外部 PHY 提供 25MHz 時鐘,如圖 所 示。除了使用外部 25 MHz 石英晶體提供該時鐘,還可以通過 STM32F20xx 微控制器的 MCO引腳輸出該信號。這種情況下,必須對 PLL 倍頻進行配置,以通過 25 MHz 外部石英晶體在 MCO 引腳上獲得所需頻率。
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接口具有以下特點
這裏時鐘管腳比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 這兩個輸入時 鍾信號。
跳過
28.6 以太網功能說明:DMA控制器操作
DMA具有自主的發送和接收引擎,還有一個 CSR(控制和狀態寄存器)空間。發送引擎將數據從系統存儲器傳送到 Tx FIFO,而接收引擎將數據從 Rx FIFO 傳送到系統存儲器。控制器(也就是DMA)利用描述符有效的將數據從源地址移動到目的地,很小的CPU干預。DMA 專爲面 向包的數據傳送(如以太網中的幀)而設計。控制器可以編程去打斷CPU,例如完成幀發送和接收傳送操作時以及其它正常/錯誤條件下。DMA 和STM32F20x 和STM32F21x 通過以下兩種數 據結構進行通信:
控制和狀態寄存器在28.8節第895頁。細節的介紹和描述在875頁。
DMA控制器發送接收到的數據幀到STM32F20x 的接收緩存中和STM32F21x 存儲器中,也可以發送數據幀從STM32F20x 和STM32F21x 的存儲器的發送緩存。位於STM32F20x 和STM32F21x存儲器的描述符指向這些緩存。這裏有兩個描述符列表:一個用於接收,一個用於發送。兩個列表的基地址被寫入DMA寄存器3和4。描述符是前向列表(無論是隱式還是顯式)。最後一個描述符會指向第一個描述符,形成環形結構。顯 式鏈接的描述完成,通過配置在接收和發送描述符(RDES1[14] 和 TDES0[20])的第二個地址連接。描述符列表位於主機的物理存儲空間。每一個描述符最多可以指向兩個緩衝區。這樣可以使用連個物理緩衝區代替存儲器中兩個連續的緩衝區。數據緩衝區位於主機的物理存儲空間,通常由整個幀或部分幀組成,但不會超過單個幀。緩衝區中僅包含數據。緩衝區的住哪個臺保存在描述符中。一個單一的描述符不能跨越多個幀。當幀結束時,DMA會跳到下一幀緩衝區。數據連接可以被使能或終止。描述符環形和鏈式結構顯示在圖片339。
注意:這裏說的描述符是軟件,不是硬件,其實就是個結構體。圖片的左邊是環形結構,右圖是鏈式結構(關於環形和鏈式結構,英文直譯這樣,這個地方比較亂,不管這些,我們就使用上圖右邊的結構,鏈式結構)
使用DMA傳送進行的初始化
MAC的初始化步驟如下:
ST提供的以太網驅動庫stm32f2x7_eth.c中使用是鏈接結構,鏈接結構如下
描述符注意事項:
描述符有分爲增強描述符和常規描述符,我們只講常規描述符!因爲我們的網絡例程只使用到了常規描述符。常規描述符和增強描述符的結構體成員變量不同。常規描述符只使用了描述符的前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就是下一個描述符的地址,如下圖。
網絡中斷向量:一個用於正常的網絡操作,另一個當它映射到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,因爲定時器被使能爲描述符。
注意:
如果看文字版太枯燥,可以點擊看視頻版:點擊跳轉