一、MII接口概述:定义、历史与应用场景
1.1 什么是MII接口?
大家好,我是老李。做嵌入式网络开发这么多年,MII接口可以说是咱们硬件工程师的“老朋友”了。我个人习惯把MII理解为——以太网MAC层与PHY层之间的“翻译官”。
MII,全称Media Independent Interface,中文叫介质无关接口。为什么叫“介质无关”?说白了,就是不管你PHY后面接的是双绞线、光纤还是同轴电缆,MAC芯片看到的接口信号都是一样的。这一层抽象,给设计带来了极大的便利。
MII接口总共需要16根信号线(包括控制和数据)。其中数据路径是4位宽的,时钟频率25MHz,理论吞吐率能达到100Mbps。嗯,这里要注意,这4根数据线是半双工模式下收发各占4位,全双工模式下14根线就够了。
具体包括哪些信号?我整理了一个表格,大家快速扫一眼:
| 信号方向 | 信号名称 | 位宽 | 功能描述 |
|---|---|---|---|
| 发送 | TX_CLK, TX_EN, TX_ER, TXD[3:0] | 7 | 发送数据通道与时钟控制 |
| 接收 | RX_CLK, RX_DV, RX_ER, RXD[3:0] | 7 | 接收数据通道与状态指示 |
| 管理 | MDC, MDIO | 2 | MDIO管理总线(读/写PHY寄存器) |
你可能会有疑问:为什么收发各4位,而不是8位?其实就是个成本与性能的折中。在25MHz时钟下,4位总线跑100Mbps刚好够用。你想啊,5根线和一个时钟就能搞定100兆通信,已经很划算了。
1.2 MII的历史渊源
MII最早出现在1990年代初期。我记得那会儿网络设备大多用分离器件搭物理层,MAC和PHY之间的接口五花八门,每个厂家各搞一套。像什么AMD的、Intel的、Realtek的……互连时简直是一场噩梦。
IEEE 802.3u标准在1995年正式发布了MII,目的是统一MAC与PHY之间的接口标准。从这以后,任何厂家的MAC都可以和另一家厂家的PHY对接——前提是都实现了MII。这对整个以太网生态的繁荣至关重要。
不过事情并没有那么简单。MII虽然好,但16根线对于板级走线和封装来说还是偏多。尤其是到了2000年之后,嵌入式设备和消费电子对引脚数和PCB面积的要求越来越苛刻。于是,RMII(Reduced MII)应运而生,它把信号线从16根砍到了7根。这个话题我们在后面的章节会详细展开。
1.3 MII的应用场景
MII虽然“年纪”不小了,在今天依然有广泛的应用。我个人归纳了以下三类典型场景:
- 百兆以太网设备: 工业交换机、路由器、IP摄像头、网络打印机。这些设备性能要求不高,MII的复杂度合适。
- FPGA/CPLD中的MAC核: 很多FPGA厂商的IP核都保留MII接口。比如Xilinx的Tri-Mode Ethernet MAC,你可以选择MII/RMII/GMII中的任何一种。
- MCU的快速网络接入: 有些高端MCU(比如STM32、NXP LPC系列)内置了MAC,外挂一个MII/RMII PHY就能轻松接入网络。
为什么今天还有人用MII?其实很大程度上是因为兼容性。你想想,有些工业场景下同一批设备用了十年,哪怕PHY坏了,换一个新的MII接口的PHY就能直接替换,不需要改PCB。
1.4 MII的知识体系图
下面这张图,是我用SVG画的一个MII概述知识结构,方便你从整体上理解本章要点:
1.5 MII与RMII的简要对比
在进入RMII深水区之前,我们先快速对比一下两者的差异,心里有个数:
| 对比项 | MII | RMII |
|---|---|---|
| 信号总数 | 16根 | 7根 |
| 数据位宽 | 4位 | 2位 |
| 时钟频率 | 25MHz | 50MHz |
| 数据率 | 100Mbps | 100Mbps |
| 引脚数优势 | 无 | 省了超过一半 |
| 复杂度 | 相对简单直观 | 需要同步时钟处理 |
你看,RMII用更少的引脚实现了同样的100Mbps吞吐率,代价就是时钟频率翻倍,并且MAC和PHY必须使用同一个参考时钟源。这个“时钟同源”的要求,是很多新手在设计时容易忽略的一环。