ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

以太网MAC与PHY接口详解:MII/RMII/GMII/RGMII选型与调试

以太网MAC与PHY接口详解:MII/RMII/GMII/RGMII选型与调试 拿到一块带PHY芯片的板子第一件事就是看MAC和PHY之间走的是什么接口。MII、RMII、GMII、RGMII这四个名字几乎出现在所有以太网相关的原理图和驱动配置里但很多人对它们之间的关系、差异和选型逻辑一直是一知半解的状态。我这几年用MCU、FPGA和嵌入式Linux做过不少以太网项目踩过的坑大部分都集中在接口选择不当、时钟配置错误、引脚复用冲突这几个地方。这篇就把这四种接口从头到尾梳理一遍结合实际调试经验讲清楚它们各自适合什么场景、参数怎么配、板子怎么画、驱动怎么改。1. 内容整体设计与思路拆解1.1 为什么MAC和PHY之间需要这么多种接口先理清一个基本概念以太网通信链路中MAC层负责数据封装、帧校验、流控PHY芯片负责物理信号的编解码、时钟恢复、线路收发。MCU或CPU里通常集成了MAC控制器PHY则是外部独立芯片二者之间的数据通道就是MII家族的接口。问题来了既然都是传以太网数据为什么要分MII、RMII、GMII、RGMII这么多版本核心原因就一个词平衡。数据速率、引脚数量、时钟频率、PCB布线难度、EMI表现这五个维度互相制约。10Mbps时代用简单接口就能满足但到了100Mbps、1000Mbps数据位宽必须加宽或者时钟必须提速否则信号完整性会崩掉。我的理解是这四种接口本质上是同一件事的四种实现方案在MAC和PHY之间搬运数据帧区别只在于每条数据线同时传输几位、时钟跑多快、用什么方式采样。理解了这一点后面所有细节都能串起来。1.2 四个接口的核心差异数据位宽与时钟频率的组合MII是10/100Mbps时代的标准接口数据线4位双向100Mbps时TX/RX时钟均为25MHz10Mbps时降到2.5MHz。RMII是MII的引脚精简版把数据线从4位变成2位代价是时钟频率翻倍到50MHz而且MAC和PHY必须共享同一个50MHz参考时钟。GMII是千兆接口数据线扩展到8位125MHz时钟每条数据线速率突破1000Mbps。RGMII则是GMII的精简版8位数据线保持不变但采用双沿采样时钟还是125MHz引脚数量直接砍半。这里有一个非常容易理解错的地方RGMII不是把GMII的时钟降到125MHz以下而是用DDR双沿采样的方式在同一时钟周期内传两倍数据。所以RGMII的8位数据线125MHz时钟等效带宽和GMII的8位数据线125MHz时钟是一样的但引脚少了近一半。1.3 从系统角度怎么看接口选型实际项目里很少会只看接口本身选型更多时候是先定了MCU或SoC再根据它能提供哪种MAC接口决定PHY芯片。比如STM32F407只有一个RMII接口的MAC那就必须选支持RMII的PHY像LAN8720、DP83848都是这个方向的主流选择如果用的是FPGAMAC层是自己写的逻辑那GMII、RGMII都可以做灵活性就很大。我在FPGA项目里用过RGMII接口的PHY芯片也在STM32上用RMII接过LAN8720还在嵌入式Linux平台调过带GMII的MAC。一个比较深的体会是确定接口类型的优先级应该是先看MAC侧支持什么再看PCB布局允许放多少信号线最后才考虑PHY芯片的价格和供货。反过来选型容易出问题。2. 核心细节解析与实操要点2.1 MII接口25MHz时代的经典方案MII接口的全称是Media Independent Interface最早出现在10/100Mbps以太网标准中。它有一组很值得玩味的设计思路将MAC与PHY从物理上解耦让MAC不关心底层是双绞线、光纤还是其他介质只通过MII口收发标准化的数据帧。MII的信号线基本分为四组。数据信号包括TXD[3:0]和RXD[3:0]各4位时钟信号包括TX_CLK和RX_CLK由PHY提供控制信号包括TX_EN、TX_ER、RX_DV、RX_ER还有一根用于状态上报的CRS和COL在半双工模式下处理冲突检测。此外管理接口MDIO和MDC也走这个口用于配置PHY内部寄存器。实操中的关键点是MII的TX_CLK和RX_CLK方向是PHY到MAC也就是说MAC发送数据时也要等PHY送来的时钟。这样设计的理由是PHY芯片知道线路上的实际速率在自协商过程中速率会变化MAC跟着PHY的时钟走能避免速率不匹配。这个细节在调试时很重要如果时钟信号没有接对方向MAC侧始终无法建立链路。MII的缺点是引脚太多。4位数据加4位数据加时钟控制管理算下来超过16根信号线在小封装MCU或高密度PCB上非常占地方。我在一个Cortex-M3项目里试过用MII最后由于引脚不足改用了RMII布线面积直接少了一半。2.2 RMII接口省引脚但代价是时钟约束更严格RMII全称Reduced Media Independent Interface目标很明确把MII的引脚数降到一半。数据线从4位变成2位去掉了TX_ER和RX_ER时钟由两个变成只有一个50MHz REF_CLK。整个信号组只有TXD[1:0]、RXD[1:0]、TX_EN、CRS_DV、REF_CLK、MDC、MDIO总共9根左右比MII少了将近一半。但RMII有个结构性特点MAC和PHY必须共享同一个50MHz参考时钟。这个时钟可以来自MAC侧、PHY侧或者外部晶振/振荡器。问题在于50MHz是有明确频率和相位要求的PCB布线时REF_CLK要尽可能短避免长走线导致时钟偏斜否则会出现偶发性的丢包和链路不稳定。另一个容易被忽略的是RMII的CRS_DV信号。它在MII里是CRS和RX_DV两个信号RMII阶段被合并成了一个用于指示载波侦听和接收数据有效。很多PHY芯片对CRS_DV的时序实现不完全一致比如有的芯片在空闲时会拉高一段时间再拉低有的则不会如果MAC侧对CRS_DV的上升沿和下降沿判断逻辑写死可能在高流量下异常。我在STM32F407RTL8201F的板子上遇到过一个问题偶发性ping不通复位后恢复。排查到最后发现是50MHz参考时钟走线太长与数据线之间的偏斜过大导致接收时钟沿采不到正确的数据电平。后来把REF_CLK走线控制在10mm以内问题就没再出现过。2.3 GMII接口千兆时代的全宽接口GMII是Gigabit Media Independent Interface数据位宽扩展到8位时钟频率125MHz设计上可同时兼容10/100/1000Mbps通过时钟频率的变化适应不同速率。它保留了MII的TX_CLK、RX_CLK相对独立的时钟策略但TX_CLK在GMII模式下由MAC内部产生提供给PHY这一点和MII不同。GMII的完整信号线总共有24根左右这是它最大的劣势。在4层板以上的PCB设计中24根高速并行线不但占用面积大而且对等长约束的要求很高一般要求同一组内的走线长度差控制在正负50mil以内这在高速数字电路里是不小的挑战。实际项目中GMII用得不多因为它太占资源而且绝大多数SoC和MCU只提供RGMII或RMII。但FPGA实现千兆以太网时GMII还是很有参考价值的因为GMII的信号定义比较直观FPGA内部逻辑更容易理解和调试。不过我自己在Xilinx平台做设计时最终还是会用RGMII IP核来节省引脚GMII更多用于协议理解。2.4 RGMII接口双沿采样下的千兆主流方案RGMII是Reduced Gigabit Media Independent Interface设计目标是用最少引脚实现千兆速率目前是绝大多数SoC、MCU、FPGA的千兆以太网标准接口。它的核心思路是数据位宽保持8位不变但数据在时钟的上升沿和下降沿各采样一次等效数据速率翻倍所以125MHz时钟就能跑满1000Mbps。RGMII信号组非常精简TXD[3:0]、RXD[3:0]、TX_CLK、RX_CLK、TX_CTL、RX_CTL加上MDC和MDIO总共14根左右。其中TX_CTL信号在上升沿表示TX_EN下降沿表示TX_ERRX_CTL也类似。这个设计省掉了好几根控制线代价是MAC和PHY的实现方都得严格遵循双沿采样的时序要求。实际工程中RGMII最难调的地方就是时钟延迟。由于数据在双沿采样如果时钟边沿正好落在数据的跳变时刻采样结果就会不稳定。标准规范里的建议是MAC侧发送数据时要把时钟延迟1.5~2ns再输出PHY侧接收时也要保证时钟和数据之间的相对延时满足建立保持时间。很多SoC都内置了RGMII延迟配置寄存器但默认值未必适合具体PHY芯片必须实测调整。我在一个Zynq平台上用过RTL8211E刚开始不配置任何延迟结果千兆模式下完全无法建立链路。后来在设备树中把phy-mode设为rgmii-id让MAC和PHY同时启用内部延迟才解决了问题。还有一些PHY需要外部电阻或寄存器设置延迟不同芯片差别挺大这部分必须仔细看数据手册的推荐配置不能凭经验一概而论。2.5 电压型和电流型PHY对接口选型的影响“电压型”和“电流型”PHY这个分类指的是PHY芯片内部线路驱动器的实现方式而不是PHY接口本身。电压型PHY通常通过内部电压源驱动差分线对电流型PHY则通过电流源驱动两者在外部端接电阻的要求上有差异对MAC接口信号的电平标准也有一些潜在影响。实际项目中这个差异最直接的影响是端接方案。比如在RGMII接口中MAC输出的信号电平标准通常是2.5V或1.8V与PHY的I/O电压要匹配。电流型PHY往往要求外部加上拉电阻到指定电压电压型PHY则可能内置了端接电阻不需要外部再拉。如果搞错驱动类型信号可能出现过冲或幅度不足表现出高误码率或完全不通。我建议在硬件设计阶段就确认PHY的I/O电压和MAC侧I/O电压兼容范围再确认是电压型还是电流型驱动据此决定是否需要外部端接。检查PHY数据手册的推荐电路是最简单也最可靠的方法不要只看信号名就去连电阻网络漏加或加错在高速接口上很致命。2.6 管理接口MDIO/MDC几乎每个PHY都要配的寄存器通道MII家族接口里还有一组管理信号被很多人当配角忽略但它实际是调PHY的关键MDIOManagement Data Input/Output和MDCManagement Data Clock。通过这两个引脚MAC或CPU可以读写PHY内部寄存器完成速率协商、链路状态读取、中断配置、环回测试等操作。MDIO协议本身不复杂MDC提供时钟MDIO是双向数据线操作格式包含起始位、操作码、PHY地址、寄存器地址、数据等字段。一次读或写操作需要64个时钟周期左右。绝大多数Linux驱动和MCU驱动都会在初始化阶段读取PHY ID寄存器通常是寄存器2和3来识别芯片型号再根据型号加载对应的配置。值得注意的一个坑PHY地址不是固定的一般由芯片的地址引脚如PHYAD0复用自RXER引脚的电平决定可以在电路板上通过上下拉电阻配置为0~31之间的任意值。如果PCB上PHY地址和驱动里访问的不一致MDIO时序正常、硬件连接也没错但就是读不到PHY ID链路永远起不来。排查这种问题的时候先用示波器抓MDC和MDIO确认读写命令里携带的地址字段再对电路板上PHY地址引脚的实际电平基本上一抓一个准。3. 实操过程与核心环节实现3.1 从接口信号表到实际接线的完整流程序下面给出一个标准操作流程适用于MCU接PHY、SoC接PHY、FPGA接PHY等所有场景。第一步是确认MAC侧的接口类型和信号列表第二步是确认PHY侧的接口类型和信号列表第三步是一一对应连接注意TX和RX的交叉关系即MAC侧TXD连到PHY侧TXDMAC侧RXD连到PHY侧RXD。第四步是检查时钟。MII和GMII通常由PHY输出时钟到MACRGMII则是MAC输出TX_CLK到PHYRX_CLK由PHY输出到MACRMII是共用一个50MHz REF_CLK。这里最容易出错以我经验来看时钟方向标反或者接入方式不对比数据线接错还要隐蔽。第五步是检查管理接口。MDC从MAC侧输出MDIO是双向线通常需要接上拉电阻到I/O电压阻值1kΩ到10kΩ都可以。很多板的MDIO漏接上拉或上拉电压不正确导致寄存器读写不稳定偶尔成功偶尔失败。最后是确认PHY地址和复位时序。PHY芯片的复位引脚通常要求拉低至少几百微秒到毫秒再释放释放后还要等待内部初始化完成一般为几毫秒到几十毫秒。如果复位时序不够芯片可能处于异常状态表现为MDIO能读到ID但无法建立链路或者完全无响应。3.2 STM32F407接LAN8720RMII接口的通用配置方法STM32F407是一款非常经典的带有以太网MAC的MCU它的MAC只支持MII和RMII大多数项目会选RMII来省引脚。LAN8720是低功耗10/100Mbps RMII PHY应用很广泛。下面这套配置在我做过的F407板子上验证过多次。接线方面F407的RMII接口有几个关键信号要特别注意REF_CLK需要50MHz外部时钟输入。LAN8720有两种方式产生REF_CLK一种是用外部50MHz有源晶振或振荡器给LAN8720的XI引脚然后由它的CLK_OUT引脚输出50MHz给STM32另一种是直接把外部50MHz时钟同时给STM32和LAN8720。第一种方法更常见因为LAN8720内部有时钟缓冲输出源时钟频率准确度容易保证。时钟正确后配置GPIO复用功能。STM32CubeMX中设置ETH外设选择RMII软件会自动分配引脚通常F407的PA1是ETH_RMII_REF_CLKPA2是MDIOPC1是MDCPA7是CRS_DVPC4和PC5是RXD0和RXD1PB11、PB12、PB13是TX_EN、TXD0、TXD1。接线时务必对照芯片引脚复用手册不能想当然。LAN8720的PHY地址可以通过PHYAD0引脚配置默认常见配置为0硬件上也经常接下拉电阻让地址为0。驱动初始化时用LAN8720的默认地址0去读取寄存器0BCR、寄存器1BSR和寄存器2、3PHY ID能读到正确ID说明PHY工作正常。F407测试时最常遇到的坑是ETH_RMII_REF_CLK的时钟必须提前使能并稳定否则MAC初始化会卡住。还有LAN8720的nINT引脚如果接了MCU的GPIO要在NVIC里配置好中断优先级否则使用中断方式检测网络插入/拔出时会不生效。3.3 ESP32连接LAN8720三个高频坑的排查实践ESP32的以太网MAC接口走的是RMII外接LAN8720的接法在物联网产品中非常普遍。看过太多人在这上面出问题我总结出三个高频坑REF_CLK配置错误、PHY地址不匹配、复位时序不足。REF_CLK的问题是ESP32对RMII参考时钟非常挑剔。官方推荐使用外部50MHz有源晶振并且参考时钟必须和LAN8720的REF_CLK同步。许多开发板直接由ESP32输出50MHz时钟给LAN8720本意是减少器件但一旦ESP32内部时钟配置有偏差或PCB走线不理想就会造成RMII链路极不稳定。实测下来外接有源晶振的方案最稳妥项目量产不能省这个器件。PHY地址方面ESP32的RMII驱动需要在初始化时指定PHY地址。LAN8720的地址默认由PHYAD0引脚决定常见配置为0但也有板子为了避开地址冲突设成了1。启动时排查第一件事就是确认板子的地址再修改初始化代码里的PHY_ADDR否则会一直报“PHY not found”。复位时序方面很多最小系统板把LAN8720的复位和ESP32的EN引脚绑在一起实际上并不可靠。LAN8720的复位信号必须满足至少25ms的低电平时间然后再释放并等待内部初始化完成。如果复位时间不够会出现PHY ID时而能读到时而不能读到的现象。我在ESP-IDF环境下解决这三个问题后以太网基本是一把过。这提醒我一个问题不要图省事跳过PHY数据手册的复位和时钟章节这两个部分恰恰决定了链路的物理层质量。3.4 嵌入式Linux下PHY的设备树配置要点嵌入式Linux平台的以太网驱动是通过设备树描述MAC和PHY的绑定关系。设备树里最核心的属性是phy-mode它直接告诉内核MAC侧与PHY之间是哪种接口。常见取值有mii、rmii、gmii、rgmii、rgmii-id等其中rgmii-id表示MAC和PHY都启用内部时钟延迟这是多数RGMII PHY的首选模式。一个典型的RGMII设备树片段长这样macb { pinctrl-names default; pinctrl-0 pinctrl_gmac0_default; phy-mode rgmii-id; phy-handle phy0; status okay; mdio { #address-cells 1; #size-cells 0; phy0: ethernet-phy3 { reg 3; reset-gpios gpio0 10 GPIO_ACTIVE_LOW; reset-assert-us 10000; reset-deassert-us 100000; }; }; };这里phy-handle指向mdio总线上的某个PHY节点通常以以太网PHY地址为reg值。reset-gpios、reset-assert-us、reset-deassert-us分别指定复位引脚和复位时间。有个容易忽略的点如果PHY地址是3但节点reg写的是0内核会找不到PHY并报错。多数情况下PHY驱动会根据MDIO读取的ID自动匹配这没问题但地址必须和设备树一致。使用嵌入式Linux时另一个注意点是内核和驱动都带了一些PHY驱动通过PHY ID匹配驱动。有些PHY芯片的ID不在内核自带的PHY ID表中虽然MDIO能正确读到ID但内核可能识别成generic PHY功能和速率协商依然正常但专用功能比如EEE、WOL可能无法启用。如果遇到这种问题可手动添加PHY驱动的compatible或id_table。3.5 千兆RGMII的时钟延迟配置实战RGMII的时钟延迟可以看作是MAC与PHY之间数据同步的关键。具体来说发送方向的数据线和TX_CLK之间需要满足一定相位关系接收方向的数据线和RX_CLK也一样。由于RGMII是双沿采样如果采样沿正好落在数据跳变点上就会采到不确定的电平链路表现为链路通但不稳定、ping时通时断、高速流量下丢包。解决办法是在内部为时钟增加延迟。延迟量通常在1.5ns到2.0ns之间。很多SoC的MAC在设备树里通过rgmii-id来使能内部延迟也有SoC允许在驱动中单独设置TX delay和RX delay。PHY侧也一样比如瑞昱的RTL8211系列可以通过寄存器或引脚配置延迟。我在调试一段RGMII链路时抓过MAC输出时钟和数据线的波形。时钟上升沿和下降沿跟数据跳变几乎重叠采样窗口几乎为零。后来配置了2ns延迟波形就明显错开了链路立刻恢复正常。这个经验说明RGMII不能只靠画板子时的等长布线必须配合寄存器延迟调整才能把数据采样窗口最大化和噪声容限最大化。3.6 SGMII与并行接口的不同定位标题提到的四种接口都是并行接口但在千兆及以上的SoC设计中SGMII也很常见。SGMII是串行接口时钟625MHz差分信号只有一对发送、一对接收传输速率更高引脚数更少但MAC和PHY都需要集成SerDes。和RGMII相比SGMII更适合高速背板、交换机芯片之间的互连以及对PCB面积要求极高的场合。如果使用了SGMII IP核与PHY芯片配合配置模式必须正确。SGMII IP核通常有两种模式一种是MAC模式直接连接PHY另一种是PCS/PMA模式用于连接光模块或背板SerDes。两种模式的接口协议和寄存器定义不同配置错误会导致链路无法建立或速率协商失败。拿FPGA设计举例如果使用的是Xilinx的1G/2.5G Ethernet PCS/PMA or SGMII IP核选择MAC模式时IP核会提供一个类似RGMII但带串行转换的接口与外部PHY对接这时候PHY侧的SGMII模式也要选择正确。多数PHY在MAC侧接入SGMII时需要在自协商模式下工作。简单说就是SGMII也有“主从”和“MAC-PHY”的关系配置时要保证两端模式匹配这与并行接口的物理接线讲究可以说非常相似。3.7 车载以太网对PHY接口的特殊要求车载以太网近年来用得很多和传统工业或消费以太网不同车载环境对PHY接口的要求更偏重可靠性和电磁兼容性。车载PHY通常支持100BASE-T1或1000BASE-T1单一差分对传输和普通RJ45接口的双绞线方案完全不同。但MAC侧接口仍然常用RMII或RGMII因此从MAC到PHY这一段的知识依然通用。车载以太网的测试实践中除了常规的物理层一致性测试还要做很多时序和抗干扰测试比如在射频干扰环境下观测数据误码率。这类测试对时钟稳定性的要求很高RMII的50MHz参考时钟质量直接决定接口能否通过测试。我建议在车载以太网的主板设计中50MHz时钟使用低抖动有源晶振并且REF_CLK走线要远离开关电源和高速数字信号必要时加屏蔽地孔保护。4. 常见问题与排查技巧实录4.1 PHY无法建立链路链路无法建立是PHY接口调试中最常见的问题。排查顺序建议这样走先用示波器量PHY的复位引脚确认复位时序正常再量MDC和MDIO确认能正确读写PHY寄存器然后看PHY状态寄存器里的链路状态位确认自协商是否完成最后检查MAC侧配置和PHY的接口类型是否一致。如果MDIO读不出ID优先怀疑PHY地址不对、MDIO上下拉没焊、或者MDC/MDIO接反。如果寄存器能读但链路状态始终显示断开检查网络变压器和RJ45接线有没有问题或者PHY的速率/双工强制配置是否与对端交换机一致。我遇到过一个比较隐蔽的情况PHY要配置成广播模式或特定自协商模式才能建立链路而驱动默认值不是这样。解决方法是先在PHY初始化脚本里强制设置BCR寄存器并把速度设置为100Mbps全双工测试通过后再推到自协商模式。4.2 高速流量下丢包链路能ping通但高速传输时丢包这种问题既可能出在接口层也可能在MAC驱动或内存缓冲上。如果是RGMII优先检查时钟延迟如果是RMII优先检查REF_CLK质量和走线如果是MII或GMII检查数据线等长和地平面完整性。丢包问题在FPGA项目里还有另一个可能MAC侧FIFO深度不够。如果RX FIFO只有几KB而PHY端连续高速到达的数据帧在短时间内超过FIFO容量丢包就不可避免。排查方法是在驱动里统计网卡接收错误计数如果err数持续增加多半是硬件缓冲问题如果err数不变但上层TCP丢包则需要看系统调度和中断处理。4.3 偶发性异常和复位后才恢复偶发性异常是我们这种长期干活的人最头疼的。特征是系统长时间运行正常但在某些特定操作后网络中断重启后又正常。这种问题通常是时序竞争或状态机残留导致的。一个典型场景RMII接口在插拔网线后MAC侧的CRS_DV信号状态没有正确清零导致MAC认为链路仍忙停止发送。解决方法是让驱动在检测到链路断开时将MAC收发起始寄存器复位并重新初始化DMA描述符同时在PHY芯片上做软复位。还有一个场景RGMII接口在从1000Mbps降速到100Mbps时PHY的RGMII时钟频率变化如果MAC没有响应时钟频率变化重新配置链路就中断了。许多PHY在速率变化前会通过中断通知MACMAC必须在中断处理中重新初始化接口不能只依赖链路状态轮询。4.4 系统层面“没有以太网”的现象有的场景是操作系统层面直接看不到以太网设备比如Win11没有以太网选项、系统认为电脑未建立以太网这类问题虽然不完全属于PHY接口调试范围但排查思路类似。先看驱动是否加载再看PHY是否被识别最后看接口速率协商结果。在嵌入式Linux里如果网卡设备名都没有出现先看设备树里的节点有没有被内核解析。用dmesg查看macb或stmmac驱动打印驱动会输出PHY ID和速度。如果驱动打印说PHY ID为0或ffff说明MDIO没访问到PHY按上面MDIO排查流程处理。重启Windows和重启Linux系统有时候也能解决PHY自协商状态残留的问题但更本质的办法是让驱动在链路变化时做完整复位而不是依赖系统层的“禁用再启用”。4.5 PHY接口排查速查表表现可能原因排查方向MDIO读不到PHY IDPHY地址不对、上拉漏焊、MDIO接反示波器抓MDIO/MDC时序对照数据手册地址引脚链路建立但ping不通MAC TX/RX接反、PHY地址失配、时钟频率不对检查MAC与PHY的TX/RX对应关系确认接口模式RGMII千兆协商失败时钟延迟未配置或配置错误配置rgmii-id或寄存器延迟实测波形100M正常但千兆丢包RGMII时钟延迟、PCB走线等长不佳优化走线增加内部延迟检查终端电阻高速流量丢包FIFO深度不足、DMA描述符太少、中断处理慢查看驱动统计增加缓冲优化中断复位后恢复的偶发故障状态机残留、CRS_DV状态未清零、PHY软复位不彻底链路断开时复位MAC和PHY5. 关于接口选择与调试的几点经验心得MII、RMII、GMII、RGMII这四种接口本身谈不上谁优谁劣它们对应着不同速率、不同引脚预算、不同PCB约束下的工程权衡。从我手上的项目看10/100Mbps产品用RMII是主流千兆产品用RGMII是主流MII和GMII更多是历史包袱或特殊需求才会选。真正决定项目成败的从来不是接口名字选得对不对而是时钟、复位、PHY配置这些细节落地得对不对。最后分享一个调PHY接口时非常实用的习惯开发板上电后先抓MDIO确认能稳定读出PHY ID再考虑链路建立。很多工程师一上来就调MAC驱动连PHY ID都没读到这样排查链路问题等于是在半空中找原因。MDIO是PHY芯片的“门牌号”门牌号都看不见房子里的设备状态自然也无从谈起。先把MDIO调通后面的问题至少能少一半。
返回列表