[RK-Linux] 移植Linux-5.10到RK3399(六)| 检查GMAC(RTL8211F)配置使能千兆以太网

本文详细介绍了在ROC-RK3399-PC Pro上移植Linux-5.10时,如何检查和配置GMAC(基于RTL8211F)以实现千兆以太网功能。内容包括RTL8211F的特点、MAC控制器特性,以及配置过程,包括延迟线窗口扫描以优化性能。

ROC-RK3399-PC Pro 使用 RTL8211F PHY 芯片作为以太网收发器。

RTL8211F是一种高性能的千兆以太网物理层收发器(PHY),广泛用于台式机、笔记本电脑、网络交换机等设备中。主要特点:

  • 采用低功耗28nm CMOS技术,功耗低。
  • 支持千兆速率(10/100/1000Mbps)。
  • 支持全双工和半双工模式。
  • 支持自协商功能,可以自动协商最佳速率和工作模式。
  • 支持远端故障检测(Remote Fault Detection, RFD),可实现链路故障的快速定位。
  • 支持自适应均衡(Adaptive Equalization, AEQ)和自适应时钟同步(Adaptive Clock Synchronization, ACS),有效提高数据传输的稳定性和可靠性。
  • 支持Jumbo Frame,可实现更高的数据吞吐量。
  • 支持EEE(Energy Efficient Ethernet)功能,可降低功耗。
  • 支持多种低功耗模式,如Auto Power Down (APD)、Power Saving Mode (PSM)等,可进一步降低功耗。

RK3399芯片中集成的千兆以太网MAC(Media Access Control)控制器,它提供了高性能、可靠、低功耗以太网连接。

以下是主要特点:

  • 支持IEEE 802.3、IEEE 802.3u、IEEE 802.3ab标准。
  • 支持全双工和半双工模式,支持自适应速率和自适应协商功能。
  • 支持最大传输单元(
<think>我们正在调试RK3576 Android 14平台上的RTL8211F-CG网络芯片。RTL8211F-CG是一款千兆以太网PHY芯片,需要正确配置硬件和软件才能工作。以下步骤将指导我们完成调试过程。 ### 一、硬件设计检查 1. **电源和复位电路** - 检查VDD33(3.3V)、VDDIO(1.8V/2.5V/3.3V)和VDD12(1.2V)电源是否稳定,电压波动需在±5%以内。 - 确认复位信号(RST#)在上电后保持高电平(有效状态为低电平复位)。 2. **MDI接口(网络变压器)** - 确保TX±/RX±差分线对通过网络变压器连接至RJ45接口,差分阻抗为100Ω。 - 检查中心抽头是否接正确电压(通常为3.3V或2.5V)。 3. **时钟电路** - RTL8211F需要25MHz晶振或外部时钟输入,测量时钟频率偏差需小于±50ppm。 4. **管理接口(MDC/MDIO)** - 确认MDC(时钟)、MDIO(数据)线连接至RK3576的MAC控制器,上拉电阻4.7kΩ至VDDIO。 ### 二、设备树(DTS)配置RK3576的DTS文件中添加以太网节点,参考RK3568的配置风格[^2]: ```dts &gmac1 { phy-mode = "rgmii"; // 根据实际连接选择模式(RGMII/RMII) clock_in_out = "output"; // PHY提供时钟给MAC snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; // 复位引脚 snps,reset-active-low; // 低电平复位 snps,reset-delays-us = <0 10000 50000>; // 复位时序:延时0us, 复位10ms, 释放后延时50ms assigned-clocks = <&cru SCLK_GMAC1_RX_TX>; // 时钟分配 assigned-clock-parents = <&cru CLK_MAC1_2TOP>; // 时钟源 pinctrl-names = "default"; pinctrl-0 = <&gmac1_miim &gmac1_tx_bus2 &gmac1_rx_bus2 &gmac1_rgmii_clk &gmac1_rgmii_bus>; // 引脚复用 phy-handle = <&rgmii_phy1>; // 指向PHY节点 status = "okay"; }; mdio1 { compatible = "snps,dwmac-mdio"; #address-cells = <1>; #size-cells = <0>; rgmii_phy1: phy@0 { // PHY地址,根据硬件设计设置(0~31) compatible = "ethernet-phy-id001c.c916"; // RTL8211F的ID reg = <0x0>; // PHY地址 phy-is-integrated; // 可选,表示PHY集成在MAC中 reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; // 复位引脚(与MAC节点一致) reset-assert-us = <10000>; // 复位时间10ms reset-deassert-us = <50000>; // 复位释放后延时50ms }; }; ``` **关键参数说明**: - `phy-mode`:必须与硬件连接一致(如RGMII、RMII)。 - `snps,reset-gpio`:PHY复位引脚,需与硬件原理图一致。 - `reg`:PHY的MDIO地址,由硬件设计决定(通常为0~31)。 - `reset-assert-us`和`reset-deassert-us`:确保复位时序满足PHY芯片要求(参考RTL8211F手册)。 ### 三、驱动配置 RTL8211F驱动在内核中通常位于: ```bash drivers/net/phy/realtek.c ``` 确认该驱动已编译进内核(`CONFIG_REALTEK_PHY=y`)。 ### 四、调试步骤 1. **检查PHY识别** 通过内核日志确认PHY是否被正确识别: ```bash adb shell dmesg | grep -i ethernet ``` 成功识别时输出: ```log gmac1: probed r8169 0000:01:00.0 eth0: RTL8211F at 0xffff9234c200, 00:11:22:33:44:55, IRQ 123 ``` 2. **测试MDIO通信** 使用`mdio-tool`验证与PHY的通信: ```bash adb shell mdio-tool -w eth0 0x0 # 读取PHY ID寄存器(地址0x0) ``` 正常应返回`0x001cc916`(RTL8211F的OUI)。 3. **网络功能测试** - 连接网线后执行: ```bash adb shell ifconfig eth0 up adb shell udhcpc -i eth0 # 获取IP地址 ping www.baidu.com ``` 4. **双工模式与速度** 若连接速度异常(如卡在100Mbps),检查- 硬件布线是否满足千兆要求(差分对等长±100mil内)。 - 在DTS中强制设置速度(不推荐): ```dts rgmii_phy1: phy@0 { max-speed = <1000>; // 强制千兆 }; ``` ### 五、常见问题解决 | **现象** | **解决方案** | |------------------------|-----------------------------------------------------------------------------| | **PHY无法识别** | 1. 检查MDC/MDIO线路通断和上拉<br>2. 确认`reg`地址与硬件一致<br>3. 测量复位信号时序 | | **连接速度仅为100Mbps** | 1. 检查RGMII信号质量(用示波器测量TX/RX时钟)<br>2. 更换网线或网络变压器 | | **频繁断连** | 1. 检查电源纹波(<50mV)<br>2. 在DTS中增加`rx_delay`和`tx_delay`参数[^2] | ### 、硬件设计建议 1. **RGMII布线规则** - TX/RX数据线长度差≤100mil,时钟线长度误差≤200mil。 - 远离高频信号(如USB/HDMI),避免串扰。 2. **电源滤波** - VDD33:并联10μF钽电容+100nF陶瓷电容。 - VDD12:使用LDO供电,纹波<30mV。 > 完成上述步骤后,RTL8211F应能正常工作。若仍失败,需用示波器测量RGMII信号时序是否符合规范。 --- ### §§相关问题§§ 1. RK3576的RGMII接口电气特性参数是什么? 2. 如何通过MDIO修改RTL8211F的内部寄存器? 3. RK3576 Android 14中如何配置以太网唤醒(Wake-on-LAN)? 4. RTL8211F的节能模式(EEE)如何启用? [^1]: RK3568-B2-ANDROID11-WIFI-RTL8821CU [^2]: rk3566-安卓11-千兆网卡 rtl8211f 移植 [^3]: RK3568平台(网络篇)WIFI模块RTL8821CU调试 [^4]: rk3399 Android 10.0调试 rtl8723ds 芯片</think>### RK3576 Android 14 调试 RTL8211F-CG 网络芯片指南 #### 一、硬件设计检查(关键基础) 1. **电源与复位电路** - 确认 **VDD33(3.3V)**、**VDDIO(1.8V/2.5V/3.3V)** 和 **VDD12(1.2V)** 电源稳定(波动≤±5%) - 检查复位信号(RST#)时序:上电后保持低电平至少10ms(参考RTL8211F手册)[^2] 2. **MDI接口与网络变压器** - 差分线对(TX±/RX±)需100Ω阻抗匹配,长度偏差≤100mil - 网络变压器中心抽头电压需与PHY配置一致(通常3.3V或2.5V) 3. **管理接口(MDC/MDIO)** - 确认MDC时钟频率≤2.5MHz(默认1.6MHz) - MDIO需4.7kΩ上拉至VDDIO #### 二、设备树(DTS)配置 在 `rk3576.dtsi` 中添加以太网节点(参考RK3566/RK3568设计[^2][^4]): ```dts &gmac1 { status = "okay"; phy-mode = "rgmii"; // 根据硬件连接选择模式 clock_in_out = "output"; // PHY提供时钟给MAC snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; // 复位引脚 snps,reset-active-low; snps,reset-delays-us = <0 10000 50000>; // 复位时序: 延时0us,复位10ms,释放后延时50ms assigned-clocks = <&cru SCLK_GMAC1_RX_TX>; // 时钟分配 assigned-clock-parents = <&cru CLK_MAC1_2TOP>; // 时钟源 pinctrl-names = "default"; pinctrl-0 = <&gmac1_miim &gmac1_tx_bus2 &gmac1_rx_bus2 &gmac1_rgmii_clk &gmac1_rgmii_bus>; // 引脚复用 }; &mdio1 { status = "okay"; rgmii_phy: phy@0 { // PHY地址需根据硬件设计修改 compatible = "ethernet-phy-id001c.c916"; // RTL8211F ID reg = <0x0>; // MDIO地址 reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; // 与MAC节点一致 reset-assert-us = <10000>; // 复位时间10ms reset-deassert-us = <50000>; // 复位释放延时 }; }; ``` #### 三、驱动层配置 1. **内核配置** 启用RTL8211F驱动: ```bash Device Drivers → Network device support → PHY Device support → Drivers for Realtek PHYs → [*] Realtek RTL8211F PHY ``` 2. **LED模式配置(解决单灯问题)** 修改驱动文件 `drivers/net/phy/realtek.c`: ```c // 在 rtl8211f_config_init() 函数中添加: phy_write(phydev, RTL8211F_PAGE_SELECT, 0xd04); // 切到LED控制页 phy_write(phydev, 0x10, 0x617f); // 配置双LED模式(黄+绿) phy_write(phydev, RTL8211F_PAGE_SELECT, 0x0); // 切回默认页 ``` 参考RTL8211F手册寄存器配置[^2] #### 四、调试步骤 1. **硬件信号检测** ```bash adb shell "cat /sys/kernel/debug/regulator/regulator_summary" # 检查PHY供电 adb shell "ifconfig eth0 up" # 启用网口 ``` - 用示波器测量: - **25MHz时钟**:抖动≤100ps - **RGMII信号**:上升/下降时间≤1ns 2. **MDIO寄存器调试** 使用 `mdio-tool` 读写PHY寄存器: ```bash adb shell mdio-tool -w eth0 0x1f 0x0d04 # 切到LED控制页(0xd04) adb shell mdio-tool -w eth0 0x10 0x617f # 写LED控制寄存器 adb shell mdio-tool -r eth0 0x10 # 读寄存器值 ``` 3. **网络功能测试** ```bash adb shell ping -I eth0 8.8.8.8 adb shell iperf3 -c <server_ip> -i 1 -t 10 # 千兆带宽测试 ``` #### 五、常见问题解决 | **现象** | **解决方案** | |------------------------|-----------------------------------------------------------------------------| | **PHY无法识别** | 1. 检查MDC/MDIO通断和上拉<br>2. 确认`reg`地址与硬件一致<br>3. 测量复位信号时序 | | **仅黄灯亮** | 配置PHY寄存器`0x10`的LED模式(参考0x617f值)[^2] | | **千兆模式不稳定** | 1. 检查RGMII信号等长(偏差≤100mil)<br>2. 在DTS中增加`rx_delay`和`tx_delay`参数 | | **热插拔后不识别** | 在DTS中增加 `reset-delays-us = <0 20000 100000>;` 延长复位时间 | #### 、硬件设计建议 1. **PCB布局** - RGMII信号走线长度≤2000mil,组内等长差≤100mil - 电源滤波:VDD33并联10μF钽电容+100nF陶瓷电容 2. **网络变压器** - 选用支持1Gbps的型号(如HX5008NL) - 中心抽头电压与PHY配置一致(通过`phy-supply`指定) > 通过上述步骤完成调试后,使用`ethtool eth0`确认连接状态: > ``` > Speed: 1000Mb/s > Duplex: Full > Link detected: yes > ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值