ARTICLE DETAIL

资讯详情

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

SR8201F国产百兆PHY芯片调试避坑指南:QFN焊接与飞线经验全记录

SR8201F国产百兆PHY芯片调试避坑指南:QFN焊接与飞线经验全记录 做嵌入式硬件这几年国产PHY芯片是越用越多但每一颗新芯片背后几乎都藏着几宿的失眠和一堆“早该知道”的教训。这次要聊的是SR8201F一颗国产百兆以太网PHY芯片。事情从一块采集板说起板子贴片回来焊接出了问题最后靠一把烙铁和一排杜邦线把网口救活了整个过程踩坑无数今天把这些经历整理成一份避坑指南希望能让后来的人少走几趟弯路。先说结论这颗芯片本身并不难用标准RMII接口标准MDIO管理接口寄存器兼容IEEE 802.3 Clause 22规范只要硬件上没有硬伤软件基本一遍过。问题是硬件的不确定性实在太多尤其是QFN封装的手工焊接、飞线调试、时钟树配置这几个环节任何一个出问题都会让整个系统看起来“像坏了”但其实没坏。这篇文章会从选型、原理图设计、PCB焊接、飞线调试、驱动联调、常见问题排查这几个维度完整还原这次的调试过程。1. 为什么选SR8201F项目背景与选型思路1.1 国产百兆PHY能替代谁当时这个项目的需求其实很简单一块STM32控制板需要提供以太网接口用于上位机通讯和数据采集跑TCP/IP协议栈速率要求不高百兆完全够用。正常情况下很多人第一反应会用LAN8720A这颗芯片确实经典资料多、例程多、用的人多网上随便一搜就是一堆demo。但当时正好赶上这颗料缺货涨价而且项目对国产化率有硬性要求所以开始找国产替代方案SR8201F就是在这时候进入视野的。SR8201F单看指标10/100M自适应支持RMII和MII两种MAC接口QFN32封装内置LDO3.3V单电源供电IEEE 802.3u标准HP Auto-MDIX自动翻转工作温度范围也够宽。最关键的是它和LAN8720A的引脚定义、功能寄存器高度相似硬件替换成本很低。实测下来这颗芯片确实没有辜负期待稳定性尚可底层驱动流程基本可以照搬LAN8720A的思路。1.2 RMII和MII两种模式怎么选PHY芯片的MAC接口一般都有两种工作模式MII和RMII。MII模式信号多TXD[3:0]、RXD[3:0]、TX_ER、RX_ER、CRS、COL加起来一堆线接口速度快但布线占地方对MCU的引脚要求也高。RMII模式信号少数据线只有TXD[1:0]和RXD[1:0]再加上TX_EN、CRS_DV、REF_CLK、MDIO、MDC总共才7根线。这次项目用的是STM32H750自带以太网MAC控制器支持MII和RMII两种模式。实际选型时毫不犹豫选了RMII原因很简单引脚少、布线压力小、主控外设配置也简单。但RMII有个需要特别注意的地方就是50MHz参考时钟的来源。1.3 主控侧和PHY侧怎么分工在RMII模式下MAC和PHY必须共用一个50MHz参考时钟。这个时钟可以由外部50MHz有源晶振产生也可以由PHY芯片自己产生。SR8201F上有个CLKOUT引脚可以直接输出50MHz参考时钟给MAC这个方案最省事也是这次项目采用的方式。时钟方向确定了之后整个信号链路就清晰了SR8201F的XIN引脚接25MHz无源晶振PHY内部倍频到50MHz然后从CLKOUT引脚输出给STM32的ETH_RMII_REF_CLK引脚。至于为什么选25MHz晶振而不是直接给50MHz主要原因是无源晶振方案成本更低而且PHY内部本身就带PLL25MHz进去也能正确输出50MHz时钟。2. 硬件上最容易踩的几个坑原理图和PCB细节2.1 RMII时钟到底怎么给时钟这部分我一开始差点踩了一个坑。看SR8201F的数据手册时发现它的XIN引脚既支持25MHz晶振也支持直接输入50MHz时钟而CLKOUT引脚则可以输出50MHz给MAC。当时犹豫过要不要用外部50MHz有源晶振同时喂给PHY和MAC这样信号质量更可控。后来咨询了做过这颗芯片的同行给的结论是能用PHY内部PLL输出就别外挂有源晶振原因有两点。第一SR8201F的CLKOUT输出能力足够驱动RMII接口的时钟负载实际测量波形质量也还可以不需要额外加缓冲第二有源晶振会增加BOM成本和PCB面积而且如果两边时钟相位差控制不好反而会引入新的问题。最终采用25MHz晶振加CLKOUT输出的方案实测稳定没有问题。这里有一个细节值得注意CLKOUT到MAC的REF_CLK走线长度尽量短建议小于10mm如果做不到至少保证这根本信号线不要跨越其他高频信号线也不要穿过电源区域。飞线调试时这根线也要单独一根杜邦线不要和别的信号线绞在一起。2.2 电源和去耦的讲究SR8201F支持3.3V单电源供电内部LDO会把电压降到1.8V给核心电路使用这类PHY芯片对电源纹波还算敏感尤其是模拟收发器部分的电源如果纹波太大会导致丢包和误码率升高。原理图上电源入口处放一个10uF钽电容和一个0.1uF陶瓷电容并联每个电源引脚旁边再放一个0.1uF的瓷片电容这是常规做法。另一个容易忽略的点是PHY的地和数字地怎么处理。这里推荐直接单点接地不要分割地平面PHY芯片下方的地平面要完整不要走线穿过。对百兆以太网来说只要不把地平面切碎干扰问题一般不大。2.3 网络变压器和RJ45百兆以太网的PHY芯片通常都要外接网络变压器负责信号耦合、电平转换和隔离。SR8201F的输出引脚TXP、TXN、RXP、RXN需要按差分对连接到变压器对应引脚。这次板卡用的是一体化RJ45座子内部集成了网络变压器型号是HR911105A这种座子好处是省事缺点是一旦变压器坏了整个座子都得换。网络变压器选型时要注意两次侧的阻抗匹配百兆用的是1:1的变压器中心抽头的接法一般按照数据手册推荐来不要自己随意改。另外TXP/TXN和RXP/RXN这两对差分线在PCB上要等长、紧耦合差分阻抗控制在100欧姆左右。飞线调试阶段这两对差分线用杜邦线飞出来之后信号质量确实会变差但实测几百兆bps下短距离通讯还是能工作的这个后面会详细说。2.4 PCB布局和地平面提到PCB布局这次有点丢人。为了赶交期板子布局比较紧凑PHY芯片放在了板子边缘网口座子在旁边走线时RX差分对跨过了一个电源走线TX差分对和CLKOUT走线靠得太近。虽然板子最终能跑通但信号质量确实受到了影响用示波器看CLKOUT波形时发现上升沿有轻微抖动。如果重新画板子这两个问题一定会调整。如果你现在正在画SR8201F的板子建议遵循这几个原则PHY芯片尽量靠近网口座子让差分线走线最短CLKOUT走线远离TX差分对整个PHY周围的地尽量铺铜晶振放在PHY芯片旁边走线短且包地。这些细节在调试阶段不会立刻暴露问题但会直接影响产品的长期稳定性。3. 机贴失败实录QFN焊接翻车了3.1 问题是怎么暴露的板子送去贴片回来后第一件事就是上电测试。结果电源正常MCU能启动串口有打印但网口就是死活Link不上。用万用表量了一下SR8201F的供电引脚电压正常但量到PHY的复位引脚时发现电平异常再仔细看芯片旁边有明显的助焊剂残留痕迹。拿放大镜一照发现问题大了芯片的四边引脚存在大量虚焊和连锡现象个别引脚甚至完全没接触到焊盘。QFN32封装的引脚在芯片底部侧面焊接时如果钢网开孔精度不够或者回流焊温度曲线设置不合理很容易出现这种问题。当时板子赶时间钢网开口做了常规尺寸没有针对QFN焊盘做特殊处理结果就翻车了。3.2 返修惨案发现问题后第一反应是找回流焊厂家返修但那几天正好赶上工厂产能紧张排期要等一周项目等不起。于是决定自己用热风枪处理。热风枪吹焊这种活平时补补焊还行遇到QFN整片拆焊和重焊成功率真的要看运气。第一次吹下来芯片之后清理焊盘时手抖把一个0.1uF旁路电容吹飞了怎么也找不回来。后来从废板上拆了一个电容补上再刷助焊剂吹回去结果还是不行。反复折腾了两天最后得出结论这批板子问题太严重不值得继续返修。但手头又没有多余的贴片板只有几块裸板。正当准备重新下单打样时注意到手边有几根杜邦线于是灵机一动干脆直接把PHY芯片飞线到主控板不贴装了。这个想法一开始觉得有点疯狂但深思熟虑后其实完全可行毕竟RMII接口总共才7根信号线加上电源和复位最多12根线。于是就有了后面的杜邦线救场实验。3.3 焊接检查的几个实用方法这段经历也让我深刻体会到贴片回来的板子不能盲目上电先做检查很重要。现在的习惯是新的QFN封装芯片焊好后会先用万用表量一下几个关键节点的对地阻抗比如电源引脚对地阻抗、复位引脚电平、时钟引脚是否有输出。如果万用表量不出问题再用放大镜逐个检查引脚焊接情况。这里分享一个小技巧QFN芯片的引脚都在底部正面很难判断是否虚焊可以尝试用万用表的二极管挡测芯片引脚和焊盘之间的导通性如果示数异常大或者开路大概率是没焊好。另外一个更直接的办法上电后用示波器量芯片的CLKOUT引脚如果没有时钟输出大概率是芯片没正常工作。4. 杜邦线救场手工飞线方案完整记录4.1 飞线前先做减法只留必要引脚确定要飞线后第一步是梳理SR8201F哪些引脚必须接。翻了一遍数据手册结合RMII接口定义列出了下面这个必要引脚清单电源类VDD3.3V、GND多个引脚RMII接口类TXD0、TXD1、TX_EN、RXD0、RXD1、CRS_DV、REF_CLKCLKOUT管理接口类MDC、MDIO控制类RESET_N复位引脚低有效时钟类XI、XO接25MHz晶振其他引脚比如LDO输出、LED指示、测试模式脚、中断引脚能省的都省了。这里特别注意PHY芯片的芯片使能或测试模式引脚如果有需要按数据手册推荐方式接固定电平否则芯片可能进入异常模式。我的做法是仔细阅读手册把不用的引脚按推荐电路处理比如通过电阻拉到电源或地而不是悬空。4.2 飞线实操和固定具体操作时我先把SR8201F单独焊在一块小转接板上因为直接在原来的PCB焊盘上飞线焊盘位置太密集很容易连锡短路。小转接板是洞洞板用热风枪把芯片吹上去确认每个引脚都焊好之后再从转接板上的引出孔接杜邦线到主控板。这里分享几个经验杜邦线长度要尽量短这次飞线最长的线大约15cm虽然能正常工作但如果能更短信号质量会更好。杜邦线选用母头对公头的跳线先焊在转接板插针上另一头直接插到主控板的排针上。所有信号线全部一一对应不要交叉。飞线分组很重要。电源线用红色地线用黑色信号线按功能分组捆扎。TXD0、TXD1、TX_EN是一组RXD0、RXD1、CRS_DV是一组MDC和MDIO是一组时钟线单独走。分组捆扎的好处是排查问题时能快速理清信号走向。地线尽量多飞几根。原来的PCB上芯片周围有好几个GND引脚全部用杜邦线接到主控板的GND。地线是信号的回流路径地线多了信号完整性会好很多。实测下来三根以上地线并联时网络通信非常稳定。晶振要尽量靠近芯片。25MHz晶振放在转接板上紧挨着SR8201F的XI和XO引脚晶振两个引脚到芯片引脚的杜邦线不要超过3cm。晶振下面是地平面转接板没有完整地平面所以我在晶振区域下方垫了一片铜箔胶带接地算是一个土办法但确实有效。焊好之后用热熔胶把转接板和几组杜邦线固定在绝缘垫板上防止调试过程中拉扯脱落。这一步很有必要。4.3 上电点检和波形确认飞线完成后没有直接上主控程序而是先做了三个点检确认硬件基本正常。第一步万用表量电源对地阻值排除短路。第二步上电后量芯片各电源引脚电压是否正常尤其是内部LDO输出如果有的话量一下是否在1.8V左右。第三步示波器量25MHz晶振和CLKOUT输出确认时钟是否起振。如果这三个检查都通过了说明PHY芯片的硬件最小系统已经工作起来接下来就可以进行软件联调了。实测时晶振波形起振正常CLKOUT引脚输出了50MHz方波幅度接近3.3V上升沿虽有轻微过冲但还在可接受范围内。至此杜邦线方案宣告成功硬件这块是活了剩下就是驱动配置。5. MDIO和RMII联调从读到PHY ID到ping通5.1 上电复位和PHY ID读取硬件就绪后开始软件配置。我用的MCU是STM32H750以太网MAC自带RMII接口底层可以用ST的HAL库也可以用LwIP协议栈。既然PHY芯片是SR8201F驱动完全可以参考LAN8720A的流程因为它们的寄存器和行为模式高度相似。第一步是MDIO读写测试这个很关键也是PHY调试的门槛。如果这一步都过不了后面所有工作都是白搭。MDIO是一种双线管理接口MDC提供时钟MDIO传输数据。STM32直接通过GPIO模拟MDIO时序或者用MCU自带的ETH MAC去访问。我用的是GPIO模拟方式因为可以直接控制时序。读PHY ID的流程很简单往寄存器2和3读数据正常SR8201F应该能读到0x00008201之类的ID不同批次的ID可能有差异以实际读回为准。实际调试时第一次读回来的数据全是0xFFFF说明MDIO通信有问题排查后发现问题出在MDIO引脚的上拉电阻上加上4.7k上拉后MDIO读操作正常了。5.2 速度和协商配置读到PHY ID之后还需要确认PHY的工作模式。RMII模式下PHY需要配置成100M速率同时开启自动协商保证和对端交换机或PC网卡互通。这里的关键寄存器是寄存器0BMCRbit13配置速度为100Mbit12开启自动协商bit9开启自动协商重启。而SR8201F这类PHY一般默认就是开启自动协商的速度和双工模式会自动协商所以绝大多数情况下不需要额外配置只要确认PHY没被配置成强制10M模式就行。另外一个经常踩的坑是RMII模式设置。有些PHY芯片需要通过引脚电平或特殊寄存器来配置RMII或MII模式。SR8201F具体是哪种方式要看手册。我的经验是如果RMII模式下CLKOUT有输出但网络就是不工作可以重点查一下PHY的工作模式有没有被错误配置。5.3 网络参数和MAC配置PHY硬件层确认无碍后接下来配置STM32这一侧的以太网MAC。这里有几个必配项目MAC地址自己定义即可只要是有效单播地址就行比如 02:00:00:00:00:01RMII时钟源选择外部PHY提供的50MHz时钟这正是SR8201F的CLKOUT引脚双工模式默认自动协商和PHY一致帧格式和过滤开发阶段建议全部放开方便抓包之后就是初始化LwIP协议栈配置一个静态IP比如192.168.1.10然后用PC去ping。如果ping通说明整个链路已经OK如果ping不通则需要用Wireshark抓包看看是否有ARP广播发出或者是否有ICMP回包再逐层定位问题。5.4 联调结果这次联调比较顺利杜邦线飞线方案下动态IP也能正常获取网络连接稳定跑了一段时间的ping包测试最大延迟和丢包率都符合预期。用iperf或自写的socket程序测实际吞吐量百兆速率大概能跑到70-80Mbps左右飞线状态下算是出乎意料的好成绩了。这里多说一句SR8201F的LED指示灯引脚默认就能直接驱动LED如果PCB上有预留LED位置直接接上就能看到Link状态和收发活动状态。调试时这两个灯非常有用Link灯亮代表物理链路正常Act灯闪代表有数据传输。6. 调试中的常见问题排查速查表这次调试遇到的问题不少为了后面不再踩坑我整理了一份速查表基本都是经验之谈也结合了其他几位工程师做这颗芯片时遇到的问题。现象可能原因排查和解决思路PHY ID读不到MDIO读回0xFFFFMDIO引脚上拉缺失MDC时钟异常复位引脚拉住未释放检查MDIO/MDC引脚是否有4.7k上拉或下拉确认复位引脚已释放用示波器量MDC是否有时钟网络Link灯不亮网线接错变压器中心抽头接法不对PHY供电异常换一根确定好的网线重点检查变压器中心抽头到电源/地的接法确认VDD电压正常RMII接口无时钟输出CLKOUT引脚未使能晶振不起振PHY工作模式不对量25MHz晶振是否起振确认PHY是否进入RMII模式尝试重新上电复位Link up但ping不通MAC地址配置错误IP配置错误RXD/TXD信号接反CRS_DV信号异常用Wireshark抓包看是否有ARP和ICMP报文核对RMII信号线序示波器量RXD/TXD信号能发送不能接收RXD1/RXD0一根线断了CRS_DV极性或时序不对PHY速度协商到10M检查RXD两根杜邦线是否接触良好用示波器在发数据时量RXD信号查一下协商速度是否100M速度协商只有10M自动协商广告寄存器配置不对对端设备协商问题读寄存器4和5确认协商结果强制配置100M全双工测试ping有大量丢包飞线太长导致信号质量差电源纹波大地线不够缩短飞线长度增加地线电源端加电容滤波尝试降低速率温度一高就断网封装散热不良电源热稳定性问题QFN本身散热还行但要确认底部焊盘是否接地检查电源芯片热稳定性第二部分再补充几个实际操作里很容易忽略的小问题。一个是复位引脚的RC延时电路要确保时间常数足够一般建议大于10ms否则上电后PHY可能还没完全复位MAC就开始访问寄存器了。另一个是中断引脚如果不需要PHY的中断功能应将它通过电阻上拉到电源或下拉到地避免悬空产生误触发。还有一点想特别提醒不要盲目相信网线。调试过程中有个阶段Link灯一直不亮折腾了一上午最后发现是网线本身有问题换了一根就好了。排查问题时先换线、换孔、换对端设备把“人的问题”排除干净再动硬件和软件。7. 几个值得养成的调试习惯这段经历之后有几个习惯我一直保持到现在对SR8201F这类PHY芯片的调试帮助很大。第一个习惯是先点亮时钟。拿到一颗PHY芯片不管其他功能是否正常先把晶振和CLKOUT输出弄出来用示波器量到稳定时钟这个芯片的“心跳”就有了。如果时钟没有一切免谈。这次如果不是先确认了CLKOUT有50MHz输出后面的调试方向可能全错。第二个习惯是MDIO寄存器逐个读出来看。开发调试阶段至少要把REG0到REG5这几个标准寄存器读一遍确认自动协商状态、Link状态、速率模式是否正常。这些寄存器里的位定义在标准802.3规范里写得很清楚。想省事的话可以用现成的调试助手我常用串口或者带网络功能的调试工具去读寄存器非常方便。第三个习惯是善用Wireshark。网络联调阶段不要瞎猜打开Wireshark抓包看看有没有ARP请求有没有ICMP请求/应答如果只有请求没应答问题大概率在接收路径或者是协议栈配置。如果连ARP都没有问题可能在物理层或者MAC初始化。第四个习惯是每次修改只改一个变量。飞线阶段信号质量不好时很容易焦躁同时换了几根杜邦线、移动了晶振位置、改了驱动参数结果就是问题可能解决了但到底谁起的作用完全不知道。这次我每次只调一个因素等稳定后再动下一个排查效率反而高很多。
返回列表