MCU微課堂
CKS32F107XX系列以太網介紹(二)
第七十二期 2026.03.03
MII/RMII接口概述
MII即媒體獨立接口,也叫介質獨立接口。它是IEEE-802.3定義的以太網行業標準。它包括一個數據接口,以及一個MAC和PHY之間的管理接口。
RMII即精簡介質獨立接口。規范降低了10/100 Mbit/s 下微控制器以太網外設與外部PHY 間的引腳數。根據IEEE 802.3u 標準,MII包括17 個數據和控制信號的引腳。RMII規范將引腳數減少為 9 個。圖 1 和 圖2分別為 MII、RMII 接口的信號示意圖。

圖1 MII接口信號

圖2 RMII接口信號
引腳定義說明:

SMI 接口信號:MAC 通過此接口配置 PHY 工作在不同的通信模式。
數據發送信號:由 MAC 子層同步驅動,在 TX_EN 信號有效時才為有效信號(有效數據)。禁止 TX_EN 時,發送數據不會對 PHY 產生任何影響。MII 接口包括 4 根數據信號,RMII 接口是 2 根數據信號。
數據接收信號:由 PHY 同步驅動,在 DV 信號有效時才為有效信號(有效數據)。MII 接口包括 4 根數據信號,RMII 接口是 2 根數據信號。
發送使能信號:該信號表示 MAC 當前正針對 MII/RMII 發送半字節。該信號必須與報頭的前半字節進行同步 (MII_TX_CLK / RMII_REF_CLK)。
時鐘信號:MII 接口包括 TX_CLK、RX_CLK;RMII 接口 TX/RX 共用 REF_CLK 信號;該信號提供進行 TX/RX 數據傳輸時的參考時序。
MII 標稱頻率為:速率為 10 Mbit/s 時為 2.5 MHz;速率為 100 Mbit/s 時為 25 MHz。
RMII 標稱頻率為:速率為 10 Mbit/s 時為 5 MHz;速率為 100 Mbit/s 時為 50 MHz。
接收錯誤信號:該信號必須保持一個或多個周期 CLK,從而向 MAC 子層指示在幀的某處檢測到錯誤。RMII 接口無此信號。
接收數據有效信號:該信號表示 PHY 當前正針對接收已恢復并解碼的半字節。該信號必須與恢復幀的頭半字節進行同步,并且一直保持同步到恢復幀的最后半字節。該信號必須在最后半字節隨后的第一個時鐘周期之前禁止。為了正確地接收幀,DV 信號必須在時間范圍上涵蓋要接收的幀,其開始時間不得遲于 SFD 字段出現的時間。RMII 接口此信號和載波偵聽信號復用成1個信號引腳。
載波偵聽信號:當發送或接收介質處于非空閑狀態時,由 PHY 使能該信號。發送和接收介質均處于空閑狀態時,由 PHY 禁止該信號。PHY 必須確保 CRS 信號在沖突條件下保持有效狀態。該信號無需與 TX 和 RX 時鐘保持同步。在全雙工模式下,該信號沒意義。RMII 接口此信號和接收數據有效信號復用成1個信號引腳。
沖突檢測信號:檢測到介質上存在沖突后,PHY 必須立即使能沖突檢測信號,并且只要存在沖突條件,沖突檢測信號必須保持有效狀態。該信號無需與 TX 和 RX 時鐘保持同步。RMII 接口無此信號。
CKS32F107XX通信實驗
本實驗由 CKS32F107 開發板 + DP83848 以太網模塊配合完成。
1.MII模式配置
(1)DP83848 模塊通過 J1 J2 J3 配置為 MII 模式;
(2)CKS32F107 開發板如下管腳通過杜邦線和 DP83848 模塊連接;如圖3;

圖3 MII硬件連接示意圖
(3)配置如圖3 GPIO管腳為 Ethernet 功能;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_ETH, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
(4)配置以太網模塊為 MII 模式;
GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_MII);
(5)配置 PA8 輸出25M 時鐘;
/* PA8: MCO pin configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_MCOConfig(RCC_MCO_HSE); //輸出 MCU HSE 25M,MII模式 4*25M=100M
2.RMII模式配置
(1)DP83848 模塊通過 J1 J2 J3 配置為 RMII 模式;
(2)CKS32F107 開發板如下管腳通過杜邦線和 DP83848 模塊連接;

圖4 RMII硬件連接示意圖
(3)配置如圖 GPIO管腳為 Ethernet 功能;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_ETH, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
(4)配置以太網為 RMII 模式;
GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_RMII);
(5)配置以太網為 RMII 模式;
/* PA8: MCO pin configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Set PLL3 clock output to 50MHz (25MHz /5 *10 =50MHz) */
RCC_PLL3Config(RCC_PLL3Mul_10);
RCC_PLL3Cmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET);
RCC_MCOConfig(RCC_MCO_PLL3CLK); //輸出 MCU PLL3 50M,RMII模式: 2*50M=100M
3.實驗結果
通過以上配置,無論 MII /RMII 都可以正常通訊,如下圖 5。

圖5 實驗結果
-
mcu
+關注
關注
147文章
18923瀏覽量
397963 -
以太網
+關注
關注
41文章
5997瀏覽量
180791 -
接口
+關注
關注
33文章
9519瀏覽量
157012
原文標題:MCU微課堂|CKS32F107XX系列以太網介紹(二)
文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
中科芯CKS32F107XX系列MCU的獨立看門狗介紹
中科芯CKS32F107XX系列MCU的窗口看門狗介紹
中科芯CKS32F107XX系列MCU的bxCAN介紹
MCU微課堂|CKS32F4xx系列產品時鐘配置
CKS32F4xx系列芯片以太網模塊主要功能及框圖解析
中科芯CKS32F107XX系列MCU的以太網介紹(一)
STM32F105/107系列以太網PHY設計
CKS32F107xx系列MCU中ADC介紹
CKS32F107xx系列MCU的GPIO內部硬件結構和工作模式
詳解CKS32F107xx系列的定時器同步功能
中科芯CKS32F107XX系列MCU的以太網介紹(二)
評論