Rockchip RGMII与Marvell mv88e6390管理型交换机VLAN定制及MAC绑定实战指南

1. 硬件连接与基础调试:让设备“活”起来

搞嵌入式网络设备开发,尤其是像RK3399这种高性能主控搭配Marvell mv88e6390这种管理型交换机的方案,第一步永远不是写代码,而是确保硬件能“通”。我见过太多项目卡在第一步,板子焊好了,系统跑起来了,但网络就是不通,ping都ping不到,那种感觉真是让人头大。所以,咱们先别急着搞什么VLAN、MAC绑定这些高级功能,老老实实把物理层和数据链路层打通,这才是最实在的。

咱们这个方案的核心连接是RK3399的RGMII接口直连mv88e6390交换机的Port 0。RGMII是个好东西,它用更少的信号线(相比GMII)实现了千兆速率,但同时也带来了时序要求更严格的问题。RGMII接口本身不集成PHY,它需要外接一个PHY芯片或者直接连接到另一个支持RGMII的交换芯片上,我们这里就是后者。mv88e6390的Port 0配置为RGMII模式,这就相当于CPU的“网卡”和交换机的“上行口”直接对话了。

拿到板子第一步干什么?先别上系统!我的习惯是,先用万用表量一下电源和复位信号是否正常,确保芯片没被焊坏或者供电不足。然后,最朴素但有效的一步:把mv88e6390当成一个傻瓜交换机来用。具体操作是,暂时先不管RK3399那边,找一台电脑,用网线连接到mv88e6390的任何一个其他电口(比如Port 1到Port 10中的任意一个),再把另一台电脑或路由器连接到另一个电口。如果这两台设备能互相ping通,或者能从上级路由器获取到IP地址,那就恭喜你,至少证明交换芯片本身、晶振、电源这些基础电路是好的。这一步排除了很多低级硬件故障,比如晶振没起振、芯片虚焊等等。

傻瓜交换机模式验证通过后,我们就要面对第一个挑战:RGMII的链路协商。因为RK3399的GMAC和mv88e6390的Port 0是直接对接的,中间没有标准的以太网PHY芯片去完成自协商(Auto-Negotiation)过程。所以,我们必须手动将两端的速率和双工模式强制设置为一致,通常就是强制千兆全双工。如果一边是自协商,另一边是强制模式,或者两边强制模式不匹配,链路是绝对起不来的。

在RK3399这边,我们需要在设备树(Device Tree)里配置GMAC节点。关键参数是 phy-mode 要设置为 “rgmii”,并且要禁用PHY的存在。通常需要添加一个“fixed-link”的属性来模拟一个千兆全双工的PHY。一个简化的配置示例如下:

&gmac {
    phy-mode = "rgmii";
    snps,reset-gpio = <&gpio4 RK_PD3 GPIO_ACTIVE_LOW>;
    snps,reset-active-low;
    snps,reset-delays-us = <0 10000 50000>;

    /* 强制千兆全双工,因为没有外部PHY */
    fixed-link {
        speed = <1000>;
        full-duplex;
    };
};

而在mv88e6390这边,配置同样关键。我们需要通过它的管理接口(通常是MDIO/MDC,接在RK3399的另一个MAC或GPIO模拟的I2C/SPI上)来配置Port 0。需要将Port 0的接口模式设置为RGMII,并且同样禁用自协商,强制为千兆全双工。这部分配置通常会在后续的交换机驱动初始化中完成,但心里要清楚这个逻辑。

怎么验证RGMII链路是否真的建立起来了呢?一个非常直观的硬件方法是用示波器去测量RGMII的时钟线(RXC和TXC)的频率。这是最直接的证据:

  • 如果测到时钟频率是 2.5MHz,那链路跑在10Mbps模式。
  • 如果测到 25MHz,那是100Mbps模式。
  • 只有测到 125MHz,才说明千兆链路成功建立了。

如果系统启动后,你在ifconfig -a里看到了eth0(或者你指定的网络接口名)出现,那说明驱动加载和基础链路可能没问题。但先别高兴太早,接着用tcpdump -i eth0命令抓一下包。如果你只看到大量的发送(TX)包,而几乎没有接收(RX)包,或者反之,那很可能是RGMII的时序不对,需要调整TX和RX的延迟(Delay)。在RK3399的设备树里,就是调整 tx_delayrx_delay 这两个参数。这两个值需要根据PCB布线长度和信号质量来微调,原厂给的参考值(比如原文中的tx_delay = <0x2f>; rx_delay = <0x24>;)是个不错的起点,但很可能需要你围绕这个值前后尝试。调整一次,重启一次,观察收发包是否平衡,直到能稳定地收到广播包(比如ARP请求)为止。

当时序调通,链路起来后,就可以尝试用udhcpc -i eth0命令去获取IP地址了。如果能成功拿到IP,那么恭喜你,最艰难的第一步已经迈过去了,RK3399和mv88e6390之间的数据高速公路已经通车。

2. 深入RGMII时序与时钟配置的“坑”

上一步我们提到了调整tx_delayrx_delay来解决收发包不平衡的问题,这一节咱们就深挖一下这个“坑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值