如图 1 所示,MII 接口标准定义了 16 跟信号线,根据功能将其可以分为 3 组(发送,接收,载波侦听和冲突监测),另外还有用于对 PHY 进行配置的 SMI 接口。
发送
TX_CLK:MII 接口需要 25MHz 的时钟(100Mbits 传输速率时),当以 10Mbits 的速率工作,PHY 内部的电路会对 25MHz 的信号进行十分频以得到 2.5MHz 的时钟。
TXD[3 :0] : 根据时钟速率,不难算出 TXD 需要 4 根数据线。数据线需要与时钟保持同步。
TX_EN : 发送使能信号,也需要与时钟保持同步。
TX_ER : 发送错误指示信号,MAC 通过此信号向 PHY 表示数据无效。需要注意的是在许多 PHY和 MAC 中,这个信号是没有的(STM32 就没有这个信号,图中用虚线表示),由于在另一端的接收信号中包含 RX_ER,因此这个信号是不必要的。
接收
RX_CLK: 接收时钟与发送时钟完全类似。
RXD[3 :0]: 与发送数据线完全类似。
RX_ER:接收错误指示信号,PHY 通过此信号向 MAC 层表示在某一帧数据中发现问题。需要与RX_DV 一起使用。
RX_DV:与 RX_ER 一起进行出错分析。
载波侦听和冲突监测
CRS,COL:这两根信号线在半双工工作方式下提供载波侦听和冲突监测功能,全双工下无用。
SMI 接口
MDC,MDIO:对 PHY 进行配置的接口。可以通过 GPIO 口进行模拟。
2. RMII
RMII 接口可以简单的理解为(Reduce-MII)接口,即减少了 MII 接口中信号线的数量。基本原理是通过提高时钟速率来完成的(RMII 的时钟为 50MHz),因此发送/接收数据线都只需要两根,并合并了一定功能引脚。如图 2 所示,与图 1 对比,仅有一根信号线有差异。
CRS_DV:此信号是 MII 接口中 CRS 和 RX_DV 的复合信号。
三. 时钟电路设计
仔细观察图 1 和图 2,细心的读者会发现两者在时钟电路上有着明显的区别。在 MII 接口电路中,时钟由 PHY 向 MAC 提供(时钟源由通讯的一方来提供);在 RMII 接口电路中,MAC 和 PHY 共同使用来自外部的时钟信号(数据的发送方和接收方采用同一个时钟源)。
由于 MAC 和 PHY 的通讯速率相对较快,为保证硬件电路的可靠性,在设计中应该通过器件的数据手册了解相关参数以确定具体的电路方式。一般需要注意的有:
上升时间/下降时间 t_rise/t_fall : STM32 的 GPIO 口可以进行摆率的设置,不同摆率下上升时间和下降时间是不同的。尤为需要注意的是,当使用 MCO(Main Clock Output 需要了解此功能的读者请阅读参考手册)对多个 PHY 提供时钟,需考虑负载的增加,对输出能力的要求的影响。
时钟抖动(短周期)jitter(short term):特别需要注意的是此项参数,不同的 PHY 对此项参数的有不同的要求,一般多要求 jitter 小于几十个 ps,有些 PHY 的则要求 jitter 小于几百个 ps。STM32 的MCO 直接输出 HSE 的时钟抖动一般在 30~40ps,但若使用 PLL 对 HSE 倍频后,再由 MCO 输出会带来几百个 ps 的时钟抖动。
下面将分别介绍目前在实践中应用最为广泛的两种接口电路。
1. MII 接口设计
如图 3 所示,此系统是典型的 MII 接口电路设计,PHY 所需的时钟由 STM32 的 MCO 管脚输出(直接输出 HSE 的信号,没有经过 PLL 处理)。需保证 MCO 输出的时钟满足 PHY 的要求。
2. RMII 时钟电路
如图 4 所示,此系统是典型的 RMII 接口电路设计,MAC 和 PHY 所需的时钟由外部的有源晶振(50MHz)提供,需保证 OSC 输出的时钟满足 MAC 和 PHY 的要求。
四. 结语
尽管本文讨论的是以太网电路的设计要点,事实上,在数字电路接口的设计中,了解信号链走向和器件的参数要求都是必要的,也只要如此,才可以保证数字电路接口的硬件可靠性。