RK3568双网口配置踩坑记:GMAC0和GMAC1的RMII模式DTS设置详解

发布时间:2026/6/7 11:06:19

RK3568双网口配置踩坑记:GMAC0和GMAC1的RMII模式DTS设置详解 RK3568双网口实战RMII模式下的时钟树冲突与DTS配置精要第一次在RK3568上同时启用GMAC0和GMAC1时我遇到了一个诡异的现象——当第二个网口配置完成后原本正常的第一个网口突然失去了连接。这个看似简单的双网口配置背后隐藏着时钟树分配、引脚复用优先级等一系列坑。本文将带你深入RK3568的双GMAC内部机制分享从原理到实践的完整解决方案。1. RMII模式下的时钟架构解析RK3568的两个GMAC控制器在RMII模式下共享相同的50MHz时钟源但它们的时钟分配路径却存在关键差异。GMAC0的时钟来自内部PLL生成的SCLK_GMAC0_RMII_SPEED而GMAC1则直接依赖外部输入的gmac1_clkin。// GMAC0时钟配置示例 assigned-clocks cru SCLK_GMAC0_RX_TX, cru SCLK_GMAC0; assigned-clock-parents cru SCLK_GMAC0_RMII_SPEED;这种差异导致了一个常见问题当开发者简单复制GMAC0的配置到GMAC1时会忽略时钟源的独立性要求。我在调试过程中发现错误的时钟分配会导致以下典型症状网口PHY芯片能检测到但无法建立链路ifconfig显示接口UP但无法收发数据包dmesg中出现failed to reset the dma等错误2. 双网口DTS配置的关键对比通过对比GMAC0和GMAC1的完整DTS配置我们可以梳理出几个必须特别注意的参数差异配置项GMAC0GMAC1clock-parentsSCLK_GMAC0_RMII_SPEEDSCLK_GMAC1_RMII_SPEED gmac1_clkinpinctrl组gmac0_miim等gmac1m1_miim等reset-gpioGPIO2_D3GPIO2_D1phy-handlermii_phy0rmii_phy1特别需要注意的是pinctrl组的命名规则GMAC1使用了gmac1m1_前缀而非gmac1_这是因为RK3568的GMAC1支持多种引脚复用方案m0/m1模式。我在第一次配置时就因为忽略了这点导致TX/RX信号线未能正确映射。3. 调试技巧与问题诊断当双网口出现异常时系统级的诊断方法比盲目修改DTS更有效。以下是我总结的调试流程检查PHY状态# 查看PHY寄存器 mdio-tool -r eth0 0x1 | grep 0x1 # 验证链路状态 ethtool eth0分析时钟分配# 查看时钟树当前配置 cat /sys/kernel/debug/clk/clk_summary | grep gmac验证引脚复用# 确认GPIO复用状态 cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins注意当两个网口共用同一个PHY芯片时需要特别检查phy-mode是否配置为rmii而非默认的rgmii4. 避坑清单与最佳实践经过多次项目实践我整理出以下必须检查的要点时钟冲突预防确保gmac1_clkin节点已正确定义50MHz频率不要将GMAC1的assigned-clock-parents指向内部PLL电源管理陷阱// 必须添加的配置项 gmac0: gmac0 { ... phy-supply vcc_phy; pinctrl-0 gmac0_power; };复位时序优化snps,reset-delays-us 0 20000 100000; // 复位脉冲宽度至少20msDMA缓冲区设置rx-fifo-depth 4096; tx-fifo-depth 4096;实际项目中我还遇到过PCB布局导致的信号完整性问题。当网口工作不稳定时建议用示波器检查RMII接口的CLK和DATA信号质量特别是当两个网口长距离并行走线时。5. 性能优化进阶技巧在确保基本功能正常后可以通过以下配置提升双网口性能gmac0: gmac0 { ... // 启用硬件校验和卸载 rx-crc crc32; tx-crc crc32; // 调整中断亲和性 interrupts GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH, GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH; };对于需要精确时间同步的应用建议启用PTP时间戳功能ptp-clock ptp; ptp { compatible rockchip,rk3568-ptp; status okay; };最后提醒一点在量产环境中建议在uboot阶段就初始化网口PHY可以通过添加以下环境变量实现setenv bootargs ... phydevduplex,phyaddr0,speed100

相关新闻