网卡驱动相关知识及移植

发布时间:2026/7/25 2:31:48
网卡驱动相关知识及移植 文章目录硬件硬件组成PHY 寄存器地址设备树实战创龙tl3588引脚分类及详细说明1. 电源引脚2. 管理接口SMI3. 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)硬件百兆4线千兆8线都是RJ45接口但是接的数量不一样硬件组成组成处理器 MAC 控制器 PHY网络变压器RJ45内部集成根据上面的有3种组合方式CPU 内部集成了 MAC 和 PHYCPU 内部集成 MAC PHY 采用独立芯片CPU 不集成 MAC 和 PHY MAC 和 PHY 采用独立芯片或者集成芯片PHY 芯片与MAC 控制器相连可以通过MII RMII GMII RGMII和 MIDO 接口数据读写MII 接口全称为 Media Independent Interface 即“介质独立接口”。 MII 接口的传输速率为10Mbps 或 100Mbps 在 100Mbps 下时钟为 25M 在 10Mbps 下钟为 2.5MRMII 接口全称为 Reduced Media Independent Interface 即“简化媒体独立接口” 它是 MII接口的简化版本。 所以相较于 MII 接口 RMII 接口在数据的发送与接收方面减少了一半的信号线GMII 接口全称为 Gigabit Media Independent Interface 即“千兆介质无关接口” 它是为了满足千兆以太网的高速数据传输需求而设计的接口。 在 10M/100M/1000M 下时钟分别是2.5M 25M 和 125MRGMII是 GMII 的简化版本。 将引脚数量从 GMII 的 25 个减少至 RGMII 的 14 个。 在10M/100M/1000M 下时钟分别是 2.5M 25M 和 125MMDIO 接口全称为 Management Data Input/Output 即管理数据输入输出接口。 主要功能是实现 MAC 控制器对 PHY 芯片的管理与控制 例如通过 MDIO 接口对 PHY 寄存器进行设置来配置工作速率 也能够通过读取 PHY 芯片的状态寄存器从而获取网口的状态。MDIO 接口属于同步串行半双工接口 由两根信号线构成 分别是MDIO:作为数据线 用于在 MAC 层和 PHY 层之间传输配置和管理数据。MDC 作为时钟线 为数据传输提供时钟同步RTL8211 芯片通过 MDI 接口与 RJ45 接口。 MAC 控制器通过 RGMII 接口和 MDIO 接口与 PHY 芯片连接PHY 寄存器在 802.3 规范中 对 PHY 芯片的前 16 个寄存器进行了规定。寄存器 0 是控制寄存器 用于配置 PHY 芯片的工作模式和参数。 可以通过控制寄存器设置芯片的传输速率10Mbps、 100Mbps 或 1000Mbps 、 双工模式全双工或半双工以及自动协商功能的开启或关闭等。寄存器 1 是状态寄存器 用于表示 PHY 芯片当前的工作状态。 比如 通过状态寄存器可以查看是否已经成功连接到网络、 是否检测到链路故障、 当前的传输速率和双工模式等信息等。寄存器 16 到 31 是扩展寄存器 寄存器 0 到 15 是 IEEE 802.3 规定的寄存器 不论使用哪个厂家的 PHY 芯片寄存器 0 到 15 是一摸一样的 所以一般情况下 使用 Linux 中通用的PHY 驱动即可驱动 PHY 芯片。 但是不同厂家的 PHY 芯片可能有额外特性的功能 所以扩展寄存器就是给 PHY 厂家自由发挥的寄存器。 也就是说只有用到这些特性功能时 才会涉及到扩展寄存器地址物理地址MAC 地址物理地址 也称为 MAC 地址 是网络设备的唯一标识符。 它由 48 位二进制数组成 通常用 12 位十六进制数表示 如 00:11:22:33:44:55IP 地址IP 地址是网络层的地址 用于在网络中标识设备的逻辑位置。 它分为 IPv4 和 IPv6 两种版本 IPv4 地址由 32 位二进制数组成 通常用点分十进制表示 如 192.168.1.1 IPv6 地址由 128 位二进制数组成。 IP 地址的主要作用是实现不同网络之间的通信 通过 IP 地址可以将数据包从源网络路由到目标网络。PHY 地址PHY 地址是用于在一个网络中唯一标识 PHY 芯片的地址。 在一个系统中 可能会有多个 PHY 芯片同时存在 通过 PHY 地址可以区分不同的 PHY 芯片 以便对它们进行单独的配置和管理设备树在设备树文件 gmac0 节点中 我们需要关注下面这几个属性。phy-mode 用于设置 MAC 和 PHY 的连接方式 如是 RMII 还是 RGMII 模式。snps,reset-gpio 设置 PHY 芯片的硬件复位脚。 可以使用 GPIO 作为 PHY 的复位引脚。snps,reset-delays-us PHY 芯片的复位时序 该属性有三个属性值分别表示 PHY 芯片的不同阶段的复位时序 如果搭配 snps,reset-active-low 属性 则表示三个时间分别表示 Reset pin脚拉高 拉低 再拉高的时间 如果搭配 snps,reset-active-high 属性 则反之实战创龙tl3588硬件使用YT8521SH 这个phy芯片RGMII原理图引脚分类及详细说明按功能模块分类对应你提供的引脚图编号1. 电源引脚引脚号引脚名称功能描述电气特性31DVDD33数字电路 3.3V 电源输入核心数字逻辑、接口电路3.3V±5%需接 0.1μF1μF 去耦电容30DVDD33_LX内置 1.1V 开关电源的电感连接端需外接电感到 GND仅接电感不可接其他器件12AVDD33模拟电路 3.3V 电源输入PHY 模拟前端、ADC/DAC3.3V±5%需接 0.1μF1μF 去耦电容22DVDDL/AVDDL数字 / 模拟低压电源输入通常为 1.8V/2.5V匹配 MAC 接口电平1.8V/2.5V±5%需接 0.1μF 去耦电容4/9/47AVDDL同 DVDDL/AVDDL多引脚并联以降低电源噪声同 DVDDL/AVDDL2. 管理接口SMI引脚号引脚名称功能描述电气特性14MDCSMI串行管理接口时钟引脚由 MAC 提供频率≤2.5MHz输入无内部上下拉15MDIOSMI 数据引脚双向用于 MAC 读写 PHY 寄存器开漏输入 / 输出需上拉 4.7KΩ 到 DVDDL34INT_N/PME_N复用引脚1. 工作时INT_NPHY 中断输出低电平有效2. 配置时PME_N电源管理事件输出开漏输出需上拉 4.7KΩ 到 DVDDL3. 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发送时钟125MHz1000M、25MHz100M、2.5MHz10M输出匹配 DVDDL 电平26RXD0/RXDLY复用1. 工作时RXD0接收数据位 02. 配置时RXDLY接收时钟延时使能输入匹配 DVDDL 电平25RXD1/CFG_MODE0复用1. 工作时RXD1接收数据位 12. 配置时CFG_MODE0工作模式配置位 0输入匹配 DVDDL 电平24RXD2/CFG_MODE1复用1. 工作时RXD2接收数据位 22. 配置时CFG_MODE1工作模式配置位 1输入匹配 DVDDL 电平23RXD3/CFG_MODE2复用1. 工作时RXD3接收数据位 32. 配置时CFG_MODE2工作模式配置位 2输入匹配 DVDDL 电平27RX_CTL/PHYAD2复用1. 工作时RX_CTL接收控制信号2. 配置时PHYAD2PHY 地址位 2输入匹配 DVDDL 电平28RX_CLK/PHYAD1复用1. 工作时RX_CLK接收时钟2. 配置时PHYAD1PHY 地址位 1输入匹配 DVDDL 电平6. 配置 / 状态引脚引脚号引脚名称功能描述电气特性36LED0/PHYAD0复用1. 工作时LED0链路状态指示灯2. 配置时PHYAD0PHY 地址位 0输出需串接限流电阻到 GND37LED1/CFG_LDO0复用1. 工作时LED1速率状态指示灯2. 配置时CFG_LDO0LDO 使能配置输出需串接限流电阻到 GND无LED2/CFG_LDO1通常为额外 LED 引脚复用 CFG_LDO1LDO 电压配置输出需串接限流电阻到 GND13RESET_N硬件复位引脚低电平有效复位时间≥10μs输入需上拉 4.7KΩ 到 DVDDL7. 时钟 / 其他引脚引脚号引脚名称功能描述电气特性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_MODE0RXD10RGMII 模式CFG_MODE0RXD11SGMII 模式CFG_MODE1RXD20电口模式CFG_MODE1RXD21光口模式PHYAD2:0000~111PHY 地址0~7由 PHYAD2/1/0 组合设备树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; };延迟tx_delay 0x37; rx_delay 0x12;这两个配置是RGMII 接口的信号延时补偿参数核心解决千兆以太网高频信号的同步问题是 Rockchip GMAC 针对 RGMII 模式的特有配置RGMII 是千兆以太网接口核心时钟频率达125MHz对应 1000Mbps 速率TX/RX 数据信号和时钟信号在 PCB 走线上会因走线长度、阻抗等产生纳秒 / 皮秒级延时导致数据和时钟 “不同步”比如数据到了时钟还没到或反之最终引发数据包丢包、CRC 错误。Rockchip GMAC 内置了可编程延时寄存器通过tx_delay/rx_delay配置寄存器值对信号做软件延时补偿让数据和时钟重新同步。逐参数详解配置项十六进制→十进制单位Rockchip 通用核心作用取值逻辑tx_delay 0x370x37 55步长≈20ps皮秒补偿 GMAC→YT8531SH-CA 的发送方向TX信号延时针对 RGMII_TX 总线TXD0~3、TX_CTL补偿这些信号线相对于 TX_CLK 的延时确保 TX 数据和 TX_CLK 同步到达 PHY。取值和 PCB 走线长度正相关走线越长延时值越大0x37 是调试后适配你硬件的最优值55×20ps1100ps1.1ns。rx_delay 0x120x12 18步长≈20ps皮秒补偿 YT8531SH-CA→GMAC 的接收方向RX信号延时针对 RGMII_RX 总线RXD0~3、RX_CTL补偿这些信号线相对于 RX_CLK 的延时确保 RX 数据和 RX_CLK 同步到达 GMAC。18×20ps360ps是接收侧走线的最优补偿值若取值过小会导致接收数据错误过大则丢包。延时步长不同 Rockchip 芯片如 RK3568/RK3399的延时 “步长” 不同比如 RK3568 是 1 步 20psRK3288 是 1 步 10ps需以芯片手册为准​ 取值不是固定值需根据实际 PCB 走线调试比如 ping 网关、iperf 打流测试逐步调整直到网络稳定​ 仅 RGMII 需要RMII 是百兆接口25MHz 时钟延时影响可忽略无需配置这两个参数。RGMII 时钟引脚配置(RXCLK,TXCLK)/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; };配置中clock_in_out output说明TX_CLK 由 GMAC 主动输出给 YT8531SH-CA所以 TX_CLK 引脚配置为 “复用为 GMAC_TX_CLK 功能 无上下拉”RGMII 数据 / 控制总线配置()/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; };核心作用配置 RGMII 总线的核心数据 / 控制引脚区别于你之前看到的tx_bus2,rx_bus2 通常是 RGMII 全量总线的汇总配置包含发送侧TXD0~34 位数据、TX_CTL发送控制gmac0_txen接收侧RXD0~34 位数据、RX_CTL接收控制gmac0_rxdv_crs。RGMII 是千兆接口比 RMII 多了 TXD2/3、RXD2/34 位数据所以这个节点包含10 个引脚复位gmac0_phy_reset: gmac0-phy-reset { rockchip,pins 3 RK_PB2 RK_FUNC_GPIO pcfg_pull_none; };ADD地址电路图一样但是实际262电阻是不贴的所以eth1是1地址Lan8720硬件引脚号引脚名称功能描述电气类型关键注意事项1VDD2A电源通道 23.3V 供电内部稳压器电源P电源需接 1μF 去耦电容到 GND靠近引脚布局2LED2/nINTSEL复用功能1. 复位时nINTSEL配置 nINT/REFCLKO 功能2. 工作时LED2100Mbps 速度指示灯IOPD输入 / 输出下拉→nINT/REFCLKO 为50MHz 时钟输出上拉→nINT/REFCLKO 为中断输出3LED1/REGOFF复用功能1. 复位时REGOFF配置内部 1.2V 稳压器2. 工作时LED1链路连接指示灯IOPD输入 / 输出下拉→启用内部 1.2V 稳压器上拉→禁用需外部给 VDDCR 提供 1.2V4XTAL225MHz 晶振输入端 2与 XTAL1 配合ICLK晶振输入接 25MHz 晶振一端若用外部 50MHz 时钟XTAL1 为 CLKIN此脚悬空5XTAL1/CLKIN复用功能1. 接 25MHz 晶振输入端 12. 外部 50MHz 时钟输入替代晶振ICLK晶振 / 时钟输入用晶振时接 25MHz 晶振用外部时钟时接 50MHz 时钟XTAL2 悬空6VDDCR1.2V 电源输入内部稳压器输出 / 外部输入P电源启用内部稳压器时接 1μF 去耦电容到 GND禁用时需外部提供 1.2V7RXD1/MODE1复用功能1. 复位时MODE1PHY 工作模式配置位 12. 工作时RXD1RMII 接收数据 1IOPU输入 / 输出复位时电平锁存为模式配置内部自带上拉正常工作为 MAC 的接收数据引脚8RXD0/MODE0复用功能1. 复位时MODE0PHY 工作模式配置位 02. 工作时RXD0RMII 接收数据 0IOPU输入 / 输出同 RXD1/MODE19VDDIOIO 电源1.6~3.6V与 MAC 侧 IO 电平匹配P电源需接 0.1μF 去耦电容到 GND10RXER/PHYAD0复用功能1. 复位时PHYAD0PHY 地址配置位 02. 工作时RXER接收错误信号IOPD输入 / 输出下拉→PHY 地址为 0上拉→地址为 1RMII 模式下 RXER 功能通常不用11CRS_DV/MODE2复用功能1. 复位时MODE2PHY 工作模式配置位 22. 工作时CRS_DV载波侦听 / 数据有效IOPU输入 / 输出复位时电平锁存为模式配置正常工作为 MAC 的载波侦听引脚12MDIOSMI站管理接口数据引脚MAC 与 PHY 的寄存器通信IOD输入 / 开漏输出需上拉电阻通常 4.7KΩ 到 VDDIO13MDCSMI 接口时钟引脚由 MAC 提供≤2.5MHzI8输入无内部上拉直接接 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 发送数据 0MAC 输出到 PHYI8输入接 MAC 的 TXD0 引脚18TXD1RMII 发送数据 1MAC 输出到 PHYI8输入接 MAC 的 TXD1 引脚19VDD1A电源通道 13.3V 供电模拟 / 数字电路电源P电源需接 1μF 去耦电容到 GND靠近引脚布局20TXN以太网差分发送负极接 RJ45 变压器AIO模拟双向需串联 49.9Ω 终端电阻靠近 PHY 布局21TXP以太网差分发送正极接 RJ45 变压器AIO模拟双向同 TXN22RXN以太网差分接收负极接 RJ45 变压器AIO模拟双向同 TXN23RXP以太网差分接收正极接 RJ45 变压器AIO模拟双向同 TXN24RBIAS偏置电阻引脚AI模拟输入必须接 12.1KΩ±1%电阻到 GND决定 PHY 的电流偏置设备树/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)clock_in_out “input”; //时钟为phy—macLED1复位时低电平就是inputLAN8720 的REFCLKO引脚可以配置为时钟输出模式当LED2引脚接下拉时此时 LAN8720 会通过内部倍频25MHz 晶振→50MHz将时钟从REFCLKO输出给 MAC。nRST 复位引脚时钟配置(REFCLKO)/omit-if-no-ref/ gmac1_clkinout: gmac1-clkinout { rockchip,pins /* gmac1_mclkinout */ 3 RK_PB6 1 pcfg_pull_none; };为什么是pull_none无上下拉因为 LAN8720 的REFCLKO引脚是主动输出 50MHz 时钟信号的属于 “推挽输出”外部上下拉会干扰时钟信号的完整性比如导致时钟边沿变缓、幅值异常所以必须配置为无上下拉。和clock_in_out input的关联clock_in_out input定义了 GMAC1 对该时钟的 “方向”接收输入而gmac1_clkinout定义了 “接收这个时钟的物理引脚”GPIO3_PB6及引脚特性两者是 “功能方向 物理载体” 的配套配置。硬件对应关系硬件上需要将 LAN8720 的nINT/REFCLKO引脚引脚 14直接连接到 GPIO3_PB6这段配置才能生效。引脚控制组/RMII接收(RXD0,RXD1,RXER,CSR)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)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; // 发送使能 };这段配置的核心是映射 GMAC1 的 RMII_TX 总线 3 个核心引脚TXD0/TXD1/TXEN到物理 GPIO3_PB3/PB4/PB5并配置为无上下拉的 GMAC 专用功能模式管理数据输入输出接口(MDC,MDIO)gmac1_miim: gmac1-miim { rockchip,pins /* gmac1_mdc */ 3 RK_PC2 1 pcfg_pull_none, /* gmac1_mdio */ 3 RK_PC3 1 pcfg_pull_none; };