01、以太網簡介
STM32F20X和STM32F21的以太網外設可接受和發送資料按照IEE802.3-2002標準,
以太網提供一個完整的、靈活的外設去滿足不同應用和要求,它支持與外部相連(PHY)的兩個標準的工業介面:默認情況使用在IEEE802.3規范中定義的獨立介質介面(MII)和精簡介質獨立介面(RMII),它可以被用于大量的需求,例如開關(交換機)、網路介面卡等等,
以太網滿足下列標準:
● IEEE 802.3-2002,用于以太網MAC,
● IEEE 1588-2008 標準,用于規定聯網時鐘同步的精度,
● AMBA 2.0,用于AHB 主/從埠,
● RMII 聯盟的 RMII規范,
關于以太網的TCP/IP協議簇之前也是有講解的,
《以太網資料包架構》
《5000字“肝”了這篇IP協議》
《1萬字30張圖說清TCP協議》
《UDP協議詳解》
02、STM32F207的ETH介紹
STM32F207支持MII介面和RMII介面,STM32F207以太網外設包括一個MAC802.3(介質訪問控制)和一個DMA控制器,它默認情況下支持MII和RMII介面,通過一個選擇位進行切換(參考SYSCFG_PMC暫存器),
DMA控制器通過AHB主從介面和內核與記憶體相連,AHB主介面控制資料傳輸,AHB從介面用于訪問控制和狀態暫存器(CSR)空間,
在MAC內核發送資料之前,資料經過DMA的方式發送到FIFO中快取,同樣的,接收FIFO存盤通過線路收到的以太網資料幀,直到這些資料幀通過DMA被傳輸到系統記憶體,
以太網外設也包括一個SMI,用于和外部PHY通訊,通過一組暫存器的配置,用戶可以選擇MAC和DMA控制器的不同模式和功能,
當使用以太網時,AHB時鐘必須至少25MHZ,
下面是ETH的框圖

?
關于AHB的連接資訊:
區域1:我們稱為SMI介面,用于配置外部PHY芯片,
區域2:是資料交換介面,也就是上面我們說的MII介面和RMII介面,
03、SMI介面
3.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 設備同步傳輸狀態資訊,

?
3.2、SMI幀結構
下圖給出了讀操作和寫操作幀結構,位傳輸必須要求從左到右,

?
Preamble(32bit前導符):每個傳輸(讀或者寫)都必須以前導符開始,前導符是MDIO線上連續的32個邏輯’1’信號,和對應MDC線上的32個時鐘信號,這部分信號用于和PHY設備建立同步,
Start(起始符):幀的起始符定義為’01’,也就是MDIO線從邏輯’1’降到’0’再回到’1’,以標記傳輸的,
開始,
Operation(運算子):用于定義操作的型別:讀或者寫,
PADDR:PHY的地址有5位,可以區分32個PHY,高位先被發送和接收,
RADDR:暫存器的地址有5位,可以尋址32個獨立的暫存器,高位先被發送和接收,
TA:2位的轉向符,插在RADDR和資料(DATA)之間,用于避免讀操作時發生沖突,讀操作時,在TA的這2位時間內,MAC控制器保持MDIO線的高阻狀態,PHY設備則先保持1位的高阻狀態,在第2位時輸出’0’信號,寫操作時,在TA的這2位時間內,MAC控制器驅動MDIO線輸出’10’信號,而PHY設定則保持高阻狀態,
DATA(資料):16位的資料域,最先發送和接收的是ETH_MIID暫存器的第15位,
空閑位:MDIO線保持在高阻狀態,取消所有的三態驅動,由PHY的上拉電阻保證MDIO線處于邏輯’1’,
3.3、SMI寫操作
當應用程式設定了MII寫和忙位(以太網MACMII地址暫存器(ETH_MACMIIAR)),SMI介面會向PHY傳 送 PHY地 址 和 PHY寄 存 器 地 址 ,然 后 傳 輸 數 據 (以 太 網 MAC MII 資料 寄 存器(ETH_MACMIIDR)),在SMI介面傳輸資料的程序中,不能修改MII地址暫存器和MII資料暫存器的內容;在此程序中(忙位為高),對MII地址暫存器或MII資料暫存器的寫操作將被忽視,并且不影響整個傳輸的正確完成,當完成寫操作時,SMI介面將清除忙位,告知應用程式,
下圖描述了寫操作時的幀格式,

?
3.4、SMI讀操作
當程式把以太網MACMII地址暫存器(ETH_MACMIIAR)的MII忙位置為’1’,而保持MII寫位為’0’,SMI介面則發送PHY地址和PHY暫存器地址,執行讀PHY暫存器的操作,在整個傳輸程序中,應用程式不能修改MII地址暫存器和MII資料暫存器的內容,在傳輸程序中(忙位為高),對MII地址暫存器或者MII資料暫存器的寫操作將被忽視,并且不影響整個傳輸的正確完成,在讀操作完成后,SMI介面將清除忙位,并把從PHY讀回的資料更新到MII資料暫存器中,
下圖描述了讀操作的幀格式

?
3.5、SMI時鐘選擇
MAC 啟動管理寫/讀操作,SMI時鐘是一個分頻時鐘,其時鐘源為應用時鐘(AHB時鐘),分頻系數取決于MII地址暫存器中設定的時鐘范圍,這里既然說到了時鐘,就再次提一下上文提到的內容:當使用以太網時,AHB時鐘必須至少25MHZ,

?
04、代碼
STM32的網口的SMI介面初始化是十分簡單的,
初始化GPIO,
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC |RCC_AHB1Periph_GPIOF, ENABLE); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH);
因為SMI介面需要MAC配合,所以需要是使能MAC的時鐘,
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC |RCC_AHB1Periph_ETH_MAC_Tx |RCC_AHB1Periph_ETH_MAC_Rx, ENABLE);
SMI介面的讀函式和寫函式,
uint16_t ETH_ReadPHYRegister(uint16_t PHYAddress, uint16_t PHYReg)
uint32_t ETH_WritePHYRegister(uint16_t PHYAddress, uint16_t PHYReg,uint16_t PHYValue)
點擊查看本文所在的專輯,STM32F207網路開發
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/270513.html
標籤:嵌入式
