问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

RK356x-7:以太网RTL8211配置和调试指南

创作时间:
作者:
@小白创作中心

RK356x-7:以太网RTL8211配置和调试指南

引用
CSDN
1.
https://blog.csdn.net/weixin_42098934/article/details/143571774

本文将详细介绍RK356x-7系列芯片中以太网RTL8211的配置和调试过程。通过本文,读者将了解如何根据电路板原理图选择合适的接口模式,如何在dts文件中进行相应的配置,以及在遇到问题时如何进行调试。

相关文件

  1. 开发帮助文档
    相关开发帮助文档位于目录docs/cn/Common/GMAC下:
  • Rockchip_Developer_Guide_Linux_GMAC_CN.pdf

  • Rockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN.pdf

  • Rockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_CN.pdf

    这三个文件非常重要,将在后续配置过程中用到。

  1. 驱动文件
    驱动文件分为GMAC(芯片接口)和PHY(以太网模块)两部分:
  • GMAC驱动文件位于drivers/net/ethernet/stmicro/stmmac/目录下,具体文件为dwmac-rk.c。其中的rk_gmac_dwmac_match结构体用于匹配dts文件中的compatible字段。
  • PHY驱动文件位于drivers/net/phy/目录下。在板级文件中配置CONFIG_NETDEVICES=y后,drivers/net/phy/Kconfig文件会默认打开REALTEK_PHY,使得realtek.c得以编译和应用,这就是RTL8211的驱动文件。

模式确认

以太网芯片通常支持MII、RMII、GMII、RGMII等接口模式。RK356x-7主要支持RMII和RGMII模式。通过查看电路板原理图,并对照Rockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN.pdf,可以确认需要配置的模式。

经过对比,电路图对应的是RGMII Crystal 25M for PHY, RGMII_CLK input 125M for TX_CLK,且接在芯片的GMAC1M0口。

dts配置

根据开发文档和原理图,需要对dts文件进行如下配置:

  1. 打开gmac1节点(设置状态为okay)。
  2. 将gmac1模式设为rgmii,input。
  3. 由于数据接口是GMAC1M0,因此pinctrl-0所有引脚必须是gmac1m0。
  4. 设置phy-handle为rgmii_phy1,并在节点&mdio1中修改rgmii_phy1协议为ethernet-phy-ieee802.3-c22。
  5. PHY(RTL8211)的复位引脚是PHYRSTB,原理图上接的芯片引脚GMAC1_RSTn是GPIO3_C6,因此需要配置snps,reset-gpio

最终的dts配置如下:

&gmac1 {
    phy-mode = "rgmii";
    clock_in_out = "input";
    snps,reset-gpio = <&gpio3 RK_PC6 GPIO_ACTIVE_LOW>;
    snps,reset-active-low;
    /* Reset time is 20ms, 100ms for rtl8211f */
    snps,reset-delays-us = <0 100000 500000>;
    assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
    //assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru CLK_MAC1_2TOP>;
    assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&gmac1_clkin>;
    assigned-clock-rates = <0>, <125000000>;
    pinctrl-names = "default";
    pinctrl-0 = <&gmac1m0_miim
             &gmac1m0_tx_bus2
             &gmac1m0_rx_bus2
             &gmac1m0_rgmii_clk
             &gmac1m0_rgmii_bus
             &gmac1m0_clkinout>;
    tx_delay = <0x4f>;
    rx_delay = <0x25>;
    phy-handle = <&rgmii_phy1>;
    status = "okay";
};

完成上述配置后,编译烧录运行,插上网线到以太网接口,运行命令ip a,应该可以看到网络IP。

调试

如果在第3节运行系统后发现ip a无法获取IP,但有一个eth0节点,这可能表示驱动不对。需要检查和修改驱动代码:

  1. 在驱动文件kernel/drivers/net/phy/realtek.c中,找到结构体realtek_drvs。如果以太网芯片是RTL8211F,找到对应的ID(如0x001cc916),并将其添加到realtek_tbl中:

    static const struct mdio_device_id __maybe_unused realtek_tbl[] = {
        ...
        { PHY_ID_MATCH_VENDOR(0x001cc916) },
        {}
    };
    
  2. 如果仍然无法获取IP,检查驱动是否正常加载:

    cd /sys/bus/platform/devices/fe010000.ethernet/net/eth0
    

    如果不存在这个目录,说明驱动不正常,需要继续检查dts文件配置。

  3. 检查eth0是否打开:

    cat /sys/devices/platform/fe010000.ethernet/net/eth0/carrier
    

    如果结果是0,表示eth0没有打开,需要执行命令打开:

    ifconfig eth0 up
    

    此时再去执行cat结果应该是1了。

  4. 确认eth0打开后,启动DHCP服务:

    dhcpcd
    

    再次执行ip a命令,应该可以看到IP地址。

一般的根文件系统会自动打开eth0并启动DHCP,但手动调试时需要确保这些步骤都正确执行。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号
RK356x-7:以太网RTL8211配置和调试指南