ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RK3588与RTL8211F千兆网口设计:RGMII时序调优与信号完整性实战

RK3588与RTL8211F千兆网口设计:RGMII时序调优与信号完整性实战 1. 千兆以太网硬件设计的核心挑战RTL8211F 这颗 PHY 芯片在 RK3588 平台上的出镜率极高几乎成了国产化千兆网口的标配组合。但很多人在画完原理图、打完板之后才发现链路能通不代表稳定能 ping 通不代表跑得满。我前后做过四五个基于 RK3588 RTL8211F 的项目从最初照抄参考设计到后来自己调整时序、优化电源和走线踩过的坑足够写一本小册子。这篇文章就把这些经验完整地梳理一遍从信号完整性的角度切入讲清楚 PHY 调优和 SoC 协同设计到底该怎么做。先明确一下这套组合的基本盘。RK3588 内部集成了 GMAC 控制器对外通过 RGMII 接口连接 RTL8211F再由 PHY 通过 MDI 接口驱动变压器和 RJ45 网口。RGMII 是 Reduced Gigabit Media Independent Interface 的缩写它把 GMII 的 8 位数据总线压缩到 4 位同时在时钟的上下沿都采样数据从而在 125MHz 的时钟频率下实现 1000Mbps 的吞吐。这个设计本身很巧妙但也带来了一个直接后果时序裕量被大幅压缩。GMII 在 125MHz 下单沿采样 8 位数据建立保持时间相对宽裕RGMII 变成双沿采样 4 位数据等效数据率翻倍时序窗口直接砍半。这就是为什么 RGMII 接口对走线长度、时钟偏移和信号完整性的要求远比 GMII 苛刻。很多人会问为什么不用 SGMIISGMII 是串行接口走差分线抗干扰能力强时序约束也简单得多。但 SGMII 需要 PHY 和 MAC 都支持 SerDesRTL8211F 虽然部分型号支持 SGMII但 RK3588 的 GMAC 在大多数应用场景下默认走 RGMII因为 RGMII 的引脚更少、成本更低、PCB 布线更简单——前提是你布得好。对于千兆网口这种成本敏感的消费级和工业级产品RGMII 仍然是主流选择。所以问题不在于选不选 RGMII而在于怎么把 RGMII 做稳。这篇文章适合谁看如果你正在做 RK3588 的硬件设计板子上挂了 RTL8211F或者你正在调试以太网链路遇到了丢包、协商不上千兆、长时间跑流不稳定等问题那这篇内容应该能帮到你。即使你用的是其他 SoC 搭配其他 PHYRGMII 的时序分析和信号完整性思路也是通用的。我会从原理图设计、PCB 走线、设备树配置、PHY 寄存器调优、实测验证这几个维度展开尽量把每个决策背后的逻辑讲透。2. RTL8211F 与 RK3588 的接口设计要点2.1 RGMII 接口的信号定义与工作模式RGMII 接口在 1000Mbps 模式下总共需要 12 根信号线4 根发送数据线 TXD[3:0]、1 根发送时钟 TXC、1 根发送控制 TX_CTL、4 根接收数据线 RXD[3:0]、1 根接收时钟 RXC、1 根接收控制 RX_CTL。在 100Mbps 和 10Mbps 模式下数据线只用低两位时钟频率也相应降低。TX_CTL 在千兆模式下复用为 TXEN 和 TXERRX_CTL 复用为 RXDV 和 RXER具体行为由 PHY 和 MAC 的协商结果决定。这里有一个非常关键的概念RGMII 的时钟和数据之间的相位关系。在标准 RGMII 规范中发送端MAC输出的 TXC 和数据是边沿对齐的也就是说 TXC 的跳变沿正好对应数据的有效窗口中心。但接收端PHY在采样时如果直接用这个时钟去采数据由于走线延迟和芯片内部延迟的存在采样点可能偏离数据窗口中心导致误码。为了解决这个问题RGMII 引入了两种延迟模式一种是 MAC 内部对 TXC 做 90 度相移约 2ns 延迟让时钟边沿对准数据窗口中心另一种是 PHY 内部对 RXC 做延迟。具体用哪种模式取决于 MAC 和 PHY 各自的支持能力以及硬件设计。RK3588 的 GMAC 支持内部延迟配置可以通过设备树或寄存器设置 TXC 和 RXC 的延迟值。RTL8211F 也支持内部延迟通过扩展寄存器可以配置。实际项目中最常见的做法是一端做延迟另一端不做避免双重延迟导致时序错乱。我通常建议在 RK3588 侧开启 TXC 延迟RTL8211F 侧开启 RXC 延迟这样发送和接收链路各管各的调试起来最清晰。2.2 参考原理图的关键细节网上能搜到不少 RTL8211F 的参考原理图但直接照抄往往会出问题。我见过最多的错误集中在几个地方电源滤波、时钟源选择、MDIO/MDC 上拉、以及复位电路。先说电源。RTL8211F 需要多路电源核心电压通常是 1.05V 或 1.1VI/O 电压可以是 3.3V、2.5V 或 1.8V具体取决于你的 RGMII 电平标准。RK3588 的 GMAC I/O 电压一般是 3.3V 或 1.8V需要和 PHY 的 I/O 电压匹配。如果 RK3588 侧是 3.3V 而 PHY 侧是 1.8V中间必须加电平转换否则要么不工作要么长期可靠性出问题。我建议在设计初期就确定好电平标准尽量让两边一致省掉电平转换芯片。电源滤波方面RTL8211F 的每个电源引脚旁边都要放 0.1uF 的去耦电容另外在电源入口处放一个 10uF 的钽电容或陶瓷电容。PHY 芯片对电源纹波比较敏感尤其是核心电压纹波大了会导致内部 PLL 抖动进而影响 RGMII 时序。实测中如果核心电压纹波超过 50mV千兆链路的误码率会明显上升。时钟源是另一个容易翻车的地方。RTL8211F 需要一个 25MHz 的晶振或外部时钟输入。如果用晶振注意负载电容要匹配通常晶振规格书会给出负载电容值比如 12pF 或 18pF然后根据公式计算外接电容。如果负载电容不匹配晶振频率会偏移导致 PHY 内部 PLL 失锁链路直接起不来。我遇到过一块板子晶振负载电容算错了结果 PHY 的 125MHz 时钟偏了 200ppm千兆协商失败百兆能通但丢包严重。后来换了正确的电容问题立刻消失。MDIO 和 MDC 是管理接口用于读写 PHY 寄存器。这两根线需要上拉电阻通常是 1.5k 到 10k 之间上拉到 I/O 电压。MDC 的最高频率一般是 2.5MHz 或 25MHz取决于 PHY 的支持。RK3588 的 MDIO 控制器可以通过设备树配置时钟分频。如果 MDIO 通信不稳定先检查上拉电阻和走线MDIO 是开漏输出没有上拉或者上拉太弱都会导致通信失败。复位电路也值得一说。RTL8211F 有一个复位引脚低电平有效。复位信号需要保持足够长的时间通常至少 10ms确保内部电路完全初始化。有些设计直接用 RC 复位电阻 10k、电容 100nF时间常数 1ms太短了可能导致 PHY 初始化不完整。我建议用专门的复位芯片或者从 SoC 的 GPIO 控制复位确保复位时间可控。2.3 RGMII 走线的信号完整性约束RGMII 走线是硬件设计中最容易出问题的地方。虽然 125MHz 的时钟频率听起来不高但双沿采样意味着数据速率等效 250Mbps 每根线加上边沿速率快实际上需要考虑传输线效应。首先RGMII 的 12 根信号线必须等长。等长控制的目的是保证数据和时钟之间的偏斜最小。一般要求数据线之间的长度差控制在 5mil 以内数据线和时钟线之间的长度差控制在 10mil 以内。如果走线长度差异太大偏斜会直接吃掉时序裕量。我见过一块板子TX 和 RX 的走线长度差了 200mil结果千兆模式下丢包率 10% 以上改成等长后立刻稳定。其次RGMII 走线要控制阻抗。单端阻抗通常控制在 50 欧姆差分线如果有控制在 100 欧姆。阻抗不匹配会导致反射反射信号叠加在原始信号上可能造成误触发。对于 RGMII 这种边沿速率在 1ns 左右的信号反射的影响不可忽视。如果走线比较长超过 500mil建议在源端串联 22 欧姆或 33 欧姆的电阻做阻抗匹配吸收反射。第三RGMII 走线要远离干扰源。开关电源、DDR 总线、时钟线都是潜在的干扰源。尤其是 DDRRK3588 通常搭配 LPDDR4 或 LPDDR5数据速率很高辐射噪声大。如果 RGMII 走线和 DDR 走线平行走很长一段距离串扰会非常严重。我建议 RGMII 走线和 DDR 走线之间保持至少 3 倍线宽的间距或者用地平面隔离。如果实在避不开可以在 RGMII 走线两侧包地并多打过孔到地平面。第四RGMII 走线要尽量短。走线越长损耗越大反射越严重时序裕量越小。一般建议 RGMII 走线控制在 2000mil 以内最好在 1000mil 以内。如果 SoC 和 PHY 距离较远可以考虑用 RGMII 转 SGMII 的方案或者用重驱动器redriver来增强信号。最后RGMII 走线要参考完整的地平面。参考平面不完整会导致阻抗突变回流路径断裂信号完整性急剧恶化。我建议 RGMII 走线走在内层上下都有完整的地平面参考。如果走在表层至少保证下方有完整地平面并且走线尽量短。3. 设备树配置与 PHY 驱动调优3.1 RK3588 GMAC 设备树节点解析RK3588 的设备树中GMAC 节点通常位于arch/arm64/boot/dts/rockchip/rk3588s.dtsi或类似的 SoC 级 dtsi 文件中。板级 dts 文件会引用这个节点并覆盖部分属性。一个典型的 GMAC 节点配置如下gmac1 { phy-mode rgmii-rxid; clock_in_out output; snps,reset-gpio gpio3 RK_PB7 GPIO_ACTIVE_LOW; snps,reset-active-low; snps,reset-delays-us 0 20000 100000; assigned-clocks cru SCLK_GMAC1_RX_TX, cru SCLK_GMAC1_RGMII_SPEED; assigned-clock-parents cru SCLK_GMAC1_RGMII_SPEED, cru SCLK_GMAC1; assigned-clock-rates 0, 125000000; pinctrl-names default; pinctrl-0 gmac1_miim gmac1_tx_bus2 gmac1_rx_bus2 gmac1_rgmii_clk gmac1_rgmii_bus; tx_delay 0x00; rx_delay 0x00; phy-handle rgmii_phy1; status okay; };这里有几个关键属性需要解释。phy-mode决定了 RGMII 的延迟模式可选值包括rgmii、rgmii-id、rgmii-txid、rgmii-rxid。rgmii表示 MAC 和 PHY 都不做内部延迟rgmii-id表示两边都做延迟rgmii-txid表示只在 TX 方向做延迟rgmii-rxid表示只在 RX 方向做延迟。实际用哪个取决于硬件设计和 PHY 的配置。我通常先用rgmii-rxid让 PHY 侧做 RX 延迟MAC 侧不做延迟然后根据实测结果调整。tx_delay和rx_delay是 RK3588 GMAC 内部的延迟值单位是 0.1ns 左右具体精度取决于芯片。这两个值需要根据实测眼图来调。如果 TX 方向时序不对先调tx_delay如果 RX 方向有问题先调rx_delay。调整范围一般是 0x00 到 0x7f对应 0 到 12.7ns 左右的延迟。clock_in_out决定 GMAC 的时钟方向。output表示 RK3588 输出 TXC 和 RXCinput表示 RK3588 接收外部时钟。对于 RGMII 接 PHY 的场景通常用output因为 PHY 需要 MAC 提供时钟。但有些 PHY 可以自己产生时钟这时候就要用input。具体看 PHY 的时钟架构。snps,reset-gpio和相关的复位属性用于控制 PHY 的复位。snps,reset-delays-us定义了复位前、复位中、复位后的延迟时间单位是微秒。这个值需要根据 PHY 的数据手册来设置RTL8211F 的复位时间通常要求至少 10ms所以复位中的延迟要大于 10000us。3.2 PHY 节点的配置与寄存器初始化PHY 节点通常在板级 dts 中定义如下所示mdio1 { rgmii_phy1: ethernet-phy1 { compatible ethernet-phy-ieee802.3-c22; reg 0x1; clocks cru SCLK_GMAC1_RGMII_SPEED; clock-names stmmaceth; pinctrl-names default; pinctrl-0 gmac1_miim; phy-is-integrated; reset-gpios gpio3 RK_PB7 GPIO_ACTIVE_LOW; reset-assert-us 20000; reset-deassert-us 100000; }; };reg属性是 PHY 的 MDIO 地址由硬件设计决定。RTL8211F 的地址由 PHYAD 引脚的电平决定通常可以配置为 0 到 7。如果板子上有多个 PHY地址不能冲突。我见过一块板子两个 PHY 的地址都设成了 1结果只能识别到一个另一个完全没反应。后来改了 PHYAD 电阻问题解决。phy-is-integrated这个属性告诉驱动PHY 是集成在板上的不需要热插拔检测。对于 RTL8211F 这种板载 PHY通常需要加上这个属性。如果需要配置 RTL8211F 的扩展寄存器比如开启内部延迟、调整驱动强度等可以通过phy-init-sequence或者在驱动中写初始化代码。RTL8211F 的扩展寄存器页切换需要先写寄存器 0x1f 选择页然后再读写目标寄存器。比如要配置 RGMII 延迟需要切换到页 0xd08然后写寄存器 0x11。具体值可以参考 RTL8211F 的数据手册。3.3 时钟树与复位时序的协同RK3588 的 GMAC 时钟来自 CRUClock Reset Unit需要正确配置时钟父节点和频率。assigned-clocks和assigned-clock-parents用于指定时钟源assigned-clock-rates用于设置频率。对于千兆 RGMIISCLK_GMAC1_RGMII_SPEED需要设置为 125MHz。如果这个时钟不对链路速率会受影响甚至协商不上千兆。复位时序也很关键。RK3588 的 GMAC 复位和 PHY 复位需要协同。通常的顺序是先复位 GMAC再复位 PHY然后等待 PHY 初始化完成最后启动 GMAC 的链路协商。如果顺序反了或者复位时间不够PHY 可能没有完全初始化导致 MDIO 通信失败或者链路不稳定。我在调试一块板子时发现 PHY 偶尔识别不到后来查出来是复位时间太短PHY 内部 PLL 还没锁定就开始了 MDIO 通信。把复位时间从 10ms 增加到 50ms 后问题消失。4. 实测调试与常见问题排查4.1 链路协商失败的排查思路链路协商失败是最常见的问题表现是ethtool显示Link detected: no或者只能协商到百兆。排查思路可以按以下顺序进行第一步检查 MDIO 通信。用mdio-tools或者ethtool读取 PHY 寄存器看能不能读到正确的 PHY ID。RTL8211F 的 PHY ID 是 0x001cc916如果读出来是 0xffffffff 或者 0x00000000说明 MDIO 通信有问题。检查 MDC/MDIO 的上拉电阻、走线、以及 PHY 的电源和复位。第二步检查时钟。用示波器测量 PHY 的 25MHz 晶振输出看频率是否准确幅度是否足够。然后测量 RGMII 的 TXC 和 RXC看有没有 125MHz 的时钟输出。如果 TXC 没有输出检查 GMAC 的时钟配置和引脚复用。第三步检查 RGMII 时序。如果 MDIO 能通但链路协商不上很可能是 RGMII 时序不对。可以用示波器同时抓 TXC 和 TXD看时钟边沿是否对准数据窗口中心。如果偏了调整tx_delay或rx_delay。我通常会用二分法来调先设一个中间值然后根据误码率往左或往右调。第四步检查电源和地。用万用表测量 PHY 的各路电源看电压是否准确纹波是否在允许范围内。如果电源纹波大检查去耦电容和电源走线。4.2 丢包与误码率高的优化手段链路能协商到千兆但跑流时丢包严重这种问题比协商失败更难查。常见原因包括RGMII 时序裕量不足、电源噪声、串扰、以及 PHY 内部配置不当。时序裕量不足是最常见的原因。可以用ethtool -S查看统计信息如果rx_errors或tx_errors持续增长基本可以确定是时序问题。调整tx_delay和rx_delay同时用iperf3跑流测试观察丢包率变化。我一般会做一个延迟扫描从 0x00 到 0x7f每隔 0x10 测一次找到丢包率最低的区间然后再细调。电源噪声也会导致丢包。用示波器测量 PHY 核心电压的纹波如果超过 50mV需要在电源引脚旁边增加去耦电容或者换用更低 ESR 的电容。另外PHY 的电源走线要尽量短而粗减少压降。串扰问题在 RGMII 走线和 DDR 走线靠得比较近时特别明显。如果怀疑是串扰可以尝试降低 RGMII 的驱动强度或者调整走线间距。RTL8211F 的驱动强度可以通过扩展寄存器调整降低驱动强度可以减小边沿速率从而减小串扰但也会降低时序裕量需要权衡。PHY 内部配置不当也会导致丢包。比如 RTL8211F 的 RGMII 延迟配置和 MAC 侧的配置不匹配就会导致采样点偏移。另外PHY 的自动协商参数、流控配置等也需要检查。我遇到过一块板子PHY 的流控默认开启但 MAC 侧没开结果跑流时丢包严重。后来把两边的流控都关掉问题解决。4.3 长时间跑流的稳定性验证短时间跑流没问题不代表长时间稳定。我建议至少做 24 小时的连续跑流测试用iperf3双向跑同时监控ethtool -S的统计信息。如果 24 小时内没有丢包基本可以认为链路稳定。如果偶尔有丢包需要进一步排查。长时间跑流时温度变化也会影响稳定性。PHY 芯片的温度升高后内部延迟会变化可能导致原本勉强通过的时序变得不通过。所以测试时要注意环境温度最好在高温箱里也跑一遍。我有个项目常温下跑 48 小时没问题但在 70 度环境下跑 2 小时就开始丢包。后来调整了tx_delay让时序裕量更大高温下也稳定了。另外EMC 测试也是验证稳定性的重要环节。RGMII 接口的辐射发射如果超标可能会干扰其他设备也可能被其他设备干扰。如果 EMC 测试不过可以考虑在 RGMII 走线上加共模电感或者磁珠但要注意不要影响信号完整性。5. 信号完整性仿真的辅助价值5.1 什么时候需要做 SI 仿真不是所有项目都需要做信号完整性仿真。如果板子尺寸小、走线短、层叠简单凭经验设计通常就够了。但如果板子尺寸大、走线长、或者有多个高速接口共存做 SI 仿真可以提前发现问题避免打板后反复调试。对于 RK3588 RTL8211F 的组合如果 RGMII 走线超过 1500mil或者走线经过多个过孔、连接器我建议做一下 SI 仿真。仿真可以给出眼图、时序裕量、反射和串扰的量化结果帮助你判断设计是否可靠。5.2 简易 SI 仿真的实操方法做 SI 仿真不一定需要昂贵的工具。如果预算有限可以用一些开源工具或者厂商提供的免费工具。比如可以用 KiCad 自带的传输线计算器估算阻抗用 LTspice 做简单的传输线仿真。如果需要更精确的结果可以用 HyperLynx 或 ADS但这些工具价格不菲。仿真的基本步骤是先提取 RGMII 走线的拓扑结构包括走线长度、阻抗、过孔、连接器等然后设置激励源通常是 IBIS 模型或者简单的阶跃信号最后运行仿真观察眼图和时序。如果眼图张开度不够或者时序裕量为负就需要调整设计。我通常会在 PCB 布局完成后把 RGMII 走线的参数导入仿真工具跑一遍眼图。如果眼图裕量小于 20%我会考虑优化走线或者调整延迟配置。实测下来仿真结果和实测结果的相关性还是比较高的尤其是反射和串扰的预测比较准。5.3 仿真与实测的偏差处理仿真毕竟不是实测总会有偏差。偏差的来源包括IBIS 模型的精度、PCB 材料的介电常数误差、制造公差等。所以仿真结果只能作为参考不能完全依赖。我一般会把仿真结果和实测结果对比找出偏差的原因然后修正仿真模型提高后续仿真的准确性。如果仿真结果很好但实测有问题先检查仿真模型是否准确尤其是 IBIS 模型是否和实际芯片匹配。如果仿真结果不好但实测没问题可能是仿真过于保守或者实际走线的损耗比仿真模型小。不管怎样实测永远是最终判据。6. 从硬件到系统的协同优化经验6.1 硬件设计与驱动配置的联动硬件设计和驱动配置不是孤立的。硬件上做了延迟驱动里就要相应配置硬件上没做延迟驱动里就要补上。我见过很多项目硬件工程师和驱动工程师各干各的结果两边都做了延迟时序反而错了。所以从项目一开始硬件和驱动就要对齐 RGMII 的延迟方案。我的做法是在原理图设计阶段就确定好延迟模式比如 MAC 侧开 TX 延迟PHY 侧开 RX 延迟。然后在设备树里配置对应的phy-mode和tx_delay/rx_delay。打板后先按预设配置调试如果不行再调整。这样效率最高也最容易复现。6.2 不同批次 PHY 芯片的一致性处理不同批次的 PHY 芯片内部延迟可能有差异。尤其是 RTL8211F不同版本或不同批次的芯片RGMII 延迟特性可能略有不同。如果产品要量产必须考虑这个一致性。我的经验是在设计时留出足够的时序裕量不要卡着极限调。比如如果实测最佳延迟是 0x20我会把默认值设成 0x18 或 0x28留出一定的容错空间。另外可以在驱动里做自适应校准根据误码率动态调整延迟。不过自适应校准实现起来比较复杂对于大多数项目留足裕量就够了。6.3 量产测试与一致性保障量产时每块板子都要做以太网测试。测试内容包括链路协商、跑流丢包率、长时间稳定性。如果发现个别板子有问题先检查焊接和物料再检查延迟配置。如果一批板子都有问题那可能是设计问题需要改版。我建议在量产测试中加入 RGMII 眼图测试用示波器或者专用的眼图分析仪快速判断时序裕量。如果眼图裕量不足可以提前筛选出有风险的板子避免流出到客户手里。7. 几个容易被忽略的细节7.1 变压器与 RJ45 的选型影响变压器和 RJ45 连接器虽然是被动器件但对信号完整性的影响不小。变压器的共模抑制比、插入损耗、回波损耗都会影响链路质量。如果变压器选得不好千兆链路的误码率会明显上升。我建议选择知名品牌的千兆变压器比如 Pulse、Halo、Bothhand 等不要用杂牌。RJ45 连接器也要注意。有些低成本 RJ45 的引脚电感和电容比较大会影响信号完整性。另外RJ45 的屏蔽壳要可靠接地否则共模噪声会耦合到信号线上。7.2 PCB 层叠设计对 RGMII 的影响PCB 层叠设计对 RGMII 走线的阻抗控制和串扰抑制至关重要。我通常建议至少用 4 层板顶层走 RGMII 信号第二层完整地平面第三层电源平面底层走低速信号。如果板子密度高可以用 6 层或 8 层把 RGMII 走线放在内层上下都有地平面参考。层叠设计时要注意介质厚度和介电常数。介质太厚会导致阻抗偏高介质太薄会导致阻抗偏低。一般用 0.1mm 到 0.2mm 的介质厚度配合合适的线宽可以得到 50 欧姆的单端阻抗。7.3 软件层面的链路监控与告警硬件调好之后软件层面也要做链路监控。比如定期读取 PHY 的状态寄存器检测链路是否断开、速率是否变化、误码率是否异常。如果发现异常及时告警或者自动恢复。RK3588 的 Linux 驱动支持ethtool和phy子系统可以方便地读取 PHY 状态。我通常会在应用层加一个守护进程每隔几秒读一次ethtool的输出如果发现链路断开或者误码率突增就记录日志并触发告警。这样可以在问题扩大之前及时发现。8. 调试实录一个典型的时序问题排查过程最后分享一个我实际遇到的案例。有一块 RK3588 的板子RTL8211F 的千兆链路能协商上但跑iperf3时丢包率在 5% 左右。先查了电源和时钟都没问题。然后用示波器抓 RGMII 的 TXC 和 TXD发现 TXC 的边沿和数据窗口中心有大约 1.5ns 的偏移。设备树里tx_delay设的是 0x00phy-mode是rgmii也就是说两边都没做延迟。我把phy-mode改成rgmii-rxid让 PHY 侧做 RX 延迟然后重新测试丢包率降到 0.1%。但还是不够稳定。接着我调整tx_delay从 0x00 开始每次加 0x08测一次丢包率。最后发现tx_delay设成 0x20 时丢包率降到 0。为了留裕量我把tx_delay设成 0x18然后跑了 48 小时没有丢包。这个案例说明RGMII 时序问题往往需要同时调整 MAC 侧和 PHY 侧的延迟而且需要耐心地做扫描测试。不要指望一次就能调到最佳值多试几次找到最稳的配置。另外我还遇到过一个更隐蔽的问题PHY 的复位引脚被其他电路复用了导致复位信号偶尔被拉低PHY 随机重启。这个问题查了很久最后用示波器抓复位引脚的波形才发现。所以PHY 的复位引脚一定要专用不要和其他功能复用。9. 写在最后的一些个人体会做 RK3588 RTL8211F 的硬件设计说难不难说简单也不简单。核心就两点一是把 RGMII 的时序搞清楚二是把电源和信号完整性做好。时序问题可以通过调整延迟配置解决信号完整性问题需要通过合理的布局布线解决。两者都做好了千兆链路自然就稳了。我个人的习惯是在项目初期就做一块最小系统板专门验证 RGMII 链路。最小系统板上只放 RK3588、RTL8211F、电源和必要的时钟走线尽量短层叠尽量简单。先把链路调通再把设计移植到正式板上。这样可以快速迭代避免在复杂板上浪费时间。还有一点调试工具要备齐。示波器、万用表、ethtool、iperf3、mdio-tools这些都是必备的。尤其是示波器抓 RGMII 时序离不开它。如果条件允许最好有一台带眼图分析功能的示波器可以直观地看到时序裕量。最后多和同行交流。RGMII 的调试经验很多都是口口相传的网上能找到的资料有限。加入一些硬件设计的社区遇到问题多问问往往能少走很多弯路。
返回列表