首页 / 资讯中心 / 文章详情

SR8201F以太网PHY实战:硬件设计、寄存器配置与调试避坑指南

SR8201F以太网PHY实战:硬件设计、寄存器配置与调试避坑指南 ★ FEATURED ARTICLE
做嵌入式网络产品这些年PHY芯片的坑我是真的踩过不少。SR8201F这颗国产以太网PHY因为兼容性好、成本合适现在很多MCU和FPGA项目都在用。它支持10/100Mbps速率、MII/RMII接口把物理层收发、自协商这些“脏活累活”全包了MCU端只需要跑个轻量级协议栈就能联网。这篇文章把我在实际项目中摸出来的硬件设计参数、寄存器配置、调试技巧和踩过的坑一次性放出来给正在画板子或者被link问题折磨的朋友一份参考。1. 方案背景与产品选型思路1.1 SR8201F是一颗什么样的芯片做嵌入式网络产品的人都知道要让自家MCU或者FPGA连上网光有MAC媒体访问控制器不够还得在MAC和网线之间塞一颗PHY物理层收发器。MAC负责组帧、寻址、流量控制这类逻辑工作PHY负责把数字信号调制成能在网线上跑的模拟电平同时完成自动协商、链路检测、载波监听这些物理层功能。SR8201F就是一颗10/100Mbps自适应的以太网PHY封装不大一颗芯片解决物理层收发问题兼容MII和RMII两种MAC接口在很多国产项目和替代方案里都能看到它的影子。这颗芯片的内部框图大致可以分成几个模块发送通路、接收通路、时钟管理、寄存器管理。发送时MAC把并行数据通过接口送给PHYPHY经过4B/5B编码、加扰、MLT-3电平转换后输出到差分线接收时反过来从差分线收下模拟信号经过自适应均衡、解码后还原成并行数据送回MAC。你不需要理解太深只要知道PHY的特点它是模拟混合芯片对电源噪声、时钟质量、PCB隔离都很敏感。很多硬件项目把MCU调通了却发现网络连不上八成不是软件问题而是PHY的硬件环境没伺候好。1.2 选SR8201F而不是老牌PHY图的是什么很多人一听PHY第一反应是RTL8201F或者LAN8720A。SR8201F在这个领域的切入点是国产替代和成本控制。实际用下来它和主流10/100M PHY的引脚定义、寄存器接口基本在一个路子上Pin-to-Pin替换的可行性比较大仓库备料压力小供货周期也稳。对于量产产品来说芯片交期有时候比参数更重要这也是我选择它的一个重要原因。当然选型不能只看价格和货源。SR8201F支持MII和RMII两种模式接口电压支持3.3V自带自协商功能可以在100M全双工、100M半双工、10M全双工、10M半双工之间自动切换。这些规格覆盖了绝大多数工业控制板、智能家居网关、物联网边缘设备的应用场景。如果你的MCU自带MAC比如STM32系列那用SR8201F是很顺手的组合。还有个好处是它支持MDI/MDIX自动翻转网线直连还是交叉连都能自动适配省了物料上选型网线的麻烦。选型阶段有句实在话别迷信封装兼容每颗PHY的外部辅助电路都要重新读数据手册。SR8201F和某些老型号引脚可能一样但内部寄存器定义、strap引脚上下拉要求可能有差异。我在项目启动时第一件事就是把原厂数据手册关键章节打印出来逐条对照原理图设计这个习惯帮我避开了很多隐藏雷。2. 硬件设计关键环节拆解2.1 供电与复位PHY稳定工作的地基工程PHY这类模拟混合芯片最怕供电不干净。SR8201F通常分成模拟电源和数字电源引脚有些叫AVDD、DVDD实际工作电压都是3.3V但引脚要分开供电最后在PCB上通过磁珠或者0欧电阻单点汇合。为什么要这么折腾因为数字部分在翻转引脚时会产生高频开关噪声如果直接串到模拟接收链路上会直接影响差分信号的接收灵敏度表现就是能link上但丢包率异常、弱信号时通信率很低。我的习惯做法是3.3V主电源进一个磁珠再分给AVDDDVDD单独走一段磁珠选600Ω/100MHz的规格就够用了。在每个电源引脚旁边放一个0.1uF陶瓷电容再在PHY附近放一颗10uF钽电容或者大容值陶瓷电容做低频储能。去耦电容一定要靠近电源引脚摆放过孔直接连接到电源和地平面不能绕远路这是最基础的滤波常识但也是我见过翻车最多的地方。示波器看电源纹波如果超过50mV强烈建议先把去耦补好再查别的。复位电路很多人随手接一个RC就完事实际上这里也有讲究。PHY的复位引脚通常是低电平有效复位脉宽不能太短建议至少保持10ms以上。复位释放之后PHY内部还要做寄存器初始化、链路检测这段时间大概需要几十毫秒软件上电后不要急着马上读寄存器适当延时50-100ms再操作。如果复位信号由MCU的GPIO控制要确保MCU默认状态不是反复输出复位脉冲否则PHY永远起不来。用RC复位的话时间常数建议按100ms量级设计宁可慢不要快。2.2 时钟设计25MHz晶振是PHY的心跳PHY内部需要基准时钟来做采样、编码、时钟恢复。SR8201F典型配置是用一颗25MHz无源晶振晶振两端分别接XI、XO引脚再接两个负载电容到地。晶振频率精度要求一般是±50ppm以内这其实很容易满足真正容易被忽略的是负载电容匹配问题。无源晶振的负载电容计算有一个常用近似公式CLC 2 × (CL - Cs)其中CL是晶振规格书里给出的负载电容Cs是PCB走线和引脚寄生电容经验值取2-5pF。举例来说如果晶振规格CL12pF估算Cs3pF那么两边的匹配电容就取2×(12-3)18pF取常用值18pF或20pF都可以。电容值差一点问题不大但如果差太多晶振起振会不稳定或者频率偏移直接导致PHY的时钟恢复锁不住链路协商半天上不去。时钟电路布局上晶振和负载电容要尽量靠近PHY的XI、XO引脚走线短且对称晶振下面铺一层完整地平面隔离避免和其他高频信号交叉。RMII模式下还需要MAC端提供一个50MHz参考时钟这50MHz从哪里来很关键可以由PHY提供也可以由MAC提供具体看系统设计。我用SR8201F时经常会确认RMII参考时钟的源和相位关系如果这个时钟抖动大数据采样会出错表现就是网络通但丢包严重。调试时可以用示波器看时钟波形频率准确、上升沿干净、过冲小基本就没问题。2.3 MII还是RMII接口选择背后的逻辑SR8201F支持MII和RMII两种MAC接口这是硬件设计最先要定下来的决策。MII接口信号多TXD[3:0]、RXD[3:0]、TX_EN、TX_ER、RX_DV、RX_CLK、TX_CLK等加上管理接口MDIO/MDC一共占用十多个引脚。它的好处是每个方向都有独立的时钟100M模式下时钟25MHz时序比较宽松对PCB走线长度和等长要求不高。适合FPGA这类引脚资源丰富、MAC侧可以灵活分配管脚的平台。RMII接口信号少TXD[1:0]、RXD[1:0]、CRS_DV、REF_CLK时钟只用一颗50MHz一共才七八根线。MAC和PHY共用参考时钟省引脚效果明显特别适合STM32这类引脚紧张的MCU。但RMII对时钟同步要求更严格因为数据线宽度只有2位参考时钟抖一点都可能采错。布线时REF_CLK要走阻抗受控的走线尽量短和其他数据线长度差控制在小范围内。我做产品时的选择原则很简单MCU资源紧张就RMII省下来引脚给按键、指示灯FPGA或者资源宽裕就直接上MII时序容错性更好。另外不管选哪种模式SR8201F一般都有专门的strap引脚在复位时锁存接口模式有的数据手册通过某个引脚上下拉选择有的通过复用引脚配置画原理图时必须仔细对照漏了上下拉电阻会导致PHY一直在错误模式下工作怎么调都不通。2.4 网络变压器与RJ45连接别踩中心抽头的坑PHY的差分信号TXP/TXN、RXP/RXN不能直接接RJ45中间必须加网络变压器。变压器有三大作用一是把PHY侧的直流电位和网线隔离防止共模电压损坏芯片二是完成电平变换提高驱动能力三是抑制共模干扰对电磁兼容有直接帮助。网络变压器有两种接法一种是分离式变压器比如HJ5021NL再单独配RJ45座另一种是带变压器的RJ45一体座比如HR911105A。一体座的好处是省一块PCB面积布局也简单缺点是变压器参数被固定了散热和信号质量不如分离式灵活。我量产板一般用一体座调试方便成本也低。变压器中心抽头的接法是个经典坑位。有些PHY的中心抽头需要接电源有些接电容到地SR8201F这类PHY通常需要按数据手册推荐接。常见的100BASE-TX方案里发送端的变压器中心抽头会通过一个RC并联网络接到供电电压这个RC的取值会影响共模电压建立和信号摆幅。如果你发现信号幅度偏低、波形塌陷先检查中心抽头上的旁路电容是不是漏焊这类问题在手工焊接的样板里太常见了。差分对布线时要按100Ω差分阻抗控制TXP/TXN要和RXP/RXN在内层或者表层成对走线尽量短等长避免绕大弯。差分对之间还要保持距离不要和其他信号线平行太长距离防止串扰。2.5 LED指示灯电路与PHY地址配置PHY芯片一般会引出几个LED驱动引脚用来指示link状态、收发活动。SR8201F的LED引脚经常还兼任strap配置功能比如PHY地址就是这个时刻通过引脚上下拉确定的。这就带来一个非常容易踩的坑你为了状态指示把LED接上灯但上下拉电阻没有接导致PHY上电锁存了错误的地址或接口模式。解决思路是严格按数据手册的strap配置表格来设计。PHY地址如果只挂一颗PHY用默认地址就好但也要把上下拉电阻画进原理图上电后PHY地址是确定的不要依赖默认值。LED限流电阻选330Ω到1kΩ都行实际亮度看灯的规格先按数据手册推荐来。另外LED驱动引脚一般只是灌电流输出驱动能力有限不要直接驱动高功率外部设备。PHY地址这一项特别值得单独说一下。一条MDIO总线上可以挂多颗PHY地址范围是0-31由PHYAD引脚在复位时的电平决定。如果你用了两颗PHY务必将地址错开比如一颗设0x01另外一颗设0x02。常见的地址冲突问题就是两颗PHY都默认成0x00结果软件读出来的寄存器数据永远是错的而且很难定位。3. 驱动配置与寄存器操作3.1 MDIO/MDC管理接口与读写时序SR8201F的寄存器通过MDIO/MDC两根线访问。MDC是管理时钟由MAC侧提供MDIO是双向数据线。标准MDIO帧格式是32位前导码加1个起始码、2位操作码、5位PHY地址、5位寄存器地址、2位转向时间、16位数据。一次读操作的帧结构长这样字段位数说明PRE32全1前导码用于同步ST201起始码OP210读操作PHYAD5PHY地址对应PHYAD strapREGAD5寄存器地址0-31TA2转向时间读操作由PHY驱动DATA16读回的数据写操作的OP码是01TA字段是10。MDC的最高频率在各类PHY上通常可以到25MHz实际建议跑2.5MHz左右更稳减轻信号干扰问题。用GPIO模拟MDIO是最常见的调试手段因为不需要额外硬件任何MCU都能干。我提供一个用GPIO模拟MDIO读操作的伪代码框架实际移植时替换底层延时函数即可uint16_t phy_read(uint8_t phy_addr, uint8_t reg_addr) { uint16_t data 0; uint8_t i; /* 发送32位前导码 */ for (i 0; i 32; i) { mdio_write(1); } /* ST: 01 */ mdio_write(0); mdio_write(1); /* OP: 10 (read) */ mdio_write(1); mdio_write(0); /* PHY address */ for (i 5; i 0; i--) { mdio_write((phy_addr (i - 1)) 1); } /* Register address */ for (i 5; i 0; i--) { mdio_write((reg_addr (i - 1)) 1); } /* TA: 读操作时MAC释放总线等待PHY驱动 */ mdio_set_dir_input(); /* 读取16位数据 */ for (i 0; i 16; i) { data 1; if (mdio_read() 1) { data | 1; } } mdio_set_dir_output(); return data; }这个代码没有处理MDIO在TA阶段的时序细节实际工程还要优化不过原理就是上面这张表。会读寄存器之后整个PHY对你来说就是透明的所有状态都能自己排查。3.2 核心寄存器从控制、状态到物理层状态PHY的寄存器空间是16位宽标准寄存器0-7由IEEE定义0-15是通用区域16-31各厂家自由发挥。对SR8201F这类芯片最先要看的是这几个寄存器寄存器名称关键位0x00控制寄存器bit12 自协商使能bit13-8速率/双工设置0x01状态寄存器bit2 链路状态bit5 自协商完成0x04自协商能力寄存器bit5 100BASE-TX全双工能力0x05自协商伙伴能力寄存器对端PHY的能力0x11物理层具体状态寄存器link状态、速度、双工模式调试链路时我基本上就盯寄存器0x01的bit2link状态和bit5自协商完成。如果读回来的值是0x0024说明自协商完成且链路已建立这时候网络不通就要查MAC侧。如果bit2是0说明物理层就没有起来问题在PHY的硬件环境或者对端设备。读寄存器0x11能拿到当前实际协商出来的速度和双工模式这在判断自协商结果、排查速率异常时非常有用。我习惯在代码里写一个dump函数开机后把所有PHY寄存器读一遍打印成日志很多疑难杂症都是靠这个日志定位的。3.3 初始化流程与自协商配置PHY驱动的初始化流程不需要太复杂核心就几步复位、等待、配置自协商、等待结果。具体步骤可以这样安排复位PHY可以通过硬件引脚拉低也可以通过寄存器0x00的bit15软复位等待至少10ms让PHY内部完成初始化读取寄存器0x01确认PHY已经可控设置寄存器0x00使能自协商允许100M全双工、100M半双工、10M全双工、10M半双工轮询寄存器0x01的bit5等自协商完成定期读取link状态链路断开时做重连处理。设置自协商能力时要把寄存器0x04里支持的能力位写对。标准做法是先读回0x04再将需要的能力位置1最后写回。如果直接把0x04改成0x01E1一般就是允许10M/100M两种速率、全双工半双工都支持。实际使用中强烈建议允许100M全双工因为这是最大吞吐模式。有些场景为了老设备兼容还要允许10M半双工需要根据产品定位取舍。自协商完成标志位和link状态位并不完全一样。自协商完成只表示协商过程结束了link状态才是物理链路是否真正通了的标志。调试时经常看到自协商完成但link状态没有置位这说明对端设备没有正常连接或者线缆、变压器有问题顺着这个方向排查很快。4. 调试过程与踩坑实录4.1 样板到手最先做的三件事拿到焊接好的样板别急着上电跑协议栈先把基础供电、时钟管脚都确认一遍。我的习惯是按下面三个步骤走第一步用万用表量PHY所有电源引脚对地阻抗排除短路第二步上电后量各路电压是不是3.3V纹波大概什么水平第三步用示波器看晶振引脚有没有起振波形幅度和频率是不是正常。跟随这三步有几项容易被忽略的小事。PHY芯片焊接时手工焊容易把引脚连锡特别是QFN封装底部散热焊盘和引脚之间很容易短路用万用表蜂鸣档一量就能发现。再一个是晶振没起振或者起振慢很多情况下不是晶振坏了而是负载电容焊错、晶振引脚虚焊、或者PCB走线过长。示波器探头不要直接怼到晶振输出脚探头电容会影响振荡最好用低电容探头或者看XI脚附近的波形就行。第二步确认完就可以用MCU通过MDIO读PHY寄存器了。如果读回全F或者全0先怀疑PHY地址对不对、MDIO/MDC有没有接反、复位引脚是否被拉死。这些基础问题我几乎每次做板子都遇到过一两个基本流程走一遍大部分都能当场定位。4.2 Link up不上的排查思路与定位Link不上是PHY调试里最经典的问题。我自己的排查思路是从物理到逻辑逐层推进。第一层查物理连接。确认RJ45座、网线、对端设备没问题。很多调试板用的是带变压器的RJ45一体座如果差分对TXP/TXN在PCB上焊反了link是不会起来的。判断方法是读寄存器正常情况下如果自协商一直进行但link始终置0很可能是线序或者变压器方向反了。第二层查PHY供电和复位。用示波器看复位引脚确认上电过程低脉冲存在且时间够长。如果RC复位的电容选小了复位脉冲太短PHY内部初始化根本没有完成同样表现成link不上。这时把复位电容加大到10uF以上问题多半就解决了。第三层查时钟。用示波器确认25MHz晶振和RMII的50MHz参考时钟都正常。晶振频率偏太多自协商过程会反复失败RMII模式的50MHz时钟如果相位属性和MAC端不匹配MAC侧采样就会出错这个比较隐蔽可以通过强制10M模式来看是否有所缓解。第四层查寄存器。把PHY寄存器0x00、0x01、0x04、0x05、0x11都读出来和预期值对比。重点看自协商能力是否使能能力位有没有被软件意外清掉。很多初始化代码都在这个地方写错比如直接往0x00写0x1000但没注意bit13-8同时被改成了特殊速率模式结果自协商能力被覆盖link永远起不来。4.3 能link但丢包、吞吐异常怎么办如果link状态已经是好的但ping丢包、吞吐率上不去问题往往在信号质量或软件配置上。我遇到过的典型情况有这么几种。第一种是差分线布线问题。差分对之间不等长、过孔多、参考平面不连续都会导致信号质量下降。表现是近距离还能通信拉一根长网线就开始丢包。解决方法是调整布线尽量保证差分对等长过孔成对打。样板阶段可以用飞线临时验证量产前必须改版。第二种是电源纹波偏大。PHY接收异常、CRC错包增多多半和电源有关。用示波器看AVDD如果发现高频纹波先检查磁珠和去耦电容是否布在了正确位置。RJ45插入瞬间会有浪涌电流如果电源没有储能电容PHY的供电电压会塌一下这时网络状态可能闪断。第三种是时钟源相位噪声问题。RMII模式下如果50MHz参考时钟由外部有源晶振提供这个晶振的质量就很关键。便宜晶振的抖动大MAC采样的误码率就上去了。出现这种情况换一颗相噪指标更好的有源晶振往往立竿见影。调这些性能问题光靠眼睛看不出来必须量化。我会在MAC侧读取以太网统计计数比如CRC error计数、alignment error计数、miss packet计数通过一段时间内的错包率判断信号质量。如果错误计数持续增长基本可以确定是物理层问题。这时候再逐段排查电源、时钟、变压器、差分线效率高很多。4.4 寄存器读取异常的隐藏原因寄存器读回的数据不对除了PHY地址错误、总线上地址冲突这种明面原因还有几个隐藏原因直接导致调试卡壳。MDIO时序太紧。有的MCU GPIO模拟速度太快MDC周期低于PHY允许的最小值PHY处理不过来就会返回错误数据。解决方法是把模拟时序拉慢MDC周期放宽到400ns以上。这不是降性能而是给PHY留足处理时间。MDIO数据线方向切换不当。读操作时TA阶段总线由PHY驱动如果你的代码没有把GPIO方向切到输入总线一直被MAC侧拉着读回来的数据就是错的。这个问题在逻辑分析仪上非常明显总线上没有出现PHY驱动的数据段。单片机的GPIO方向切换要留足建立时间方向切换后再延时一下再采数。MDIO线被外设干扰。MDIO/MDC走线如果和以太网差分线平行布线线上会耦合大量噪声。特别是信号质量差的批次MDIO数据会偶发误码。解决方法是布线时给这两根线加粗包地处理远离差分对。还有一种情况是PHY多个引脚同时有GPIO复用功能上电时MDIO引脚被其他外设占用导致MDIO波形完全不对。我用过一颗MCU的引脚默认功能是UART没有在初始化里改复用配置MDIO数据就一直发不出去。这种问题看代码很难看但用示波器看MDIO脚波形为空就明白了。5. 高频问题速查与工具使用技巧5.1 常见故障现象对照表调试中几乎所有问题都能归纳成几个典型现象。我整理了一个速查表项目里遇到对应问题可以直接对照现象可能原因排查方法寄存器全FMDIO/MDC接反或PHY地址不对用示波器抓MDIO波形确认地址位寄存器全0PHY没起来复位被长期拉低查复位引脚电平确认供电正常Link一直0差分线焊反或变压器方向错强制10M模式测试换网线交叉验证自协商不完成对端设备不支持或能力位配置错误读0x04/0x05核对双方能力能link但丢包电源纹波大差分线质量差查AVDD纹波查CRC错误计数速率协商成10MRMII时钟异常或线缆质量差查50MHz参考时钟换网线测试通信时断时续复位释放时序不对供电瞬态跌落示波器抓复位和电源加储能电容这张表不能覆盖所有场景但绝大多数问题都逃不开这几个大方向。用寄存器数据和统计计数去定位比盲调快得多。5.2 调试日志与波形测试的配合技巧调试PHY时软件日志和硬件波形要配合使用。我的习惯是先看寄存器日志让PHY把“能说的”都告诉你再看逻辑分析仪抓MDIO波形确认总线数据真的对最后用示波器看差分信号和时钟波形确认物理层质量。软件日志建议做成开机自检信息的一部分。上电后自动把PHY寄存器0x00到0x1F全部读一遍通过串口打印出来。串口调试助手配合日志能看到PHY的协商过程、link建立时间、复位时序这些关键信息。比如你可以打印“PHY reg00x1000 reg10x0024”几秒钟就能判断问题方向。示波器看差分波形时TP1和TP2变压器PHY侧的波形应该是峰峰值大约正负1V的MLT-3信号。如果幅度明显偏小、波形对称性差重点检查变压器中心抽头供电和电容。调试时还要注意示波器探头的带宽100MHz带宽的探头看100BASE-TX信号够用但要用短接地弹簧而不是长地线夹子否则测量结果完全不准。5.3 量产阶段的PHY测试与老化建议样板调通只是第一步量产阶段还要考虑测试覆盖率和稳定性。我给量产线的建议是增加三项测试上电寄存器自检、物理层环回测试、打流测试。上电寄存器自检就是读PHY的ID寄存器和关键状态寄存器确认每颗芯片都能正常响应。物理层环回测试是把PHY设置为数字环回模式MAC发数据PHY直接环回不经过变压器和网线这一步能定位MAC侧通信问题和产线网口状态无关。打流测试就是用测试工装跑一定时间的数据流量观察丢包率通常跑24小时以上才能暴露早期失效。量产出货之前还可以把PHY的寄存器默认值作为出厂固件的一部分保存下来万一现场出了问题可以通过串口或者远程网络把寄存器状态发回来看快速判断是硬件还是软件问题。这些动作看似繁琐但能省下大量售后排查时间。6. 调试工具链与效率提升方法6.1 用好串口调试助手和日志等级PHY调试离不开日志打印。嵌入式MCU通常拿串口打印调试信息串口调试助手这类工具在调试里承担了相当重要的角色。不要只打印“link ok”这种结论要把过程数据也打出来比如寄存器原始值、自协商状态轮询结果、错误计数变化。我自己写PHY调试代码时会刻意把日志分成几个级别ERROR级别只打异常状态INFO级别打link变化事件DEBUG级别打寄存器dump和逐包统计。平时跑INFO出问题时打开DEBUG这样现场日志量不大信息又够全。有些终端工具还支持颜色区分级别一眼就能定位错误行效率提升很明显。多做一步把PHY相关的所有调试信息封装成一个命令用串口工具可以随时触发。比如输入“phyre”就dump全部寄存器输入“phystat”就打印link状态和速度。这样后期联调协议栈时不需要频繁改代码重新烧录直接在运行状态下发命令就能看PHY状态。6.2 逻辑分析仪在MDIO调试中的应用MDIO是慢速总线逻辑分析仪抓波形完全没有压力。抓MDIO时把MDC、MDIO两路信号接到逻辑分析仪设置触发条件为MDC上升沿采样率设10MHz以上就够。抓到波形后对照标准MDIO帧格式一位一位解析能准确看到PHY地址、寄存器地址、数据内容。这个操作最大的价值是能区分“PHY没回数据”和“PHY回了错误数据”两种情况。如果总线上PHY驱动阶段一直是高阻没有数据相位说明PHY根本没有响应如果数据相位有波形但和预期不一致可能是时序太紧或者PHY处于异常状态。这两种问题的排查方向完全不一样逻辑分析仪可以直接给出判断依据。调试协议栈的MAC问题时还可以抓MDIO来确认MAC是否在不停地访问PHY寄存器。有些MAC驱动初始化时如果拿不到预期状态会陷入重复访问的死循环从MDIO波形上看就是同一条命令反复出现。这个信号比看代码效率高往往一眼就能发现驱动逻辑问题。6.3 网络调试助手辅助的应用层验证PHY调试完成之后紧接着就是应用层验证。TCP和UDP通信测试需要依赖上位机工具网络调试助手这类软件就很实用。通过它可以创建TCP客户端、TCP服务器或者UDP连接向设备发送自定义数据。很多开发板刚打印出link信号后紧接着用网络调试助手发一个UDP包能快速确认整个链路从应用层到物理层都是通的。我在联调中常用一个做法设备端写一个小的回显程序收到UDP包原样返回上位机用网络调试助手定时发送并统计确认接收次数。这样做能一次性验证MAC、PHY、变压器、RJ45座、网线以及协议栈配置全链路把问题收敛在很小范围内。如果回显成功率接近100%就可以放心进行上层业务开发。7. 个人实际经验与特别提醒最后把一个我踩过无数次、也帮别人排查过很多次的坑再重点说一遍每一块新板子回来不要直接烧录带完整协议栈的固件去调试先写一个最简PHY测试程序只做三件事——初始化MDIO、读寄存器、打印link状态跑通之后再逐步叠加功能。这个习惯让我的调试周期缩短了很多因为每一层的问题都被充分隔离了而不是所有问题混在一起互相干扰。SR8201F只是一颗PHY但它涵盖了一个完整的硬件健壮性循环供电、时钟、复位、接口、变压器、寄存器、物理信号质量。调明白它之后你再去碰任何其他PHY都会觉得熟门熟路。如果你手头也有SR8201F或者同类PHY的调试任务希望这篇文章能让你少走我走过的弯路。等你的板子也跑到link稳定、长时间ping不掉包的时候你会觉得当初那些硬件设计和调试的折腾都是值得的。
阅读完成 · 觉得有帮助?
咨询建站