1. Rockchip以太网硬件架构解析
第一次接触Rockchip平台的以太网开发时,我对着原理图上的MAC和PHY芯片发呆了半小时。后来才明白,Rockchip的SoC设计其实很贴心——它已经内置了以太网MAC控制器,我们只需要外接一颗PHY芯片就能组网。这就好比买了个自带电磁炉的厨房,你只需要配个锅就能做饭。
目前主流的有三种接口标准:
- MII/RMII:百兆以太网的经典配置,就像老式电话线,需要16根信号线
- RGMII:千兆以太网的标配,类似HDMI的高清传输,信号线减少到12根
- SGMII:更高速的串行接口,像USB那样用差分信号传输
在RK3399开发板上实测发现,RGMII接口的布线长度最好不要超过10cm。我曾经遇到过因为PCB走线过长导致网络丢包的情况,后来调整到7cm就稳定了。硬件设计时要注意:
- 阻抗匹配控制在50Ω±10%
- 时钟信号要远离高频干扰源
- 电源滤波电容要靠近PHY芯片放置
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. DTS配置全解析
2.1 基础参数配置
第一次配置DTS时,我被phy-mode参数搞晕了。后来通过示波器抓波形才发现,这个参数直接影响MAC和PHY的握手协议。常见的配置模式有:
dts复制phy-mode = "rgmii"; // 千兆模式
phy-mode = "rmii"; // 百兆模式
时钟方向配置是个容易踩坑的点:
dts复制clock_in_out = "input"; // 由PHY提供时钟
clock_in_out = "output"; // 由SoC提供时钟
实测发现,RK3568平台使用RTL8211F PHY时,必须设置为input模式,否则会出现DMA初始化失败。这是因为PHY芯片的时钟精度比SoC内部PLL产生的更稳定。
2.2 延时参数调优
tx/rx_delay参数就像交通信号灯的时序控制,我通过反复测试总结出这些经验值:
| PHY型号 | tx_delay | rx_delay | 适用场景 |
|---|---|---|---|
| RTL8211E | 0x30 | 0x10 | 工业级设备 |
| KSZ9031 | 0x28 | 0x15 | 消费电子产品 |
| LAN8720A | 不需要 | 不需要 | 百兆网络 |
调试技巧:
- 先用默认值测试ping延迟
- 以5为步长调整delay值
- 用iperf测试吞吐量变化
2.3 电源与复位配置
遇到过最头疼的问题是PHY偶尔初始化失败,最后发现是电源时序问题。正确的配置应该是:
dts复制power-gpio = <&gpio0 GPIO_A6 GPIO_ACTIVE_HIGH>;
reset-gpio = <&gpio3 GPIO_B0 GPIO_ACTIVE_LOW>;
关键点:
- 电源使能后至少延迟100ms再释放复位
- 复位信号保持低电平至少10ms
- 使用示波器确认时序符合PHY规格书要求
3. 典型问题排查指南
3.1 PHY初始化失败
上周调试RK3588时遇到PHY无法识别,通过以下步骤解决:
-
检查硬件连接
- 测量电源电压(通常3.3V±5%)
- 确认MDIO/MDC信号波形
- 检查复位信号时序
-
软件调试
bash复制# 查看PHY寄存器 echo 1 > /sys/class/mdio_bus/stmmac-0/phy_reg cat /sys/class/mdio_bus/stmmac-0/phy_reg_value -
常见错误码:
- 0xFFFF:MDIO通信失败
- 0x0000:PHY未响应
- 其他值:对比PHY手册确认ID
3.2 网络吞吐量低
在智能NVR项目中发现千兆网络只能跑到300Mbps,通过调整这些参数解决:
-
优化DMA缓冲区大小
c复制ethtool -G eth0 rx 4096 tx 4096 -
调整中断亲和性
bash复制echo 3 > /proc/irq/eth0/smp_affinity -
关闭节能模式
dts复制phy-handle = <&phy0>; phy0: ethernet-phy@0 { marvell,reg-init = <3 16 0 0x1017>; };
4. 高级调试技巧
4.1 时钟质量分析
用示波器测量125MHz时钟时,要注意这些参数:
- 峰峰值电压 ≥ 3.0V
- 抖动 ≤ 50ps
- 上升时间 ≤ 1ns
遇到时钟问题时可以尝试:
dts复制&gmac_clkin {
clock-frequency = <125000000>;
assigned-clock-parents = <&cru CLK_GMAC_125M>;
};
4.2 信号完整性测试
准备工具:
- 100MHz以上示波器
- 高阻抗探头
- 飞线测试点
测试步骤:
- 测量TX_CLK/RX_CLK的时序余量
- 检查数据信号的眼图张开度
- 确认信号过冲不超过10%
4.3 驱动调试技巧
在驱动中添加调试打印:
c复制pr_debug("GMAC: reg[%02x]=%04x\n", reg, value);
启用调试日志:
bash复制echo 8 > /proc/sys/kernel/printk
dmesg | grep gmac
5. 实战案例分享
最近在RK3566工控板上调试双网卡时,发现以下配置要点:
- 主网卡(外接PHY)配置:
dts复制gmac0: ethernet@fe010000 {
compatible = "rockchip,rk3566-gmac";
phy-mode = "rgmii";
clock_in_out = "input";
tx_delay = <0x25>;
rx_delay = <0x12>;
};
- 内置PHY网卡配置:
dts复制gmac1: ethernet@fe020000 {
phy-mode = "rmii";
clock_in_out = "output";
};
关键发现:
- 两个GMAC时钟必须独立配置
- 中断号不能冲突
- DMA缓冲区需要分开分配
