1、MAE0621A-Q3C介绍联芸科技的MAE0621A-Q3CI是符合10Base-T100Base-TX和1000Base-T IEEE 802.3标准的高度集成的以太网收发器。它提供了通过CAT.5 UTP电缆发送和接收以太网数据包的所有必要的物理层功能。 MAE0621A-Q3I符合工业级标准。MAE0621A-Q3CI使用先进DSP和模拟前端AFE技术通过UTP电缆实现高速数据传输。在 MAE0621A-Q3CI中具备诸如交叉检测和自动校正极性校正自适应均衡串扰消除回波消除定时恢复和纠错的功能提高数据传输的准确性和可靠性。MAC和PHY之间的1000Base-T10Base-T和100Base-TX数据传输是通过RGMII接口实现的。MAE0621A-Q3CI支持多种RGMII信号电压包括3.32.51.8V。附件芯片管脚图2、移植过程2.1 配置内核1. 拷贝 maxio.c 到目录 linux-6.1/drivers/net/phy/2. 编辑linux-6.1/drivers/net/phy/Makefile, 增加obj-$(CONFIG_MAE0621_PHY) maxio.o3. 编辑linux-6.1/drivers/net/phy/Kconfig, 增加config MAXIO_PHY tristate MAXIO PHYs help Supports the Maxio MAExxxx PHY.4. 编辑kernel/arch/arm64/configs/xxx_defconfig , 增加CONFIG_MAXIO_PHYy5.合入patch文件patch文件中记录了对 /drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 文件的一处修改 -3232,6 3236,20 int stmmac_resume(struct device *dev) priv-cur_tx 0; stmmac_clear_descriptors(priv); if (ndev-phydev-drv-config_init) { if (ndev-phydev-phy_id MAXIO_PHY_MAE0621A_Q2C_ID || ndev-phydev-phy_id MAXIO_PHY_MAE0621A_Q3C_ID) { ndev-phydev-drv-config_init(ndev-phydev); } } stmmac_hw_setup(ndev, false); stmmac_set_rx_mode(ndev);这里是因为RK所采用的stmmac需要在初始化的时候灌入RX CLK否则会报DMA engine initialization failed此处的操作就是把PHY先初始化起来提供RX CLK。如果是全志系列的sunxi mac就不需要合入此修改了。2.2 编写设备上文件gmac { phy-mode rgmii-id; clock_in_out output; tx_delay 0x3a; rx_delay 0x2e; snps,reset-gpio gpio5 RK_PB4 GPIO_ACTIVE_LOW; snps,reset-active-low; /* Reset time is 20ms, 100ms for rtl8211f */ snps,reset-delays-us 0 20000 100000; assigned-clocks cru CLK_MAC_OUT2IO; assigned-clock-rates 25000000; pinctrl-names default; pinctrl-0 ethm1_miim_pins ethm1_tx_bus2_pins ethm1_rx_bus2_pins ethm1_rgmii_clk_pins ethm1_rgmii_bus_pins gmac_rst_n; phy-handle rgmii_phy; status okay; }; mdio { rgmii_phy: ethernet-phy1 { compatible ethernet-phy-ieee802.3-c22; reg 1; }; };1phy-mode参数选择RGMII 规范要求时钟相对数据必须偏移1.2~2ns才能稳定双沿采样千兆信号偏移延时二选一实现方案APHY芯片内部自带TX/RX延时硬件引脚拉高TXDLY/RXDLY方案BRK MAC内部硬件延时电路DTS tx_delay/rx_delay 可调MAC与PHY不能两边同时加2ns延时否则时序叠加超阈值千兆严重丢包、速率跑不满。模式2ns延时承载方MAC端行为DTS配置要求rgmii外部PCB走线/两端都不加固定ID延时MAC端完全关闭硬件自动延时全部可靠tx_delay/rx-delay精细调参必须同时配置tx_delay、rx_delayrgmi-idMAC同时内置TXRX两路2ns固定内部延时驱动自动打开MAC硬件2ns延时线不需要额外写tx_delay、rx_delayrgmii-rxidPHY提供RX方向2ns延时MAC禁用RX硬件自动2ns延时TX方向由MAC通过tx_delay做时序补偿必须注释/删掉rx_delay只保留tx_delayrgmii-txidPHY内部提供TX方向2ns延时MAC禁用TX硬件自动2ns延时RX方向由MAC通过tx_delay做时序补偿必须注释/删掉tx_delay只保留rx_delay2配置时钟参数clock_in_out 决定TXC时钟来源最常用的是 RGMII input 模式PHY 提供 125M → SoC 内部路由到 mac_clk_rx_tx。当MAC和PHY采样RGMII通信时时钟来源有两种配置可选模式说明inputPHY 的 125MHz CLK125 输出 → SoC 的 ETH_CLK 引脚 →gmac0_clkoutputSoC 内部 PLL 分频给 GMAC DIVGMAC 再分配输出 125M 时钟给 PHYassigned-clock-parents 选时钟源assigned-clock-rates 定频率。强制配置GMAC输出时钟 CLK_MAC_OUT2IO 频率固定25MHz供给MAE0621的XTAL时钟脚3配置复位 GPIO、复位有效电平、复位时序snps,reset-gpio gpio5 RK_PB4 GPIO_ACTIVE_LOW; snps,reset-active-low; /* Reset time is 20ms, 100ms for rtl8211f */ snps,reset-delays-us 0 20000 100000;设备树复位时序三个值snps,reset-delays-us a b c;位置参数名含义典型值adelay before reset拉低 RESET 前的等待时间从 phy_device_register() 或 phy_probe() 开始计时0breset pulse widthRESET 低电平持续时间复位脉冲宽度必须 ≥ PHY 手册 t_reset10000~20000 μscdelay after reset释放 RESET 后等待 PHY 内部 PLL 稳定/自校准必须 ≥ PHY 手册 t_ready50000~100000 μsMAE0621A-Q3CI的复位时序MAE0621A-Q3CI要求Reset低电平保持时间最少10ms且Reset拉高后最低保持155ms后再访问PHY寄存器4配置 TX/RX 延迟需结合实际情况配置最佳tx_delay/rx_delay 以达到“ping 不丢包 iperf 吞吐率正常”的目标tx_delay/rx_delay 与 PHY 芯片和硬件设计密切相关主要是以下影响因素a. PHY 芯片差异不同 PHY 的内部 delay 特性不同b. PCB 走线长度RGMII delayline 本质上就是在补偿 PCB 上 clock 与 data 的走线长度差。TX_CLK 与 TXD[0:3] 之间的长度差影响 tx_delayRX_CLK 与 RXD[0:3] 之间的长度差影响 rx_delay。每差 1 inch ≈ 150~170ps 延时差。c. SoC 芯片本身的工艺偏差 (PVTd. 工作频率1000M (125MHz)delay 要求严格需要精确调100M (25MHz)时序裕量大通常不需要调 delayline。5指定phy-handle1. 在 MDIO 总线上添加 PHY 节点2. 设置 compatible 为 ethernet-phy-ieee802.3-c22c. 设置正确的 regPHY 地址mdio { rgmii_phy: ethernet-phy1 { compatible ethernet-phy-ieee802.3-c22; reg 1; // PHY地址 }; };3. 功能验证烧录完再次上电后查看日志已经可以识别为MAE0621A_Q3C了并且正确加载了v1.8.1.2版本的驱动流量测试RX/TX均能到920M4、常见问题排查问题现象排查方向DMA init failed检查 clock/pinctrl 是否正确PHY not found检查 MDCMDIO信号时序及物理连接、PHY 地址、复位时序Link up 但 ping 不通检查delayline 设定、RGMII链路物理连接是否正常速率偏低检查RGMII IO电平、 delayline 值、PCB走线只能协商到100M检查MDI 4个Channel的物理连接是否正正常无法Link检查MDI ChannelA/ChannelB FLP波形是否正常、供电/CLK/CLKOUT/Regout是否正常