ARTICLE DETAIL

资讯详情

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

SR8201F以太网PHY调试实战:从机贴失败到稳定运行

SR8201F以太网PHY调试实战:从机贴失败到稳定运行 1. 为什么在一堆PHY芯片里选中了SR8201F做硬件的人应该都有感触这两年“国产化替代”不是口号是实打实的KPI。我手头这个项目要从国外某款PHY芯片切换到国产方案需求很明确工业级温度范围、10/100M自适应、RMII接口、最好引脚兼容性强能直接替换现有设计。一开始的候选名单里有好几个LAN8720A经典但贵且缺货严重、DP83848老牌但功耗偏大、RTL8201F台湾系不算严格意义的国产最后锁定了SR8201F。选择它的原因不复杂总结下来三条引脚基本兼容RTL8201F/LAN8720APCB改板工作量小原来用LAN8720A的板子甚至可以不换封装直接贴单路10/100M以太网PHYRMII/MII接口都支持供电3.3V工业级温度范围-40℃~85℃符合项目的户外使用场景价格优势明显交期稳定代理商技术支持响应也算及时。坊间有说法是SR8201F某些寄存器地址和LAN8720A高度相近这在实际调试中确实省了很多事。但省事的前提是你得先把硬件跑通而我这次恰恰就栽在“硬件跑通”这个环节上。我的建议是如果项目周期紧不要盲目追求“上电即通”国产PHY芯片的坑往往不在芯片本身而在封装生产、PCB设计、寄存器初始化时序这些外围环节。先把这些坑看明白后面会省心很多。2. 机贴失败0.5mm引脚间距在SMT产线翻车的根因复盘2.1 现象上电后芯片滚烫网口灯不亮交换机端口也不亮第一版PCB打样后直接送SMT产线机贴回来插上网线交换机端口灯不亮板子上的网口指示灯也不亮。用手摸SR8201F表面烫得厉害——正常工作温度不该这么高。用万用表测3.3V对地阻抗只有几十欧明显存在短路。这个现象第一反应是芯片坏了。但一次性焊了20片总不能全坏。用热成像仪扫了一眼板子发热点集中在芯片区域于是锁定问题在焊接环节。2.2 根因QFN-32封装焊盘间距太小钢网开孔和贴片精度双重翻车SR8201F主流封装是QFN-32引脚间距只有0.5mm。这个间距在消费电子产线上不算极端但如果你合作的SMT工厂工艺能力一般或者钢网开孔没有针对性优化就很容易出问题。具体到我这批板子拆开不良板后发现两个问题钢网开孔宽厚比不合适锡膏印刷后有桥连残留回流焊时相邻引脚被焊锡连在一起贴片机识别QFN封装时因为芯片底部散热焊盘EPAD和四周引脚的高度差识别精度不够导致引脚偏移进一步加剧桥连。QFN-32的EPAD如果设计成和引脚共用同一钢网开口回流焊时焊锡会顺着热过孔流到背面甚至造成芯片浮起俗称“墓碑”让引脚悬空。检查我的PCB封装库EPAD开窗和过孔确实处理得不够讲究。2.3 解决改钢网人工补焊PCB封装库同步优化产线上的修正方案重新开钢网QFN-32区域按0.4mm间距标准设计EPAD开孔面积缩小到原来的60%避免焊锡过多溢出刷锡膏后增加AOI检测工位提前拦截桥连对已经贴坏的板子用热风枪吹下芯片清理焊盘后人工补焊植锡时严格控制锡球大小。PCB封装库这边同步做了优化EPAD热过孔改成“底部塞孔表面开窗小”的结构焊盘间距按IPC-7351B标准重新量了一遍。改完之后贴了10片样机焊接不良率从50%降到0。提示QFN封装焊接问题不要急着怪芯片。用万用表蜂鸣档逐一量相邻引脚外加热成像找热点基本两分钟内能判断是不是桥连。3. 网线插上去毫无反应从电源、时钟到复位的一轮轮排查3.1 先把供电、时钟、复位这三座大山搬掉焊接问题解决后第二批板子上电芯片温度正常了但网口依然不通。插网线交换机端口的灯闪了一下灭掉板子端网口灯完全不亮。我按老套路来排查顺序是电源→时钟→复位→MDIO→数据线。电源方面SR8201F的VDDIO和VDD33供电都是3.3V实测万用表读数是3.29V纹波用示波器看50MHz带宽内大约30mV这个水平是合格的。电源没毛病。时钟方面SR8201F支持外接50MHz有源晶振或25MHz无源晶振RMII模式需要50MHz参考时钟可以由MAC侧提供也可以由PHY产生。我用的方案是外部25MHz无源晶振由PHY内部PLL倍频至50MHz提供给MAC。示波器夹在晶振引脚上波形幅度1.8V左右频率25.003MHz起振正常。复位方面NRST引脚用10kΩ电阻上拉到3.3V上电后由MCU的GPIO控制复位时序拉低至少10ms再释放。这些都没问题。3.2 MAC和PHY的RMII接口对不上时钟极性和参考时钟源方向是大坑电源时钟复位都没问题后我用逻辑分析仪抓了RMII接口的TX_EN、TXD0、TXD1信号发现MAC侧根本没有数据输出。这就奇怪了MAC初始化明明已经执行了。最后来回翻了SR8201F手册和MCU参考手册发现问题出在“RMII参考时钟来源”的配置上。RMII接口的50MHz参考时钟可以由以下几种方式提供MAC提供50MHz时钟给PHY的REF_CLK引脚PHY使用外部50MHz有源晶振同时输出给MACPHY使用25MHz无源晶振内部倍频到50MHz后输出给MAC。我的硬件设计是方案三PHY输出REF_CLK给MCU。但MCU侧的RMII外设配置时我把时钟极性配反了——MCU默认在上升沿采样而SR8201F的REF_CLK输出在某些配置下是和TXD/TXEN对齐的下降沿变化导致采样数据全乱。修改方式是在MCU的RMII配置寄存器里把时钟极性Clock Polarity从上升沿改为下降沿采样或者调整驱动里的对应位。这里不同MCU的寄存器定义差别很大STM32是在ETH_RMII_Clock_Edge里配置GD32类似复旦微的Z7系列则在CRP寄存器里。注意设计RMII电路前先确认参考时钟是谁给谁然后在MAC侧明确配置时钟沿。两个芯片手册各说各话对接时最容易栽在这里。3.3 串口调试助手看不到PHY寄存器先把MDC/MDIO时序拉出来遛遛RMII时钟极性改对后MAC开始输出数据帧了但依然ping不通。这时候需要确认PHY链路是否建立——直接读PHY寄存器是最快的方式。我习惯用MDC/MDIO调试助手或者逻辑分析仪抓时序。SR8201F的MDIO地址默认为0x01部分版本为0x00具体看芯片丝印批次如果读寄存器0x00BMCR和0x01BMSR能返回有效值说明MDIO通信正常。当时我读BMSR返回0xFFFF这通常意味着MDIO没读到芯片总线悬空或者PHY地址不对。逐一排查后发现是MDIO引脚的上拉电阻没焊数据线开漏输出时浮空导致读操作不稳定。补上4.7kΩ上拉电阻后BMSR读回0x002Dbit2链路状态、bit5自动协商完成都为1说明PHY本身已经link up了。这时候交换机端口灯应该亮了但实测还是不亮。问题出在网口变压器Ethernet Transformer的抽头接法。SR8201F的差分线对中心抽头需要按手册要求接电源或地不同芯片要求的偏置电压不同。LAN8720A是中心抽头接3.3V而SR8201F要求中心抽头经过RC到地。我按LAN8720A的老设计抄板结果自然不对。改板后重新打样插上网线交换机端口灯终于常亮板子网口灯也亮了。到这里硬件链路才算是真正打通了。4. 杜邦线救场把QFN芯片“飞”起来验证芯片本体的正确姿势4.1 为什么机贴失败后我选择用杜邦线飞线验证前面提到的第一批机贴失败的板子焊接不良率50%剩下那50%也不是所有网口都通。有些板子插上网线后PHY能link但ping大包丢包严重怀疑是焊接虚焊导致信号质量差。如果直接返修热风枪吹QFN-32封装容易把PCB焊盘吹掉。我当时的判断是先别急着修板子得确认SR8201F这颗芯片本身是不是好的。怎么确认搭一块最小系统板。最小系统板方案找一块现成的STM32F407核心板带RMII接口用杜邦线把STM32的RMII信号线TXD0、TXD1、TX_EN、RXD0、RXD1、RX_EN、REF_CLK、MDC、MDIO连到SR8201F的对应引脚SR8201F这边焊一块QFN-32转DIP的转接板外围电路晶振、复位、上拉电阻、网络变压器、RJ45座按手册搭好用杜邦线连接时地线一定要多接几根信号线越短越好。4.2 杜邦线飞线调试的操作要点和坑可能有人觉得以太网100M的信号用杜邦线飞线这不是搞笑吗信号完整性不炸才怪。实际我测下来RMII接口的TXD/RXD是单端信号速率50MHz在杜邦线长度控制在10cm以内、地线成组铺设的情况下勉强可以工作。注意是“勉强”——只能做功能验证不能做性能测试。飞线调试的几个关键点电源和地先用粗杜邦线或直接焊接至少4根以上的地线分布在信号线两侧形成回流路径50MHz的REF_CLK线尽量短不要和TXD、RXD绞在一起否则串扰严重PHY会频繁丢包MDIO和MDC可以长一点这两个信号速率低2.5MHz杜邦线没太大压力网络变压器和RJ45座务必靠近PHY芯片放置次级侧到RJ45的差分线不要飞线直接在转接板上走线。搭好线后用串口调试助手配合MDC/MDIO调试助手先读PHY寄存器确认通信再配好MAC地址直接用网络调试助手发UDP包互ping。实测结果杜邦线飞线状态下SR8201F能正常协商到100M全双工ping 1000字节的包连续ping了半小时丢包率约1%这个成绩在我的预期范围内。说明芯片本体是完好的之前的问题确实都在PCB焊接和外围电路设计上。用转接板飞线验证实际上帮我绕开了SMT产线的不可控因素把变量压缩到最小快速确认了芯片好坏。这套方法在以后调任何QFN封装的芯片时都能复用。5. MDIO/MDIC通信打通寄存器读写是PHY调试的第一道分水岭5.1 SR8201F寄存器地图和几个关键寄存器位PHY调试的核心是寄存器读写。SR8201F遵循IEEE 802.3标准的基本寄存器定义0x00~0x04这几个寄存器在几乎所有PHY芯片上都通用。寄存器地址名称关键位调试用途0x00BMCRbit15软复位、bit13速度选择、bit12自动协商使能、bit8全双工配置PHY工作模式0x01BMSRbit5自动协商完成、bit2链路建立判断link状态0x02PHYIDR1厂商ID高16位确认芯片识别的ID0x03PHYIDR2厂商ID低16位型号区分具体型号0x04ANAR自动协商能力通告查看支持的速率模式调试时第一步先读0x02和0x03SR8201F的PHYIDR应该是0x0022和0x1601不同批次可能略有差异如果读出的ID不是这个检查MDIO地址是否正确、有没有读到其他设备。第二步读0x01查看bit5和bit2。如果bit51且bit21说明PHY完成了自动协商并且链路已建立。如果bit20说明物理链路有问题回头检查网线、变压器、RJ45座。第三步写0x00先置bit15为1发起软复位等待bit15自动清0再按需配置bit13、bit12、bit8。我习惯把自动协商打开让PHY自己协商到最佳速率而不是强制设成100M全双工。因为强制模式下如果对端是10M设备会协商失败。5.2 MDIO时序不对时如何借逻辑分析仪定位MDIO的坑主要集中在时序上。规范要求MDC最高频率2.5MHz实际操作中我见过有人为了省事直接把MDC接到MCU的某个PWM输出频率跑到12.5MHz结果PHY完全不响应。MDIO时序验证步骤先确认MDC频率示波器量一下高于2.5MHz就是超频了MDIO数据在MDC上升沿采样因此MCU需要在MDC上升沿前把数据准备好用逻辑分析仪抓MDC和MDIO看读操作时第2~6位是5位地址PHY地址第7~11位是5位寄存器地址第12~13位是操作码读为10写为01数据在后面的16位里如果抓到的数据全0xFFFF基本就是PHY地址不对或MDIO上拉电阻缺失。这里有个小技巧如果MDC/MDIO信号线到PHY的距离超过3cm我建议串接33Ω的电阻并在PHY侧加一个小电容到地滤掉反射噪声。飞线调试时尤其明显——不串电阻MDIO读回来的数据偶尔会跳变。6. 网络灯、链接状态与中断驱动层最容易踩的三个隐性坑6.1 网络灯不亮不一定代表没连上很多工程师一看到网口灯不亮就慌了。实际上PHY芯片的LED引脚是可配置的SR8201F的LED引脚默认是“link/activity”模式但如果你的MCU初始化代码里通过寄存器把LED模式改成了其他组合灯就不按你预期亮。我当时遇到的情况是PHY已经link up了但板子上的网口灯不亮。读寄存器0x1F某些型号是0x18发现LED配置寄存器的值被默认配置成了“全灭”模式。于是通过MDIO往该寄存器写入0x0001把LED0配置为链路指示LED1配置为活动闪烁问题解决。常见LED模式配置参考0x0000LED0linkLED1activity手册推荐默认0x0001LED0linkLED1duplex0x0002LED0activityLED1link两灯互换0x0003全灭某些厂商默认值如果你发现网线插上后PHY寄存器显示link up但灯不亮优先查LED配置寄存器不要急着怀疑硬件。6.2 中断脚悬空误触发MCU频繁进中断SR8201F的INT引脚是开漏输出需要在外部接上拉电阻。我的第一版设计没有接这个上拉结果MCU的GPIO配置成输入模式后INT引脚浮空电平随机跳变导致MCU频繁进入以太网中断服务函数系统主循环卡死。处理方法INT引脚接一个10kΩ上拉到3.3VMCU侧配置为下降沿触发中断。中断处理函数里读状态寄存器确认事件类型处理完再清标志。如果不需要PHY中断直接把INT引脚悬空也行但MCU侧必须配置成“不上拉也不下拉”的模拟输入或禁用该GPIO避免浮空误触发。6.3 自动协商慢/失败尝试把ANEG定时器调短项目现场遇到的另一个问题是设备接入某些老旧交换机时link up需要等十几秒有的甚至link不上。这通常是自动协商过程异常。SR8201F的自动协商有个定时器可以配置协商超时时间和重试次数。我把ANEG定时器从默认的300ms调整到200ms重试次数从默认5次调整到8次结果在老旧交换机上的link速度明显改善。具体寄存器配置因芯片批次而异建议直接问原厂FAE要参考值不要自己瞎试。调完记得做兼容性测试有些参数改小后会引入新的问题。7. SR8201F调试后续从能ping通到稳定运行的性能调优清单7.1 大包拥塞和小包风暴测试功能通了之后别急着交付先做一晚上的稳定性测试。我用网络调试助手开了一个UDP发送线程连续12小时向设备发送随机大小的数据包同时监控丢包率和往返延迟。实测下来SR8201F在默认配置下大包1472字节表现尚可但小包64字节连续风暴时偶尔会出现FCS错误。排查后发现是PCB上RMII信号线等长没做好TXD和RXD两组线长度差超过15mm导致信号建立时间不足。解决方法是软件层调整RMII接口的发送延迟TX Delay在MAC侧把TXD信号延迟半个时钟周期后输出。STM32的RMII接口没有这个配置项但GD32的某些型号有SR8201F手册里也提到可以通过寄存器0x0D bit2调整上升/下降沿对齐。我最终在PHY侧寄存器里把数据输出沿调到了下降沿解决了FCS错误。7.2 实际项目中我和SR8201F的最终分工整个调试周期大约一周从机贴失败到杜邦线飞线验证再到最后一版PCB改板回来稳定运行踩了很多坑但也把这颗芯片的脾性摸清楚了。现在SR8201F在我这个项目里的定位是10/100M自适应以太网PHY通过RMII接口与MCU连接主要用于设备远程配置、状态上报和固件升级。关于这颗芯片的最终建议不要迷信“引脚兼容”外围电路设计必须严格按SR8201F手册来特别是变压器中心抽头接法QFN封装量产前一定让SMT厂确认钢网开孔方案最好打样时多留几片手工焊接的板子做对照MDC/MDIO引脚务必加上拉电阻调试前期省下的这些“小钱”后面会花几倍时间还回来LED配置寄存器不是默认就能用驱动初始化时主动写一遍别靠默认值杜邦线飞线不能承担性能验证任务但它能把“芯片坏了”还是“电路设计错了”这个元问题快速切开强烈建议常备一块QFN-32转DIP转接板。做硬件调试就是这样90%的时间在怀疑自己10%的时间在证实怀疑。SR8201F这颗芯片本身没那么难搞难的是它周围那一圈看似不起眼的外围细节。希望这篇踩坑记录能帮你少走几段弯路后面等着你的就是“一次点亮”的好消息。
返回列表