网卡驱动相关知识及移植

文章目录

  • 硬件
  • 硬件组成
  • PHY 寄存器
    • 地址
    • 设备树
  • 实战(创龙tl3588)
    • 引脚分类及详细说明
      • 1. 电源引脚
      • 2. 管理接口(SMI)
      • 3. SerDes 接口(SGMII / 光口模式)
      • 4. 以太网差分接口(电口模式)
      • 5. MAC 接口(RGMII 模式)
      • 6. 配置 / 状态引脚
      • 7. 时钟 / 其他引脚
      • 8.关键复用功能配置表
    • 设备树
      • 延迟
      • RGMII 时钟引脚配置(RXCLK,TXCLK)
      • RGMII 数据 / 控制总线配置()
      • 复位
      • ADD地址
  • Lan8720
    • 硬件
    • 设备树
      • 时钟方向(LED1,XTAL1,XTAL2,nRST)
      • 时钟配置(REFCLKO)
      • 引脚控制组/RMII接收(RXD0,RXD1,RXER,CSR)
      • RMII发送(TXD0,tXD1,TXEN)
      • 管理数据输入输出接口(MDC,MDIO)

硬件

  1. 百兆(4线)
  2. 千兆(8线)
  3. 都是RJ45接口,但是接的数量不一样

硬件组成

组成:处理器, MAC 控制器, PHY,网络变压器(RJ45内部集成)

  1. 根据上面的有3种组合方式

    1. CPU 内部集成了 MAC 和 PHY

    2. CPU 内部集成 MAC, PHY 采用独立芯片

    3. CPU 不集成 MAC 和 PHY, MAC 和 PHY 采用独立芯片或者集成芯片

  2. PHY 芯片MAC 控制器相连可以通过MII, RMII, GMII, RGMII和 MIDO 接口(数据读写)

    1. MII 接口全称为 Media Independent Interface, 即“介质独立接口”。 MII 接口的传输速率为10Mbps 或 100Mbps, 在 100Mbps 下时钟为 25M, 在 10Mbps 下钟为 2.5M

    2. RMII 接口全称为 Reduced Media Independent Interface, 即“简化媒体独立接口” , 它是 MII接口的简化版本。 所以相较于 MII 接口, RMII 接口在数据的发送与接收方面减少了一半的信号线

    3. GMII 接口全称为 Gigabit Media Independent Interface, 即“千兆介质无关接口” , 它是为了满足千兆以太网的高速数据传输需求而设计的接口。 在 10M/100M/1000M 下时钟分别是2.5M, 25M 和 125M

    4. RGMII是 GMII 的简化版本。 将引脚数量从 GMII 的 25 个减少至 RGMII 的 14 个。 在
      10M/100M/1000M 下时钟分别是 2.5M, 25M 和 125M

    5. MDIO 接口全称为 Management Data Input/Output, 即管理数据输入输出接口。 主要功能是实现 MAC 控制器对 PHY 芯片的管理与控制, 例如通过 MDIO 接口对 PHY 寄存器进行设置来配置工作速率; 也能够通过读取 PHY 芯片的状态寄存器从而获取网口的状态。

      1. MDIO 接口属于同步串行半双工接口, 由两根信号线构成, 分别是:
        1. MDIO:作为数据线, 用于在 MAC 层和 PHY 层之间传输配置和管理数据。
        2. MDC: 作为时钟线, 为数据传输提供时钟同步
  3. RTL8211 芯片通过 MDI 接口与 RJ45 接口。 MAC 控制器通过 RGMII 接口和 MDIO 接口与 PHY 芯片连接

PHY 寄存器

在 802.3 规范中, 对 PHY 芯片的前 16 个寄存器进行了规定。

  1. 寄存器 0 是控制寄存器: 用于配置 PHY 芯片的工作模式和参数。 可以通过控制寄存器设置芯片的传输速率(10Mbps、 100Mbps 或 1000Mbps) 、 双工模式(全双工或半双工)以及自动协商功能的开启或关闭等。
  2. 寄存器 1 是状态寄存器: 用于表示 PHY 芯片当前的工作状态。 比如, 通过状态寄存器可以查看是否已经成功连接到网络、 是否检测到链路故障、 当前的传输速率和双工模式等信息等。
  3. 寄存器 16 到 31 是扩展寄存器: 寄存器 0 到 15 是 IEEE 802.3 规定的寄存器, 不论使用哪个厂家的 PHY 芯片,寄存器 0 到 15 是一摸一样的, 所以一般情况下, 使用 Linux 中通用的PHY 驱动即可驱动 PHY 芯片。 但是不同厂家的 PHY 芯片可能有额外特性的功能, 所以扩展寄存器就是给 PHY 厂家自由发挥的寄存器。 也就是说只有用到这些特性功能时, 才会涉及到扩展寄存器

地址

  1. 物理地址(MAC 地址)
    1. 物理地址, 也称为 MAC 地址, 是网络设备的唯一标识符。 它由 48 位二进制数组成, 通常用 12 位十六进制数表示, 如 00:11:22:33:44:55
  2. IP 地址
    1. IP 地址是网络层的地址, 用于在网络中标识设备的逻辑位置。 它分为 IPv4 和 IPv6 两种版本, IPv4 地址由 32 位二进制数组成, 通常用点分十进制表示, 如 192.168.1.1; IPv6 地址由 128 位二进制数组成。 IP 地址的主要作用是实现不同网络之间的通信, 通过 IP 地址可以将数据包从源网络路由到目标网络。
  3. PHY 地址
    1. PHY 地址是用于在一个网络中唯一标识 PHY 芯片的地址。 在一个系统中, 可能会有多个 PHY 芯片同时存在, 通过 PHY 地址可以区分不同的 PHY 芯片, 以便对它们进行单独的配置和管理

设备树

  1. 在设备树文件 gmac0 节点中, 我们需要关注下面这几个属性。
    1. phy-mode: 用于设置 MAC 和 PHY 的连接方式, 如是 RMII 还是 RGMII 模式。
    2. snps,reset-gpio: 设置 PHY 芯片的硬件复位脚。 可以使用 GPIO 作为 PHY 的复位引脚。
    3. snps,reset-delays-us: PHY 芯片的复位时序, 该属性有三个属性值分别表示 PHY 芯片的不同阶段的复位时序, 如果搭配 snps,reset-active-low 属性, 则表示三个时间分别表示 Reset pin脚拉高, 拉低, 再拉高的时间; 如果搭配 snps,reset-active-high 属性, 则反之

实战(创龙tl3588)

  1. 硬件

    1. 使用YT8521SH 这个phy芯片(RGMII)

    2. 原理图

引脚分类及详细说明

按功能模块分类,对应你提供的引脚图编号:

1. 电源引脚

引脚号引脚名称功能描述电气特性
31DVDD33数字电路 3.3V 电源输入(核心数字逻辑、接口电路)3.3V±5%,需接 0.1μF+1μF 去耦电容
30DVDD33_LX内置 1.1V 开关电源的电感连接端(需外接电感到 GND)仅接电感,不可接其他器件
12AVDD33模拟电路 3.3V 电源输入(PHY 模拟前端、ADC/DAC)3.3V±5%,需接 0.1μF+1μF 去耦电容
22DVDDL/AVDDL数字 / 模拟低压电源输入(通常为 1.8V/2.5V,匹配 MAC 接口电平)1.8V/2.5V±5%,需接 0.1μF 去耦电容
4/9/47AVDDL同 DVDDL/AVDDL,多引脚并联以降低电源噪声同 DVDDL/AVDDL

2. 管理接口(SMI)

引脚号引脚名称功能描述电气特性
14MDCSMI(串行管理接口)时钟引脚(由 MAC 提供,频率≤2.5MHz)输入,无内部上下拉
15MDIOSMI 数据引脚(双向,用于 MAC 读写 PHY 寄存器)开漏输入 / 输出,需上拉 4.7KΩ 到 DVDDL
34INT_N/PME_N复用引脚:1. 工作时:INT_N(PHY 中断输出,低电平有效)2. 配置时:PME_N(电源管理事件输出)开漏输出,需上拉 4.7KΩ 到 DVDDL

3. SerDes 接口(SGMII / 光口模式)

引脚号引脚名称功能描述电气特性
38HSIPSerDes 高速差分输入正极(SGMII / 光口模式下,接收数据)差分输入,需 50Ω 阻抗匹配
39HSINSerDes 高速差分输入负极差分输入,需 50Ω 阻抗匹配
40HSOPSerDes 高速差分输出正极(SGMII / 光口模式下,发送数据)差分输出,需 50Ω 阻抗匹配
41HSONSerDes 高速差分输出负极差分输出,需 50Ω 阻抗匹配

4. 以太网差分接口(电口模式)

引脚号引脚名称功能描述电气特性
2TRXP0电口差分发送正极(1000Base-T/100Base-TX 模式下,连接 RJ45 变压器 TX+)差分输出,串联 49.9Ω 终端电阻
3TRXN0电口差分发送负极(连接 RJ45 变压器 TX-)差分输出,串联 49.9Ω 终端电阻
5TRXP1电口差分接收正极(连接 RJ45 变压器 RX+)差分输入,串联 49.9Ω 终端电阻
6TRXN1电口差分接收负极(连接 RJ45 变压器 RX-)差分输入,串联 49.9Ω 终端电阻
7/8/10/11TRXP2/TRXN2/TRXP3/TRXN31000Base-T 模式下的额外差分对(支持 4 对双绞线传输)差分输入 / 输出,需 100Ω 差分阻抗

5. MAC 接口(RGMII 模式)

引脚号引脚名称功能描述(RGMII 模式)电气特性
19TXD0发送数据位 0输出,匹配 DVDDL 电平
18TXD1发送数据位 1输出,匹配 DVDDL 电平
17TXD2发送数据位 2输出,匹配 DVDDL 电平
16TXD3发送数据位 3输出,匹配 DVDDL 电平
20TX_CTL发送控制信号(RGMII 的 TX_EN/TX_ER 复用)输出,匹配 DVDDL 电平
21TX_CLK发送时钟(125MHz@1000M、25MHz@100M、2.5MHz@10M)输出,匹配 DVDDL 电平
26RXD0/RXDLY复用:1. 工作时:RXD0(接收数据位 0)2. 配置时:RXDLY(接收时钟延时使能)输入,匹配 DVDDL 电平
25RXD1/CFG_MODE0复用:1. 工作时:RXD1(接收数据位 1)2. 配置时:CFG_MODE0(工作模式配置位 0)输入,匹配 DVDDL 电平
24RXD2/CFG_MODE1复用:1. 工作时:RXD2(接收数据位 2)2. 配置时:CFG_MODE1(工作模式配置位 1)输入,匹配 DVDDL 电平
23RXD3/CFG_MODE2复用:1. 工作时:RXD3(接收数据位 3)2. 配置时:CFG_MODE2(工作模式配置位 2)输入,匹配 DVDDL 电平
27RX_CTL/PHYAD2复用:1. 工作时:RX_CTL(接收控制信号)2. 配置时:PHYAD2(PHY 地址位 2)输入,匹配 DVDDL 电平
28RX_CLK/PHYAD1复用:1. 工作时:RX_CLK(接收时钟)2. 配置时:PHYAD1(PHY 地址位 1)输入,匹配 DVDDL 电平

6. 配置 / 状态引脚

引脚号引脚名称功能描述电气特性
36LED0/PHYAD0复用:1. 工作时:LED0(链路状态指示灯)2. 配置时:PHYAD0(PHY 地址位 0)输出,需串接限流电阻到 GND
37LED1/CFG_LDO0复用:1. 工作时:LED1(速率状态指示灯)2. 配置时:CFG_LDO0(LDO 使能配置)输出,需串接限流电阻到 GND
(无)LED2/CFG_LDO1通常为额外 LED 引脚,复用 CFG_LDO1(LDO 电压配置)输出,需串接限流电阻到 GND
13RESET_N硬件复位引脚(低电平有效,复位时间≥10μs)输入,需上拉 4.7KΩ 到 DVDDL

7. 时钟 / 其他引脚

引脚号引脚名称功能描述电气特性
44CLKOUT时钟输出(可选 25MHz/125MHz,给 MAC 提供参考时钟)输出,匹配 DVDDL 电平
46XTAL_O晶振输出端(接 25MHz 晶振一端)晶振输出,需接 25MHz 无源晶振
45XTAL_I晶振输入端(接 25MHz 晶振另一端)晶振输入,需接 25MHz 无源晶振
32LX内置 LDO 的电感连接端(同 DVDD33_LX)仅接电感,不可接其他器件
48RBIAS偏置电阻引脚(必须接 12.1KΩ±1% 电阻到 GND,决定 PHY 电流偏置)模拟输入,高精度电阻
49GND接地引脚(多引脚并联,需保证接地阻抗低)接地
33/42/43Reserved/NC保留引脚 / 空引脚(不可连接任何信号)悬空

8.关键复用功能配置表

部分引脚在复位时锁存电平,决定 PHY 默认工作模式:

引脚(配置功能)电平(上拉 = 1 / 下拉 = 0)功能说明
CFG_MODE0(RXD1)0RGMII 模式
CFG_MODE0(RXD1)1SGMII 模式
CFG_MODE1(RXD2)0电口模式
CFG_MODE1(RXD2)1光口模式
PHYAD(2:0)000~111PHY 地址(0~7,由 PHYAD2/1/0 组合)

设备树

  1. gmac0 { /omit-if-no-ref/ gmac0_miim: gmac0-miim { rockchip,pins = /* gmac0_mdc */ <4 RK_PC4 1 &pcfg_pull_none>, /* gmac0_mdio */ <4 RK_PC5 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_clkinout: gmac0-clkinout { rockchip,pins = /* gmac0_mclkinout */ <4 RK_PC3 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_rx_bus2: gmac0-rx-bus2 { rockchip,pins = /* gmac0_rxd0 */ <2 RK_PC1 1 &pcfg_pull_none>, /* gmac0_rxd1 */ <2 RK_PC2 1 &pcfg_pull_none>, /* gmac0_rxdv_crs */ <4 RK_PC2 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_tx_bus2: gmac0-tx-bus2 { rockchip,pins = /* gmac0_txd0 */ <2 RK_PB6 1 &pcfg_pull_none>, /* gmac0_txd1 */ <2 RK_PB7 1 &pcfg_pull_none>, /* gmac0_txen */ <2 RK_PC0 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_rgmii_clk: gmac0-rgmii-clk { rockchip,pins = /* gmac0_rxclk */ <2 RK_PB0 1 &pcfg_pull_none>, /* gmac0_txclk */ <2 RK_PB3 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_rgmii_bus: gmac0-rgmii-bus { rockchip,pins = /* gmac0_rxd2 */ <2 RK_PA6 1 &pcfg_pull_none>, /* gmac0_rxd3 */ <2 RK_PA7 1 &pcfg_pull_none>, /* gmac0_txd2 */ <2 RK_PB1 1 &pcfg_pull_none>, /* gmac0_txd3 */ <2 RK_PB2 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_ppsclk: gmac0-ppsclk { rockchip,pins = /* gmac0_ppsclk */ <2 RK_PC4 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_ppstring: gmac0-ppstring { rockchip,pins = /* gmac0_ppstring */ <2 RK_PB5 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_ptp_refclk: gmac0-ptp-refclk { rockchip,pins = /* gmac0_ptp_refclk */ <2 RK_PB4 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_txer: gmac0-txer { rockchip,pins = /* gmac0_txer */ <4 RK_PC6 1 &pcfg_pull_none>; }; }; &gmac0 { phy-mode = "rgmii-rxid"; clock_in_out = "output"; phy-handle = <&rgmii_phy0>; snps,reset-gpio = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; snps,reset-delays-us = <20000 20000 100000>; snps,reset-active-low; tx_delay = <0x37>; rx_delay = <0x12>; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&gmac0_miim &gmac0_tx_bus2 &gmac0_rx_bus2 &gmac0_rgmii_clk &gmac0_rgmii_bus &gmac0_phy_reset>; }; gmac0_phy_reset: gmac0-phy-reset { rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; };

延迟

  1. tx_delay = <0x37>; rx_delay = <0x12>;
  2. 这两个配置是RGMII 接口的信号延时补偿参数,核心解决千兆以太网高频信号的同步问题,是 Rockchip GMAC 针对 RGMII 模式的特有配置:

    RGMII 是千兆以太网接口,核心时钟频率达125MHz(对应 1000Mbps 速率),TX/RX 数据信号和时钟信号在 PCB 走线上会因走线长度、阻抗等产生纳秒 / 皮秒级延时,导致数据和时钟 “不同步”(比如数据到了,时钟还没到,或反之),最终引发数据包丢包、CRC 错误。Rockchip GMAC 内置了可编程延时寄存器,通过tx_delay/rx_delay配置寄存器值,对信号做软件延时补偿,让数据和时钟重新同步。

  3. 逐参数详解

    配置项十六进制→十进制单位(Rockchip 通用)核心作用取值逻辑
    tx_delay = <0x37>0x37 = 55步长≈20ps(皮秒)补偿 GMAC→YT8531SH-CA 的发送方向(TX)信号延时:针对 RGMII_TX 总线(TXD0~3、TX_CTL),补偿这些信号线相对于 TX_CLK 的延时,确保 TX 数据和 TX_CLK 同步到达 PHY。取值和 PCB 走线长度正相关:走线越长,延时值越大;0x37 是调试后适配你硬件的最优值(55×20ps=1100ps=1.1ns)。
    rx_delay = <0x12>0x12 = 18步长≈20ps(皮秒)补偿 YT8531SH-CA→GMAC 的接收方向(RX)信号延时:针对 RGMII_RX 总线(RXD0~3、RX_CTL),补偿这些信号线相对于 RX_CLK 的延时,确保 RX 数据和 RX_CLK 同步到达 GMAC。18×20ps=360ps,是接收侧走线的最优补偿值,若取值过小会导致接收数据错误,过大则丢包。
  4. 延时步长:不同 Rockchip 芯片(如 RK3568/RK3399)的延时 “步长” 不同(比如 RK3568 是 1 步 = 20ps,RK3288 是 1 步 = 10ps),需以芯片手册为准;

​ 取值不是固定值:需根据实际 PCB 走线调试(比如 ping 网关、iperf 打流测试),逐步调整直到网络稳定;

​ 仅 RGMII 需要:RMII 是百兆接口(25MHz 时钟),延时影响可忽略,无需配置这两个参数。

RGMII 时钟引脚配置(RXCLK,TXCLK)

  1. /omit-if-no-ref/ gmac0_rgmii_clk: gmac0-rgmii-clk { rockchip,pins = /* gmac0_rxclk */ <2 RK_PB0 1 &pcfg_pull_none>, /* gmac0_txclk */ <2 RK_PB3 1 &pcfg_pull_none>; };
  2. 配置中clock_in_out = "output",说明TX_CLK 由 GMAC 主动输出给 YT8531SH-CA,所以 TX_CLK 引脚配置为 “复用为 GMAC_TX_CLK 功能 + 无上下拉”;

RGMII 数据 / 控制总线配置()

  1. /omit-if-no-ref/ gmac0_rx_bus2: gmac0-rx-bus2 { rockchip,pins = /* gmac0_rxd0 */ <2 RK_PC1 1 &pcfg_pull_none>, /* gmac0_rxd1 */ <2 RK_PC2 1 &pcfg_pull_none>, /* gmac0_rxdv_crs */ <4 RK_PC2 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac0_tx_bus2: gmac0-tx-bus2 { rockchip,pins = /* gmac0_txd0 */ <2 RK_PB6 1 &pcfg_pull_none>, /* gmac0_txd1 */ <2 RK_PB7 1 &pcfg_pull_none>, /* gmac0_txen */ <2 RK_PC0 1 &pcfg_pull_none>; }; gmac0_rgmii_bus: gmac0-rgmii-bus { rockchip,pins = /* gmac0_rxd2 */ <2 RK_PA6 1 &pcfg_pull_none>, /* gmac0_rxd3 */ <2 RK_PA7 1 &pcfg_pull_none>, /* gmac0_txd2 */ <2 RK_PB1 1 &pcfg_pull_none>, /* gmac0_txd3 */ <2 RK_PB2 1 &pcfg_pull_none>; };
  2. 核心作用

    配置 RGMII 总线的核心数据 / 控制引脚(区别于你之前看到的tx_bus2,rx_bus2 通常是 RGMII 全量总线的汇总配置),包含:

    • 发送侧:TXD0~3(4 位数据)、TX_CTL(发送控制gmac0_txen);
    • 接收侧:RXD0~3(4 位数据)、RX_CTL(接收控制gmac0_rxdv_crs)。
  3. RGMII 是千兆接口,比 RMII 多了 TXD2/3、RXD2/3(4 位数据),所以这个节点包含10 个引脚

复位

  1. gmac0_phy_reset: gmac0-phy-reset { rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; };

ADD地址

电路图一样,但是实际262电阻是不贴的,所以eth1是1地址

Lan8720

硬件

引脚号引脚名称功能描述电气类型关键注意事项
1VDD2A电源通道 2,3.3V 供电(内部稳压器电源)P(电源)需接 1μF 去耦电容到 GND,靠近引脚布局
2LED2/nINTSEL复用功能:1. 复位时:nINTSEL(配置 nINT/REFCLKO 功能)2. 工作时:LED2(100Mbps 速度指示灯)IOPD(输入 / 输出)下拉→nINT/REFCLKO 为50MHz 时钟输出;上拉→nINT/REFCLKO 为中断输出
3LED1/REGOFF复用功能:1. 复位时:REGOFF(配置内部 1.2V 稳压器)2. 工作时:LED1(链路连接指示灯)IOPD(输入 / 输出)下拉→启用内部 1.2V 稳压器;上拉→禁用(需外部给 VDDCR 提供 1.2V)
4XTAL225MHz 晶振输入端 2(与 XTAL1 配合)ICLK(晶振输入)接 25MHz 晶振一端;若用外部 50MHz 时钟(XTAL1 为 CLKIN),此脚悬空
5XTAL1/CLKIN复用功能:1. 接 25MHz 晶振输入端 12. 外部 50MHz 时钟输入(替代晶振)ICLK(晶振 / 时钟输入)用晶振时接 25MHz 晶振;用外部时钟时接 50MHz 时钟,XTAL2 悬空
6VDDCR1.2V 电源输入(内部稳压器输出 / 外部输入)P(电源)启用内部稳压器时,接 1μF 去耦电容到 GND;禁用时需外部提供 1.2V
7RXD1/MODE1复用功能:1. 复位时:MODE1(PHY 工作模式配置位 1)2. 工作时:RXD1(RMII 接收数据 1)IOPU(输入 / 输出)复位时电平锁存为模式配置,内部自带上拉;正常工作为 MAC 的接收数据引脚
8RXD0/MODE0复用功能:1. 复位时:MODE0(PHY 工作模式配置位 0)2. 工作时:RXD0(RMII 接收数据 0)IOPU(输入 / 输出)同 RXD1/MODE1
9VDDIOIO 电源,1.6~3.6V(与 MAC 侧 IO 电平匹配)P(电源)需接 0.1μF 去耦电容到 GND
10RXER/PHYAD0复用功能:1. 复位时:PHYAD0(PHY 地址配置位 0)2. 工作时:RXER(接收错误信号)IOPD(输入 / 输出)下拉→PHY 地址为 0;上拉→地址为 1;RMII 模式下 RXER 功能通常不用
11CRS_DV/MODE2复用功能:1. 复位时:MODE2(PHY 工作模式配置位 2)2. 工作时:CRS_DV(载波侦听 / 数据有效)IOPU(输入 / 输出)复位时电平锁存为模式配置;正常工作为 MAC 的载波侦听引脚
12MDIOSMI(站管理接口)数据引脚(MAC 与 PHY 的寄存器通信)IOD(输入 / 开漏输出)需上拉电阻(通常 4.7KΩ 到 VDDIO)
13MDCSMI 接口时钟引脚(由 MAC 提供,≤2.5MHz)I8(输入)无内部上拉,直接接 MAC 的 MDC 引脚
14nINT/REFCLKO复用功能(由 LED2/nINTSEL 配置):1. 时钟输出:50MHz RMII 参考时钟2. 中断输出:低电平有效中断O8(输出)时钟输出时需接 MAC 的 RMII 时钟输入;中断输出时接 MAC 的中断引脚
15nRST硬件复位引脚(低电平有效)I8(输入)复位时间需≥10μs;通常接 MCU 的 GPIO,复位时序需匹配(如用户 DTS 中的延迟配置)
16TXENRMII 发送使能(MAC 输出,指示 TXD0/1 有效)IPD(输入)接 MAC 的 TXEN 引脚
17TXD0RMII 发送数据 0(MAC 输出到 PHY)I8(输入)接 MAC 的 TXD0 引脚
18TXD1RMII 发送数据 1(MAC 输出到 PHY)I8(输入)接 MAC 的 TXD1 引脚
19VDD1A电源通道 1,3.3V 供电(模拟 / 数字电路电源)P(电源)需接 1μF 去耦电容到 GND,靠近引脚布局
20TXN以太网差分发送负极(接 RJ45 变压器)AIO(模拟双向)需串联 49.9Ω 终端电阻,靠近 PHY 布局
21TXP以太网差分发送正极(接 RJ45 变压器)AIO(模拟双向)同 TXN
22RXN以太网差分接收负极(接 RJ45 变压器)AIO(模拟双向)同 TXN
23RXP以太网差分接收正极(接 RJ45 变压器)AIO(模拟双向)同 TXN
24RBIAS偏置电阻引脚AI(模拟输入)必须接 12.1KΩ(±1%)电阻到 GND,决定 PHY 的电流偏置

设备树

  1. /omit-if-no-ref/ gmac1_miim: gmac1-miim { rockchip,pins = /* gmac1_mdc */ <3 RK_PC2 1 &pcfg_pull_none>, /* gmac1_mdio */ <3 RK_PC3 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac1_clkinout: gmac1-clkinout { rockchip,pins = /* gmac1_mclkinout */ <3 RK_PB6 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac1_rx_bus2: gmac1-rx-bus2 { rockchip,pins = /* gmac1_rxd0 */ <3 RK_PA7 1 &pcfg_pull_none>, /* gmac1_rxd1 */ <3 RK_PB0 1 &pcfg_pull_none>, /* gmac1_rxdv_crs */ <3 RK_PB1 1 &pcfg_pull_none>; }; /omit-if-no-ref/ gmac1_tx_bus2: gmac1-tx-bus2 { rockchip,pins = /* gmac1_txd0 */ <3 RK_PB3 1 &pcfg_pull_none>, /* gmac1_txd1 */ <3 RK_PB4 1 &pcfg_pull_none>, /* gmac1_txen */ <3 RK_PB5 1 &pcfg_pull_none>; }; &gmac1 { phy-mode = "rmii"; phy-handle = <&rgmii_phy1>; clock_in_out = "input"; //时钟为,phy—>mac snps,reset-gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; snps,reset-delays-us = <100 30000 100000>; snps,reset-active-low; pinctrl-names = "default"; pinctrl-0 = <&gmac1_miim &gmac1_rx_bus2 &gmac1_tx_bus2 &gmac1_clkinout>; status = "okay"; }; &rgmii_phy1 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <1>; };

时钟方向(LED1,XTAL1,XTAL2,nRST)

  1. clock_in_out = “input”; //时钟为,phy—>mac
  2. LED1:复位时低电平,就是input
    1. LAN8720 的REFCLKO引脚可以配置为时钟输出模式(当LED2引脚接下拉时):此时 LAN8720 会通过内部倍频(25MHz 晶振→50MHz),将时钟从REFCLKO输出给 MAC。
  3. nRST 复位引脚

时钟配置(REFCLKO)

  1. /omit-if-no-ref/ gmac1_clkinout: gmac1-clkinout { rockchip,pins = /* gmac1_mclkinout */ <3 RK_PB6 1 &pcfg_pull_none>; };
  2. 为什么是pull_none(无上下拉):因为 LAN8720 的REFCLKO引脚是主动输出 50MHz 时钟信号的,属于 “推挽输出”,外部上下拉会干扰时钟信号的完整性(比如导致时钟边沿变缓、幅值异常),所以必须配置为无上下拉。

  3. clock_in_out = "input"的关联clock_in_out = "input"定义了 GMAC1 对该时钟的 “方向”(接收输入),而gmac1_clkinout定义了 “接收这个时钟的物理引脚”(GPIO3_PB6)及引脚特性,两者是 “功能方向 + 物理载体” 的配套配置。

  4. 硬件对应关系:硬件上需要将 LAN8720 的nINT/REFCLKO引脚(引脚 14)直接连接到 GPIO3_PB6,这段配置才能生效。

引脚控制组/RMII接收(RXD0,RXD1,RXER,CSR)

  1. gmac1_rx_bus2: gmac1-rx-bus2 { rockchip,pins = /* gmac1_rxd0 */ <3 RK_PA7 1 &pcfg_pull_none>, /* gmac1_rxd1 */ <3 RK_PB0 1 &pcfg_pull_none>, /* gmac1_rxdv_crs */ <3 RK_PB1 1 &pcfg_pull_none>; };

RMII发送(TXD0,tXD1,TXEN)

  1. gmac1_tx_bus2: gmac1-tx-bus2 { rockchip,pins = /* gmac1_txd0 */ <3 RK_PB3 1 &pcfg_pull_none>, // 发送数据位0 /* gmac1_txd1 */ <3 RK_PB4 1 &pcfg_pull_none>, // 发送数据位1 /* gmac1_txen */ <3 RK_PB5 1 &pcfg_pull_none>; // 发送使能 };
  2. 这段配置的核心是映射 GMAC1 的 RMII_TX 总线 3 个核心引脚(TXD0/TXD1/TXEN)到物理 GPIO3_PB3/PB4/PB5,并配置为无上下拉的 GMAC 专用功能模式;

管理数据输入输出接口(MDC,MDIO)

  1. gmac1_miim: gmac1-miim { rockchip,pins = /* gmac1_mdc */ <3 RK_PC2 1 &pcfg_pull_none>, /* gmac1_mdio */ <3 RK_PC3 1 &pcfg_pull_none>; };