1. 从MAC-PHY到MAC-MAC架构的转变在嵌入式网络设备开发中我们经常会遇到需要调整网络架构的场景。这次我遇到的情况比较典型原本的主控芯片AST1520通过MAC控制器连接PHY芯片现在需要改为连接RTL8367交换芯片实现MAC-MAC架构。这种改动看似简单实际操作中却有不少坑要踩。首先得理解这两种架构的本质区别。传统的MAC-PHY架构中MAC控制器负责数据链路层PHY芯片负责物理层两者分工明确。而改用交换芯片后相当于在MAC控制器和外部网络之间插入了一个智能交换机。RTL8367这类交换芯片内部集成了多个MAC和PHY模块可以看作是一个网络子系统。硬件连接上我们需要将AST1520的RGMII接口直接连接到交换芯片的MAC端口。这里有个关键点RGMII的时序要求非常严格。我刚开始用飞线连接时千兆模式下完全无法通信后来降到10M模式才勉强能工作。实测发现在低速模式下时序容错性更好这对调试初期很有帮助。2. MDIO协议与交换芯片控制要让Linux内核和uboot能够控制RTL8367必须先搞定通信接口。这颗交换芯片支持I2C、SPI和MDIO三种控制接口考虑到AST1520的uboot已经内置了MDIO操作命令phyw/phyr我们优先选择MDIO方案。MDIO协议是管理PHY设备的标准接口但用在交换芯片上有些特殊之处。标准的PHY芯片只有16个基础寄存器而RTL8367这样的交换芯片需要通过特殊方式访问扩展寄存器。具体来说它的寄存器访问分为两层通过标准MDIO命令访问PHY伪寄存器通过特定的伪寄存器间接访问芯片的实际控制寄存器在uboot中测试MDIO读写时我发现一个实用技巧使用phyr命令读取PHY的BASIC CONTROL寄存器地址0x00这个寄存器包含了链路状态、自动协商等基本信息。如果连这个都读不出来说明MDIO通信根本没建立。3. 硬件调试实战经验在实际硬件调试中我遇到了几个典型问题这里分享下排查过程首先是时钟问题。RTL8367需要125MHz参考时钟这个时钟必须稳定。我用示波器测量时发现飞线引入的干扰导致时钟抖动很大。临时解决方案是在uboot中将时钟频率降到25MHz对应100Mbps模式等PCB改版后再恢复。其次是数据信号完整性问题。在ping测试失败时我通过示波器抓取了RGMII数据线波形发现TX数据有但RX无响应。仔细检查发现一根RX数据线虚焊重新焊接后问题解决。这里有个经验千兆模式下数据眼图必须清晰完整任何微小的信号质量问题都会导致通信失败。最后是延时参数调整。RTL8367支持RX/TX延时调整在硬件布线不理想时特别有用。通过修改以下寄存器可以优化时序# 设置RX延时单位0.1ns phyw mac 0x1e 0x1234 # 设置TX延时 phyw mac 0x1f 0x56784. Linux内核驱动适配要点将uboot的调试成果移植到Linux 2.4.6内核时需要注意几个关键点首先是MDIO驱动框架。2.4.6内核的MDIO支持比较原始需要手动实现mii_bus结构体操作。下面是一个基本的读写函数示例static int rtl8367_mdiobus_read(struct mii_bus *bus, int phy_id, int regnum) { /* 实现具体的MDIO读取 */ return val; } static int rtl8367_mdiobus_write(struct mii_bus *bus, int phy_id, int regnum, u16 value) { /* 实现MDIO写入 */ return 0; }其次是网络设备注册。由于采用了MAC-MAC架构我们需要修改网络驱动让它识别交换芯片的存在。关键修改点在eth_open函数中需要跳过PHY检测环节。最后是速度/双工模式设置。在ethtool_ops中实现自定义的设置函数因为标准PHY设置不适用于交换芯片。实测发现直接操作以下寄存器可以强制设置速率# 强制100M全双工 phyw mac 0x04 0x21005. 常见问题排查指南根据我的调试经验整理了几个常见问题及解决方法MDIO通信失败检查MDIO引脚配置是否正确测量MDC时钟是否正常典型频率2.5MHz尝试降低通信速率测试网络不通但链路灯亮检查RGMII时序参数验证交换芯片的端口映射是否正确抓取RGMII数据线波形分析性能不稳定检查PCB布线长度是否匹配调整RX/TX延时参数验证时钟抖动是否在允许范围内在调试交换芯片时我强烈建议准备一个已知正常的参考设计比如厂商demo板通过对比测试可以快速定位问题。比如我发现RTL8367的PORT5 LED指示灯闪烁模式异常通过对比demo板的行为最终发现是端口映射寄存器配置错误。调试网络设备最考验耐心有时候一个小问题可能要排查好几天。我的经验是先确保硬件连接可靠再验证底层通信正常最后才考虑软件配置问题。按照这个顺序排查可以少走很多弯路。