
做嵌入式网络开发这几年调试PHY芯片算是绕不开的硬骨头。尤其是国产PHY价格香、供货稳但资料和调试经验往往比国际大厂少一大截SR8201F就是典型代表。这颗芯片在不少国产板卡和降本方案里出镜率很高但我发现很多人第一次调它时都卡在同一个地方明明硬件照着参考设计画的寄存器也能读写可网络就是不通或者通了一会儿又掉线。这篇文章我就把从硬件设计到LWIP移植的完整流程捋一遍把我实际踩过的坑和验证过的方案都写出来给正在折腾这颗芯片的朋友做个参考。SR8201F是一颗10/100M自适应以太网PHY芯片支持RMII和MII两种MAC接口内部集成LDO和阻抗匹配电阻外围电路比老一代PHY简洁很多。它和瑞昱的RTL8201F在寄存器层面基本兼容很多ST官方评估板上用的就是这颗芯所以只要你会调RTL8201FSR8201F基本能无缝上手。但“基本兼容”不等于“完全一样”实际调试中还是有几个坑后面会专门说。这篇内容适合正在做STM32、GD32等MCU以太网方案的朋友也适合想把板子从进口PHY换成国产PHY的硬件工程师。软件部分我会以STM32H723LWIP为例因为H7系列带硬件MAC配合SR8201F做RMII接口是当前很常见的组合。读完你至少能搞清楚三件事硬件上哪些引脚和外围不能省寄存器调试时每一步在看什么以及LWIP移植后ping不通到底该从哪儿查起。1. 整体方案设计与芯片选型思路1.1 为什么选择SR8201F而不是进口PHY做产品选PHY芯片核心就三个字稳、省、快。SR8201F在这三个维度上表现都不错。稳定性方面它和RTL8201F寄存器兼容软件栈可以直接复用不用从零适配成本方面国产芯片在同等性能下价格优势明显在大批量出货的场景下一颗能省几块钱一年下来就是可观的利润供货方面现在大家都有体会进口芯片交期说不好国产芯片至少不用担心突然断供。但这颗芯片也有它的脾气。我实测下来它对电源纹波比进口PHY敏感对RMII参考时钟的精度要求也更高。如果你直接把进口PHY的电路原封不动搬过来不加任何调整大概率会出现链路能起来但吞吐量上不去或者长时间运行后偶发断连的情况。所以选它之前你得确认团队有没有能力处理这些细节问题。1.2 整体架构从MCU到网络的完整链路一个典型的以太网应用数据通路长这样MCU内核把IP数据包交给内部MACMAC通过RMII接口把数据送到PHY芯片PHY把并行数据串行化后通过差分对送到网口变压器最后从RJ45出去。反向路径同理。MCU (STM32H723) ├── 内部MAC (支持RMII/MII) ├── RMII接口: TXD[1:0], TX_EN, RXD[1:0], CRS_DV, REF_CLK, MDC, MDIO ├── 外部PHY: SR8201F └── 网络变压器 RJ45这个链路里每一个环节都可能成为瓶颈。很多人在PHY芯片上反复折腾最后发现问题出在MAC配置上。所以调试时要把问题分层先确认PHY寄存器能正常读写再确认PHY是否完成自协商最后才看MAC收发数据的正确性。顺序反了很容易陷入死循环。RMII接口的信号就7根看起来不复杂但有两个关键点一是REF_CLK必须由外部时钟源或MAC提供PHY不能自己产生二是RXD和TXD的数据线只有2位意味着数据是在50MHz时钟下双沿采样的对信号完整性要求比MII高。SR8201F的datasheet里明确写了RMII模式下REFO_CLK既可以做输入也可以做输出具体怎么接后面章节详细说。2. 硬件设计要点从原理图到PCB的坑2.1 电源设计别在LDO上省钱SR8201F内部集成了LDO但如果外部电源质量太差内部LDO也救不了。我见过不少板子为了省成本用MCU的3.3V直接给PHY供电结果就是网络时好时坏。正确做法是PHY的AVDD和DVDD分别用磁珠隔离AVDD的滤波电容要靠近PHY芯片的电源引脚放置至少用10uF100nF的组合有条件再加一个1uF。另外一个很多人忽略的点是如果板子上同时有DC-DC和LDODC-DC的开关频率正好落在PHY工作频段附近辐射噪声会通过电源网络耦合到PHY导致接收灵敏度下降。排查这种问题很痛苦因为用示波器看电源纹波可能看不出问题但网络性能就是上不去。我的建议是PHY供电优先选择低噪声LDO如果必须用DC-DC输出端一定要加LC滤波。2.2 RMII接口引脚分配与复用冲突RMII模式下SR8201F需要一个50MHz的参考时钟。有三种接法一是外部25MHz晶振PHY内部倍频输出50MHz给MAC二是外部50MHz有源晶振直接给PHY和MAC三是MAC输出50MHz给PHY。STM32H723的RMII接口推荐第一种即PHY的XI/XO接25MHz晶振PHY的REFO_CLK输出50MHz给MAC的ETH_REF_CLK。这里有个大坑有些MCU的ETH_REF_CLK引脚不允许作为RMII参考时钟输入比如某些型号要求REF_CLK只能由外部提供或者只能由MAC输出。STM32H723的RMII接口是支持外部PHY提供50MHz时钟的但你必须确保PHY的REFO_CLK配置正确。SR8201F默认情况下REFO_CLK是输出的但如果你在寄存器配置阶段不小心把它改成了输入模式MAC就收不到时钟网络直接瘫痪。引脚复用方面STM32H723的ETH引脚可选映射有好几组但有些引脚和SDMMC、FMC等功能冲突。设计原理图前一定要翻一遍H723的datasheet把PA1、PA2、PC1等常用引脚确认好别画完板子发现两个外设抢同一个引脚那就只能飞线了。2.3 网络变压器与RJ45的选型与接法网络变压器的作用有三个电气隔离、共模抑制、阻抗匹配。SR8201F的PHY侧需要阻抗匹配电阻通常是在TXP/TXN、RXP/RXN上各串一个49.9欧电阻并在差分线中间接一个1kV的电容到地。这些阻容元件的精度要选1%的位置要靠近PHY芯片放置。RJ45选型上有两种方案分离式变压器普通RJ45或者带变压器的RJ45网口座。后者集成度高Layout更省事但变压器参数是定死的灵活性差。前者调试方便如果发现信号质量问题可以单独换变压器试验。我习惯用后者因为集成座子经过大厂验证性能有保障但一定要选正规品牌杂牌座子的变压器绕制工艺参差不齐容易埋雷。调试时最好在网口座旁预留一个测试点方便用示波器或者网线测试仪检查链路物理层状态。有一个取巧的办法是看PHY的Link灯和Activity灯如果Link灯不亮问题大概率在硬件如果Link灯亮了但ping不通问题多半在软件配置。2.4 PCB Layout的差分走线与地平面处理RMII接口只有2位数据线速率不高按理说Layout难度不大。但REF_CLK是50MHz信号如果走线过长或者参考地平面不连续时钟抖动会直接导致数据采样出错。我实测过REF_CLK走线超过3厘米且周围没有包地网络延迟就会明显增大极端情况下直接不通。差分对TXP/TXN、RXP/RXN要走100欧差分阻抗注意以下几点差分对内部等长误差控制在5mil以内差分对之间拉开距离至少3倍线宽走线下方地平面完整不要跨分割PHY芯片到变压器之间的距离越短越好最好不要超过15毫米。还有一个细节PHY芯片的散热焊盘一定要接地这既是散热需求也是电气需求。不接地的话地回路阻抗升高导致EMI辐射增大信号质量变差。这个位置用万用表是测不出来的但做EMC测试时会让你欲哭无泪。3. PHY寄存器调试把每一步都看明白3.1 基本寄存器读写验证拿到板子第一步先验证MCU能不能通过MDIO总线正确读写PHY寄存器。SR8201F的PHY地址由RX_ER/PHYAD0引脚的电平决定常见配置是接地所以地址为0x00。STM32H723的HAL库里有HAL_ETH_ReadPHYRegister函数可以直接调用。读寄存器0Basic Control Register如果读到0x1000到0x3FFF之间的值说明MDIO通信正常。如果读到0xFFFF说明PHY没有响应大概率是PHY地址不对、MDIO引脚复用配置错误或者PHY芯片供电有问题。如果读到全0可能PHY芯片本身就没工作查一下复位引脚电平是否正常。之前遇到一个奇葩问题用STM32CubeMX生成的代码MDC时钟配置在2.5MHz以下但MDIO没有配置上拉电阻导致读出来的数据在0和0xFFFF之间跳变。加上10K上拉后问题消失。STM32的MDIO引脚内部上拉可能不够强硬件上最好外部加一个上拉电阻。寄存器读写验证通过后顺手把PHY的ID寄存器读出来寄存器2PHYIDR1和寄存器3PHYIDR2。SR8201F的ID是0x0018和0x8201合起来是0x00188201。如果读出来是这个值说明PHY芯片工作正常。如果ID读出来不对先怀疑芯片型号是不是贴错了再检查电路连接。3.2 PHY地址配置与自协商状态检查PHY地址引脚在芯片上电时被采样采样完成后功能复用为其他信号。很多原理图上PHYAD引脚悬空靠内部下拉把地址设为0但悬空引脚容易受干扰最好外部下拉4.7K电阻固定地址。自协商功能是PHY芯片自动和交换机协商速率和双工模式的过程。芯片上电后PHY会自动开始自协商通常需要1到3秒完成。读寄存器1Basic Status Register如果bit5为1表示自协商完成如果bit5一直为0说明自协商没成功。再读寄存器4Auto-Negotiation Advertisement Register确认PHY广播了哪些能力正常应该包含10M半双工、10M全双工、100M半双工、100M全双工四项。注意一个坑SR8201F的自协商过程和RTL8201F有一些细微区别具体体现在寄存器5和寄存器6的默认值上。如果你是从RTL8201F移植过来的驱动最好在初始化时重新写一遍这两个寄存器的推荐值而不是依赖芯片默认值。这个问题的典型症状是网络能通但速率协商出来总是10M而不是100M。3.3 环回模式验证物理层通路自协商完成后下一步验证PHY物理层收发电通路的正确性方法是开启PHY芯片的环回模式。寄存器0的bit14写1PHY芯片就会把发送的数据直接环回到接收路径上不经过网线。这个功能非常实用可以用它来验证MCU的MAC和PHY之间的RMII接口是否正常。操作方法是开启环回后MCU发一个特殊的数据帧然后检查是否能收到相同的数据。如果能收到说明MAC到PHY之间的数据通路没问题如果收不到问题就锁定在RMII接口的硬件连接或配置上。我在实际项目中用这个方法排查过一次RXD引脚虚焊的问题。当时网络工具显示链路已连接但MCU收不到任何数据用示波器看RXD引脚有波形但数据不对。开启环回后发现即使不接网线也能收到发出去的数据说明PHY工作正常问题在MAC接收路径上。进一步排查发现RXD1引脚和另外一个功能复用了CubeMX配置时没有正确初始化。3.4 中断引脚与LED状态的利用SR8201F有一个中断输出引脚INT可以配置为链接状态变化、自协商完成等事件触发。在调试阶段我强烈建议把中断引脚接到MCU的一个空闲GPIO上哪怕不写中断处理函数只是用逻辑分析仪观察引脚电平变化也能帮你快速判断PHY状态。LED引脚也很有用。SR8201F有两个LED输出默认配置是LED0指示链接状态LED1指示活动状态。如果Link灯不亮第一件事检查网线两端是不是都是千兆交换机——SR8201F是10/100M PHY插上千兆口时只要交换机支持百兆协商Link灯应该亮。如果Link灯亮了但Activity灯不闪说明有数据包收发问题在MAC层或协议栈。值得注意的是SR8201F的LED极性可以通过寄存器配置有的模组上LED是高电平点亮有的是低电平点亮。如果你从网上下载的例程里读LED状态寄存器的逻辑和你的硬件不匹配会出现状态判断反的情况调试时容易误导判断。4. LWIP协议栈移植流程与参数配置4.1 STM32CubeMX里LWIP配置的完整步骤使用STM32H723时我习惯先用CubeMX生成初始化代码再手动修改底层驱动适配SR8201F。CubeMX的配置步骤如下第一使能ETH外设选择RMII接口。H723的RMII和MII是互斥的只能选一个RMII需要的引脚更少推荐使用。第二配置ETH参数。在ETH的Parameter Settings里重点检查PHY Address默认是0如果你的PHY硬件地址改了这里要同步改。另一个重点是PHY Clock即MDC的时钟分频要求MDC不能超过2.5MHzH723的HCLK通常是240MHz分频系数至少要选96以上。第三软件包选择LWIP。在Middleware and Software Packs里勾选LWIP然后在LWIP配置界面里选择DHCP模式或者Static模式。调试阶段建议用Static模式手动设一个IP地址避免DHCP交互链路出问题时还要排查两遍。第四配置FreeRTOS。如果要在以太网栈上跑RTOS先在Middleware里勾选FreeRTOS再使能LWIP的RTOS接口。CubeMX生成的代码默认支持几个常见PHY但SR8201F不在默认列表里。你需要在eth.c或类似文件里找到PHY ID匹配的那段逻辑把SR8201F的ID 0x00188201加进去或者改成直接跳过PHY ID校验。4.2 底层驱动适配SR8201F的关键改动CubeMX生成了HAL库的ETH驱动理论上只要PHY芯片寄存器兼容就可以直接用HAL_ETH_Init和HAL_ETH_Start函数。但针对SR8201F我建议做这几个改动第一PHY初始化序列。SR8201F的datasheet里有一个推荐的寄存器配置序列主要是为了优化功耗和EMI性能。比如有的版本需要关闭EEE功能、调整LED模式、设置Class A/B驱动电流等。把这些配置放在HAL_ETH_Init之后、PHY自协商开始之前执行。第二链接状态检查。HAL库里有一个ETH_Start_IT的接口如果使能了MAC中断可以收到链接状态变化事件。但有的HAL版本对PHY中断处理不完整需要自己在PHY中断处理函数里读寄存器1确认链接状态。更简单的方式是直接周期性轮询虽然浪费一点CPU时间但逻辑简单不容易出bug。第三RMII参考时钟配置。如果是PHY输出50MHz时钟给MAC的模式需要在PHY初始化时确认REF_CLK引脚工作在输出模式。如果是外部晶振直接给MAC供时钟需要检查CubeMX里是否把ETH_REF_CLK引脚配置为普通GPIO输入模式并确认外部时钟源已经稳定输出。4.3 FreeRTOS和LWIP的中断优先级设置SW软件和ETH中断优先级的设置在FreeRTOSLWIP场景下容易出问题。FreeRTOS要求中断服务函数里不能调用阻塞API而LWIP的底层驱动中断里可能会触发接收信号量这个信号量的处理函数必须在FreeRTOS能管理的优先级范围内。STM32H723的NVIC优先级分组通常配置为抢占优先级4位、子优先级0位。ETH中断优先级建议设置为5到7之间不要比SysTick的优先级高否则时间片轮转会被网络中断阻塞。如果中断优先级设置不当典型症状是系统跑一会儿就死机而且死机位置随机很难复现。CubeMX里还有一个参数叫LWIP的Thread Safe机制如果使用了FreeRTOS必须开启。这个选项会在LWIP内核里加锁避免多线程访问协议栈时出现数据竞争。很多人自认为没有多线程访问需求就不开但TCP/IP协议栈内部本身就创建了tcpip_thread线程所以这个选项一定要开。4.4 性能调优内存池、描述符与DMA缓冲LWIP移植后的性能很大程度取决于配置而不是代码。下面几个参数需要重点关注MEM_SIZE指定了整个协议堆可以使用的内存池大小默认值通常偏小在H723上建议配置到10KB以上不然处理稍大的HTTP请求就会报内存不足。PBUF_POOL_SIZE和PBUF_POOL_BUFSIZE则决定了收发数据缓冲的数量和大小。如果同时有多个TCP连接建议把PBUF_POOL_SIZE设大一些比如8个或更多每个缓冲默认1520字节即可。STM32H723的MAC自带DMA描述符数量影响DMA传输效率。CubeMX里默认的接收描述符和发送描述符各有4个如果网络吞吐量要求高可以增加到8个以上。但要注意DMA描述符必须4字节对齐CubeMX生成的代码已经处理好了如果你手动修改描述符结构体定义一定要加对齐属性。如果网络速度上不去排查顺序是先看PHY协商到的速率和双工模式再看MAC的DMA描述符数量最后看LWIP的内存池配置。千万不要一开始就调LWIP窗口大小那属于应用层优化等网络基本通再考虑。5. 常见问题与排查技巧实录5.1 PHY寄存器读不到正确的ID这个问题我很早就在论坛上看到过好几次自己也遇到过。如果读寄存器2和寄存器3得到的不是0x00188201先别怀疑芯片按这个顺序排查电源是否正常复位引脚是否处于释放状态MDC/MDIO引脚是否接对PHY地址引脚配置是否正确RMII参考时钟是否存在。一个再补充一下如果你用的是GD32或者其他国产MCU它们的ETH外设和STM32是兼容的但内部寄存器的地址映射可能略有差异。我之前遇到过一次读PHY寄存器一直超时后来发现是GD32的MDC时钟分频寄存器的位域定义和STM32不一样需要参考GD32自己的库函数说明来初始化。5.2 Link灯亮但ping不通以太网物理层OK、协议层不通这类问题要按层排查。先在MCU里确认ETH外设初始化时是否读取到了PHY自协商状态如果没有MAC可能会以错误的速率和双工模式工作。然后检查RMII接口的数据线尤其RXD0和RXD1需要看MCU里有没把这两根引脚配置为复用功能。还有一个常见原因是MAC地址设置问题。有的以太网协议栈要求MAC地址第一个字节最低位为0表示单播地址如果你随便填了一个多播地址交换机或电脑端的ARP请求根本不会回复。这个坑特别隐蔽我在一个项目中换了3个驱动版本都没解决最后发现是MAC地址写错了。如果确认物理层和MAC地址都没问题就用Wireshark抓包看电脑端发出的ARP请求再用逻辑分析仪看RMII接口上是否有对应响应。这样可以精确定位是PHY没收到包、还是收到了但MAC没处理、还是MAC处理了但协议栈没回应。5.3 速率协商不稳定时快时慢链路速率不稳定通常是硬件信号质量问题。第一步看电源纹波第二步看REF_CLK时钟波形第三步看差分对走线。这三个方面前两个可以定量测量第三个只能靠检查和改板验证。如果是REF_CLK时钟抖动太大可以检查PHY芯片的晶振负载电容是否匹配。25MHz晶振的负载电容通常在18pF到22pF之间选小了时钟频率偏高选大了偏低都会导致信号质量下降。这个可以用示波器量晶振波形确认但要注意示波器探头的电容会影响振荡频率测量结果只能做参考。还有一类问题是由PCB走线的串扰导致的。RMII数据线D0/D1和REF_CLK在布线时如果靠得太近时钟信号的高频分量会耦合到数据线上导致数据采样错误。这个在高速数字设计里是很常见的现象解决办法是时钟线和数据线之间加地线隔离或者至少拉开2到3倍线宽的距离。5.4 Keil调试技巧结构体变量查看与DMA缓冲监控在Keil里调试LWIP协议栈最常用的操作就是查看结构体变量和内存缓冲内容。Debug模式下在Watch窗口输入结构体变量的名字展开可以看到所有成员。但如果结构体指针被优化掉了可以用Memory窗口直接输入地址查看内容。看DMA描述符时我习惯在Watch窗口里直接监视描述符结构体里的Status成员。发送完成时Status里的对应标志位会被硬件置位。接收描述符的Status成员则包含接收帧长度可以确认收到的数据长度是否正确。如果你在以太网调试中收到的数据长度和实际发送的不一致大概率是DMA描述符的大小配置不对。LWIP的网络接口结构体struct netif在调试点很关键可以看到IP地址、网关、子网掩码等信息。如果发现netif-flags里的LINK_UP标志位一直是0说明MAC层没有检测到链路问题多半在PHY如果地址信息不对检查DHCP状态机是否跑通。另一个调试技巧是在Keil的Command窗口里调用函数比如手动调用tcpip_thread等任务的调度或者直接给某变量赋一个特殊值触发协议栈里的错误分支。这些操作在单步调试时很有用可以快速定位逻辑错误。5.5 常见问题速查表现象可能原因排查方法读PHY寄存器全0xFFMDC/MDIO连接错误或PHY未上电万用表量PHY引脚供电示波器看MDC波形读PHY寄存器全0x00PHY复位未释放或芯片损坏检查复位引脚电平更换芯片测试PHY ID读取不正确芯片型号贴错或引脚虚焊目检PHY丝印用热风枪补焊Link灯不亮网线接口接触不良、变压器损坏、协商失败更换网线用网线测试仪查线序Link灯亮但收不到数据RMII接口配置错误、引脚复用冲突示波器看RXD引脚波形检查CubeMX引脚配置ping通但传输速度慢协商到10M半双工、DMA描述符不足、协议栈内存不足读PHY寄存器确认协商结果调整lwipopts.h参数一段时间后断连电源纹波过大、PHY芯片过热、变压器阻抗不匹配示波器看电源纹波触摸芯片温度更换变压器验证大量丢包描述符溢出、协议栈内存池耗尽、DMA中断优先级不当查看描述符溢出标志检查PBUF池使用率6. 调试工具与效率方法6.1 硬件工具配备建议调以太网PHY有些工具几乎是必需品。USB转RJ45的调试网口卡不贵但能帮你快速验证板子的物理层是否正常尤其是手边没有交换机的时候。逻辑分析仪最好有16通道以上带宽100MHz起步可以同时抓RMII接口的7根信号和PHY的LED状态信号。示波器最好是带宽200MHz以上的主要用来量REF_CLK时钟波形和差分信号质量。带宽不够的话高频分量被衰减看到的是严重失真的波形会误导判断。数字万用表就不用说了测电源、测地线、测虚焊都靠它。我的习惯是先把所有工具准备好再上电调试。因为网络问题很多时候是间歇性的如果手忙脚乱地去翻工具很可能错过关键的复现时机。调试记录也很重要每次修改了什么寄存器、改了什么配置、现象如何都随手记下来。这看起来很简单但实际调网络问题时往往要回溯好多步才能定位问题。6.2 软件调试流程的标准化经过几个项目的沉淀我总结了一套标准化的PHYLWIP调试流程先硬件自检、再PHY寄存器验证、然后MAC环回测试、接着PHY环回测试、最后协议栈连通性验证。每一步有明确的通过标准上一步没过就不进入下一步。协议栈连通性验证时先用静态IP在局域网内ping通再测大包传输比如ping -l 1472 192.168.1.100确认DMA缓冲和TCP/IP分片逻辑是否正确。然后跑一遍UDP收发测试再跑TCP下载测吞吐量。这个顺序下来基本能覆盖90%的常见问题。如果调试中遇到问题我一般用二分法缩小范围先看物理层PHY状态再看数据链路层MAC收发最后看网络层IP/ARP。物理层问题用寄存器状态和示波器定位数据链路层用环回测试和逻辑分析仪定位网络层问题用抓包工具和ping命令定位。这样做的好处是每一步的排查范围都很明确不会东一榔头西一棒子。6.3 在FreeRTOS环境下的调试技巧FreeRTOS环境下调LWIP一个常见问题是网络中断里无法调用任何阻塞函数。LWIP的底层接收中断里通常只做一件事把数据搬进描述符释放一个信号量通知tcpip_thread去处理。如果在这里调用了osDelay或类似阻塞API轻则影响实时性重则死机。另外要注意FreeRTOS的堆栈分配。tcpip_thread和各个网络应用任务的栈大小要足够如果栈溢出系统会运行一段时间后随机崩溃。在FreeRTOSConfig.h里开启栈溢出检测或者用任务栈高水位标记挨个检查任务堆栈的使用量都能提前发现问题。中断服务函数里如果需要打印调试信息不要直接调用printf因为printf是阻塞的而且可能进入临界区导致中断卡死。我一般用一个环形缓冲来暂存调试信息在后台任务里统一输出。这个方法在处理高频网络事件时尤其好用。7. 一次性把坑踩完的完整调试实录最后分享一个完整案例。某项目需要把一块STM32H723板卡的以太网功能跑起来PHY是SR8201F软件用CubeMX生成LWIP工程目标是实现TCP Server功能。第一次上电PHY寄存器读取正常ID正确自协商也完成了Link灯亮。但电脑端ping不通。我用Wireshark抓包看到电脑持续发ARP请求但板卡没有回应。问题锁定在板卡没有正确响应ARP请求也就是要么MAC收到了但协议栈没处理要么MAC根本没收到。用逻辑分析仪抓RMII接口发现RXD0和RXD1上有数据但CRS_DV信号异常电平不是稳定高或低而是一串毛刺。查了原理图发现CRS_DV引脚和另一个GPIO共用了一个焊盘焊接时连锡了。处理完连锡问题后ping通了。接着测试TCP下载速度发现最大只有3MB/s左右和百兆理论的11MB/s差距很明显。检查PHY寄存器协商结果是100M全双工正常。检查DMA描述符数量默认4个增加到8个网络处理能力有所提升但速度还是上不去。最后查看CubeMX的LWIP配置发现TCP_SND_BUF和TCP_WND这两个参数用的是默认值限制了两个TCP窗口的大小。把它们从默认的几千字节调到16KB配合描述符数量增加到16个速度稳定到了9MB/s以上。这个案例说明以太网调试的每一步都是连环的硬件问题会表现为协议栈异常软件配置问题会表现为吞吐量不足。只有把从物理层到应用层的每一层都摸透才能真正把方案做稳定。我个人的体会是SR8201F这颗芯片本身不复杂但它对硬件设计细节的要求并不低。严格照着参考设计来是底线关键信号走线、电源滤波、时钟精度这些都不能偷懒。软件部分HAL库和CubeMX已经帮你挡掉了绝大部分寄存器操作门槛真正决定你能不能稳定跑通的是你对PHY状态机、DMA工作方式和LWIP内存管理的理解深度。把这几个点吃透国产PHY完全可以成为你产品降本的得力选择。