ARTICLE DETAIL

资讯详情

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

YT8521S国产千兆PHY实战:RGMII与SGMII接口调试及寄存器配置避坑指南

YT8521S国产千兆PHY实战:RGMII与SGMII接口调试及寄存器配置避坑指南 YT8521S这颗芯片这两年我在几个工业网关和交换机项目里反复用到从最早拿样片点灯都点不亮到后来能稳定跑满千兆、过EMC、批量出货中间踩的坑足够写一本小册子。它是一颗国产单口千兆以太网PHY支持RGMII和SGMII两种MAC侧接口兼容常见的百兆/千兆速率封装小、外围简单价格也友好所以在国产替代的浪潮里被大量设计进交换机、工业控制板、边缘计算盒子里。但外围简单这四个字很容易骗人——PHY芯片的调试难点从来不在芯片本身而在接口时序、时钟方案、寄存器配置和PCB布局这几件事上。这篇文章我打算把YT8521S从选型、原理、硬件设计、寄存器配置到实测调试的完整链路拆开讲一遍尤其是RGMII和SGMII这两种接口在实战中的差异、时序约束怎么算、SGMII和MAC配合时那个必须配成MAC模式的坑以及我实际用示波器和寄存器读写定位问题的过程。不管你是第一次画PHY电路还是已经调过几颗PHY但被YT8521S卡住应该都能从里面找到能直接抄作业的东西。1. 先搞清楚YT8521S到底解决什么问题1.1 它在网络链路里的位置和角色很多人第一次接触PHY芯片会把它和MAC搞混。简单说MAC是大脑负责组帧、校验、流控这些逻辑PHY是嘴巴和耳朵负责把MAC吐出来的数字信号变成双绞线上能跑的模拟差分信号反过来再把线上的信号还原成数字。YT8521S就是后面这个角色它一头通过RGMII或SGMII接MAC或者接交换芯片的端口另一头通过MDI接RJ45变压器再到网线。它支持的速率是10/100/1000M自适应符合IEEE 802.3ab千兆标准。MAC侧接口可选RGMIIReduced Gigabit Media Independent Interface或SGMIISerial Gigabit Media Independent Interface这两个接口的选择直接决定了你PCB怎么布线、时钟怎么给、寄存器怎么配。RGMII是并行接口4位数据双向带独立的TX/RX时钟走线多但逻辑直观SGMII是串行接口一对TX一对RX速率1.25Gbps走线少但需要SerDes对信号完整性要求高。我选YT8521S主要看中三点一是国产供应链稳定交期可控二是RGMII和SGMII都支持同一颗料能覆盖不同主控平台三是寄存器手册相对完整虽然有些地方写得含糊但至少能查到关键位。如果你用的是国产主控或者FPGAMAC侧接口往往只有RGMII或者只有SGMII这时候PHY的接口灵活性就很重要。1.2 RGMII和SGMII的选型逻辑选RGMII还是SGMII不是拍脑袋决定的得看你的MAC端支持什么、板子空间多大、成本敏感度多高。RGMII的优势是简单直接不需要SerDesMAC和PHY之间就是普通的并行时序FPGA和大多数国产主控都原生支持。缺点是引脚多一个端口要12根左右的信号线4位TX数据、4位RX数据、TX_CLK、RX_CLK、TX_CTL、RX_CTL加上时钟线布线密度高。千兆RGMII的时钟是125MHzDDR采样时序窗口很窄PCB走线等长和延迟控制不好就容易丢包。SGMII的优势是省线一对差分TX一对差分RX加上时钟参考总共没几根线特别适合多端口交换机或者背板连接。缺点是PHY和MAC两端都要有SerDesFPGA需要占高速收发器资源主控需要支持SGMII。另外SGMII是串行8b/10b编码实际线速率1.25Gbps对差分阻抗和损耗有要求。我一般的判断标准是单端口、主控原生RGMII、板子空间够就选RGMII多端口、背板走线长、主控或FPGA有SerDes就选SGMII。YT8521S两种都支持所以同一颗料可以应对不同项目这也是它讨喜的地方。1.3 常见应用场景和典型搭配YT8521S我实际用过的场景大概有这么几类工业网关主控是国产ARMMAC侧RGMIIPHY接变压器出RJ45跑千兆。这类场景对温度范围要求高YT8521S的工业级版本能到-40到85度。多口交换机交换芯片的端口用SGMII接YT8521S再出电口。这种搭配里SGMII的SerDes配置和均衡参数很关键。FPGA开发板FPGA的GT收发器出SGMII接YT8521S做千兆以太网实验。这种场景下SGMII IP核和PHY的模式匹配是必踩的坑。边缘计算盒子主控RGMII直连成本敏感外围只要变压器和几个阻容。这些场景里RGMII和SGMII的调试重点完全不同。RGMII重点在时序和延迟SGMII重点在SerDes配置和模式匹配。下面我分开讲。2. RGMII接口的时序约束到底怎么算2.1 RGMII的两种时钟模式延迟和非延迟RGMII最容易被忽略的就是时钟和数据的关系。千兆RGMII的时钟是125MHz数据在时钟的上升沿和下降沿都采样DDR所以一个时钟周期传2位4位数据线一个周期传8位125MHz × 8 1000Mbps刚好千兆。问题来了数据和时钟到底谁先谁后RGMII规范里定义了两个模式非延迟模式Non-DelayedTX端数据和TX_CLK同时发出RX端PHY采样时需要在内部或者外部加延迟保证数据在时钟边沿稳定。延迟模式DelayedTX端数据相对TX_CLK延迟约2ns发出RX端PHY也输出延迟的时钟和数据MAC直接采样即可。这两个模式如果MAC和PHY配得不一致就会出现采样错误表现为丢包、CRC错误、甚至链路起不来。YT8521S默认通常是延迟模式但具体要看寄存器配置。我遇到过MAC配非延迟、PHY配延迟结果ping通但大流量丢包的情况查了半天才发现是模式不匹配。2.2 时序窗口的计算过程要理解为什么RGMII这么挑时序得算一下窗口。千兆RGMII时钟周期8nsDDR意味着每个边沿都要采样数据有效窗口理论上只有4ns。但实际信号有上升沿、下降沿时间PCB有延迟芯片内部有建立保持时间要求真正留给你的余量可能只有1到2ns。以YT8521S为例查手册的时序参数RX端数据相对RX_CLK的建立时间Tsetup和保持时间Thold要求通常在1ns左右。如果PCB走线不等长比如TX_CLK比TX_DATA长了5mm按FR4的传播延迟约6ps/mm算5mm就是30ps看起来不大但加上芯片内部延迟和时钟抖动累积起来就可能吃掉余量。我的做法是RGMII的TX_CLK、TX_DATA、TX_CTL一组RX_CLK、RX_DATA、RX_CTL一组组内走线等长控制在5mil以内组间可以不等长但要注意时钟线的参考平面完整。如果MAC支持内部延迟调节优先用内部延迟PCB上就不需要额外加延迟线。2.3 PCB布局对RGMII眼图的影响RGMII虽然是并行接口但125MHz DDR的实际频谱分量能到几百MHz所以不能当低速信号随便走。我实测过一版板子RGMII走线没做等长眼图张开度明显变差误码率上升。后来重新layout做了这几件事所有RGMII信号走内层参考完整地平面避免跨分割。组内等长5milTX组和RX组分开走避免串扰。时钟线包地处理两侧加地过孔。串联端接电阻靠近源端放置通常22到33欧姆具体看驱动能力。改完之后眼图明显改善丢包率从千分之几降到几乎为零。这里要提醒一句RGMII的端接电阻不是随便放的放错位置会反射更严重。串联端接要靠近驱动端并联端接要靠近接收端别搞反。2.4 实测中RGMII丢包的排查链路有一次客户反馈板子跑千兆大流量时丢包小流量正常。我的排查顺序是这样的先看链路状态确认协商到1000M全双工。用寄存器读YT8521S的RX_ER、CRC错误计数确认是接收侧还是发送侧问题。用示波器抓RX_CLK和RX_DATA看建立保持时间余量。发现RX_DATA相对RX_CLK的建立时间只有0.3ns余量不足。查MAC侧配置发现MAC配的是非延迟模式而PHY默认延迟模式。改MAC寄存器配成延迟模式或者改PHY配成非延迟两边对齐。复测丢包消失。这个链路里最关键的是第2步先定位是收还是发能省一半时间。YT8521S的错误计数寄存器在手册的寄存器0x15和0x16附近具体位定义要查手册不同版本可能略有差异。3. SGMII和MAC配合时的模式匹配坑3.1 SGMII的架构和MAC模式的含义SGMII是串行接口PHY和MAC之间用一对差分TX和一对差分RX连接速率1.25Gbps8b/10b编码有效数据速率1Gbps。SGMII的帧结构和千兆以太网类似但多了控制字符和配置信息。这里有个关键概念SGMII有MAC模式和PHY模式之分。当SGMII IP核和PHY芯片一起使用时IP核应该配置成MAC模式PHY配置成PHY模式。这个说法在热词里也出现了——sgmii ip核与phy芯片一起使用时应配置成mac模式。为什么因为SGMII链路两端必须一个是MAC角色一个是PHY角色。MAC角色负责发送配置信息、管理链路PHY角色响应配置、上报状态。如果你把FPGA的SGMII IP核也配成PHY模式两端都是PHY链路就协商不起来表现为link不上或者link上了但不通。我踩过这个坑FPGA用SGMII IP核接YT8521SIP核默认配置是PHY模式结果link灯不亮。查了两天才发现是模式配反了改成MAC模式后立刻正常。这个坑的隐蔽性在于IP核的默认配置往往不是你想要的那个而且文档里可能一笔带过。3.2 SGMII的自动协商和寄存器配置SGMII链路建立过程中MAC角色会发送配置字Config Word里面包含速率、双工、链路状态等信息。PHY角色收到后回复自己的配置字。这个过程叫SGMII自动协商和铜口的自动协商不是一回事。YT8521S在SGMII模式下需要配置几个关键寄存器使能SGMII模式选择MAC侧接口为SGMII。配置SGMII的自动协商使能。设置SGMII的速率和双工通常跟随铜口协商结果。配置SerDes的均衡和驱动参数根据走线长度调整。这些寄存器分布在扩展寄存器空间需要通过MDIO的间接访问方式读写。YT8521S的MDIO支持Clause 22和Clause 45扩展寄存器一般用Clause 22的寄存器0x1E作为地址寄存器0x1F作为数据寄存器来间接访问。这个访问方式要写对否则读出来的值是错的。3.3 SerDes信号完整性和均衡参数SGMII是1.25Gbps的串行信号虽然速率不算特别高但对差分阻抗和损耗还是有要求的。我一般要求差分阻抗100欧姆±10%走线尽量短避免过孔和连接器。如果走线超过10cm就要考虑加均衡。YT8521S的SerDes有可配置的均衡和预加重参数通过扩展寄存器调整。我的经验是短走线小于5cm用默认参数就行中等走线5到15cm适当增加RX均衡长走线大于15cm要加预加重和更强的均衡同时用示波器看眼图确认。这里有个实测技巧SGMII的眼图不像RGMII那么好抓因为速率高需要高带宽探头。如果没有高端示波器可以间接通过误码率判断——跑iperf大流量看有没有CRC错误和丢包。误码率低说明信号质量可以。3.4 SGMII链路起不来的完整排查过程有一次FPGA板子SGMII接YT8521Slink一直不亮。我的排查过程确认PHY的电源、复位、时钟正常MDIO能读到PHY ID。读PHY的SGMII状态寄存器看链路状态位。发现PHY侧显示SGMII link down说明SerDes没收到有效信号。检查FPGA的SGMII IP核配置发现配成了PHY模式。改成MAC模式重新编译下载。link灯亮但ping不通。读PHY的铜口状态发现铜口没link因为网线没插好。插好网线ping通。这个案例里第4步是核心问题第7步是次要问题。排查时一定要分清楚是SGMII链路问题还是铜口链路问题两者是独立的。SGMII link up不代表铜口link up反过来也一样。4. 寄存器配置和MDIO读写实战4.1 MDIO的时序和常见读写错误MDIO是管理接口用来读写PHY的寄存器。它只有两根线MDC时钟和MDIO数据。MDC频率一般不超过2.5MHz实际用1MHz到2.5MHz都行。MDIO是双向的读的时候PHY驱动写的时候MAC驱动。常见的MDIO读写错误有几种MDC频率太高超过PHY支持的上限导致读写失败。MDIO没有上拉电阻空闲时电平不确定。读写时序不对比如在MDC上升沿之前没准备好数据。寄存器地址写错读出来的值不对。YT8521S的MDIO支持Clause 22PHY地址通过硬件引脚配置通常是0到31。硬件设计时要把PHYAD引脚上下拉正确否则MDIO找不到PHY。我遇到过PHYAD引脚悬空导致地址不确定的情况读出来的PHY ID是0xFFFF或者0x0000。4.2 扩展寄存器的间接访问方法YT8521S有很多扩展寄存器不在标准的0到31寄存器空间里需要通过间接访问。方法是写寄存器0x1E写入扩展寄存器的地址。写寄存器0x1F写入要写的数据或者读出来数据。读的时候先写0x1E再读0x1F。写的时候先写0x1E再写0x1F。这个顺序不能反而且每次访问都要重新写0x1E因为0x1E的值可能会被其他操作改变。我写了一个简单的读写函数用Python伪代码表示def write_ext_reg(phy_addr, ext_addr, data): write_reg(phy_addr, 0x1E, ext_addr) write_reg(phy_addr, 0x1F, data) def read_ext_reg(phy_addr, ext_addr): write_reg(phy_addr, 0x1E, ext_addr) return read_reg(phy_addr, 0x1F)这个函数看起来简单但实际用的时候要注意有些扩展寄存器的读写需要先解锁或者使能某个位否则写不进去。YT8521S的部分扩展寄存器需要先写一个magic值到某个寄存器具体查手册。4.3 关键寄存器位速查和配置示例我把YT8521S常用的寄存器配置整理成表格方便查阅。注意不同版本的芯片寄存器定义可能略有差异以你手上的手册为准。寄存器地址功能常用配置BMCR0x00基本控制0x1140自动协商重启BMSR0x01基本状态只读bit2为link状态PHYID10x02PHY ID高只读PHYID20x03PHY ID低只读ANAR0x04自动协商通告0x01E1支持10/100/1000全双工ANLPAR0x05链路伙伴能力只读扩展地址0x1E扩展寄存器地址写入目标扩展地址扩展数据0x1F扩展寄存器数据读写数据配置RGMII模式时需要写扩展寄存器选择接口模式。配置SGMII模式时除了接口选择还要配SerDes参数。具体位定义我建议直接查手册的寄存器章节因为不同版本差异较大写错了可能不工作。4.4 用寄存器读写定位问题的思路寄存器读写是PHY调试的基本功。我的思路是先读PHY ID确认通信正常再读状态寄存器确认链路状态然后读错误计数寄存器定位问题方向最后读配置寄存器确认配置正确。举个例子如果link不上先读BMSR的bit2如果是0说明没link。然后读扩展寄存器的铜口状态看是哪个速率没协商上。再读自动协商寄存器看通告的能力对不对。这样一步步缩小范围比盲目换芯片有效得多。5. 硬件设计和PCB布局的实战经验5.1 电源和时钟方案的选择YT8521S需要几路电源核心电压、IO电压、模拟电压。具体电压值查手册一般是1.2V、2.5V或3.3V、1.0V之类。电源设计要注意几点模拟电源和数字电源分开用磁珠或电感隔离。每路电源加足够的去耦电容靠近芯片引脚。电源纹波要小PHY对电源噪声敏感纹波大了会影响信号质量。时钟方案有两种一种是外部晶振直接给PHY提供25MHz或50MHz参考时钟另一种是用MAC提供的时钟。我一般用外部晶振因为独立时钟更稳定不受MAC影响。晶振要选低抖动的抖动大了会影响千兆性能。5.2 变压器和RJ45的选型要点变压器是PHY和网线之间的隔离和阻抗匹配器件。选变压器要注意匝比要匹配通常是1:1。支持千兆速率带宽足够。共模抑制比高减少共模干扰。集成共模扼流圈更好。RJ45选带屏蔽的金属外壳接地能改善EMC。变压器和RJ45之间的走线要短差分对等长阻抗100欧姆。5.3 差分走线和EMC注意事项MDI侧的差分走线是模拟信号对布局敏感。我的经验差分对等长误差5mil以内。差分阻抗100欧姆用阻抗计算工具算线宽和间距。远离时钟线和电源线避免串扰。参考平面完整不要跨分割。变压器下方挖空减少寄生电容。EMC方面共模干扰是主要问题。可以在变压器中心抽头加共模电容到地或者在RJ45外壳加TVS管。我实测过加共模电容后辐射发射明显降低。5.4 散热和工业级应用的额外考虑YT8521S功耗不大一般不需要额外散热。但工业级应用要注意温度范围-40到85度下参数会漂移设计时要留余量。另外工业环境干扰大建议加TVS和共模滤波提高可靠性。6. 实测调试和常见问题复盘6.1 从点灯到跑满千兆的完整流程我的调试流程一般是上电测各路电源正常。复位PHY读PHY ID确认MDIO通信正常。配置接口模式RGMII或SGMII。配置自动协商等待link up。读链路状态确认速率和双工。跑ping测试确认基本连通。跑iperf大流量确认吞吐和丢包。抓眼图或误码率确认信号质量。做EMC测试确认辐射和抗扰度。这个流程里第2步是基础第3步是关键第7步是验证。每一步都要确认通过再往下走否则问题会累积。6.2 几个典型故障的根因分析我整理了几个实际遇到的故障故障现象根因解决方案link灯不亮SGMII模式配反IP核改MAC模式ping通但大流量丢包RGMII时序模式不匹配两边统一延迟模式读不到PHY IDPHYAD引脚悬空上下拉配置地址千兆协商不上变压器带宽不足换千兆变压器EMC辐射超标共模干扰加共模电容和TVS这些故障里前三个是配置问题后两个是硬件问题。配置问题查寄存器和模式硬件问题查器件和布局。6.3 调试工具和仪器的使用心得调试PHY常用的工具示波器抓RGMII时序和SGMII眼图带宽至少1GHz。万用表测电源和静态电平。MDIO读写工具可以用FPGA或MCU写脚本也可以用专用工具。iperf测吞吐和丢包。协议分析仪抓包分析协议问题。我的心得是示波器一定要用高带宽的低带宽抓SGMII眼图根本看不清。MDIO读写工具要能批量读写寄存器方便对比。iperf要跑长时间短时间看不出偶发丢包。6.4 批量生产中的一致性问题批量生产时PHY的一致性问题主要来自器件批次和PCB工艺。我的做法每批板子抽检PHY ID和链路状态。关键寄存器配置固化在固件里避免人为错误。PCB阻抗控制要求板厂提供测试报告。老化测试跑24小时筛出早期失效。这些措施能减少批量问题但不能完全避免。遇到批量问题时先对比好板和坏板的寄存器值往往能快速定位。7. 一些容易被忽略的细节7.1 复位时序和上电顺序YT8521S的复位引脚要保证足够的低电平时间通常至少10ms。上电顺序也有要求一般是先供电再复位复位释放后等待内部PLL锁定再配置寄存器。如果复位时间不够PHY可能工作不正常。我遇到过复位时间只有1ms导致PHY不工作的情况延长到20ms后正常。这个细节手册里可能写了但容易被忽略。7.2 自动协商和强制模式的取舍自动协商是默认推荐的方式兼容性好。但有些场景下自动协商会出问题比如对端设备协商能力有限或者链路中间有转换器。这时候可以强制模式直接配成1000M全双工跳过协商。强制模式的缺点是如果对端不支持链路起不来。所以一般先用自动协商有问题再强制。7.3 低功耗模式和唤醒YT8521S支持低功耗模式可以通过寄存器配置。低功耗模式下功耗降低但唤醒需要时间。如果应用对功耗敏感可以用这个模式如果对响应速度要求高就别用。7.4 和不同MAC配合的兼容性YT8521S和不同MAC配合时兼容性问题主要来自时序和模式。我的经验是先确认MAC的接口类型和时序模式再对应配置PHY。如果MAC支持内部延迟调节优先用内部延迟减少PCB依赖。和FPGA配合时SGMII IP核的模式配置是关键。和国产ARM配合时RGMII的时序模式要对齐。和交换芯片配合时SGMII的自动协商和寄存器配置要匹配。这些细节看起来琐碎但每一个都可能让你多花几天时间。我的建议是调试前先把手册的寄存器章节和时序章节读一遍把关键配置列成清单逐项确认。这样比遇到问题再查手册效率高得多。最后分享一个我自己的习惯每调完一颗PHY我都会把关键寄存器的值和配置过程记录下来形成自己的调试笔记。下次遇到类似问题翻笔记比翻手册快。YT8521S这颗芯片我前后调过五六版板子笔记里记了十几个坑现在再调基本一次过。希望这篇内容能帮你少走点弯路。
返回列表