以太网采集单元设计方案详解:从硬件选型到协议调试
2026/9/18 4:14:47 网站建设 项目流程

做工业数据采集这几年,以太网采集单元可以说是我最常接触也最常替客户操心的一块东西。无论是产线上的设备状态监测、机房里的温湿度采集,还是能源管理项目的电表数据集中上传,核心逻辑其实都差不多:把现场的传感器信号或者设备数据收进来,通过以太网口送到上位机或者云平台。这个“收进来、送出去”的中间环节,就是采集单元的活。这篇文章我就拿一个典型的以太网采集单元系统方案来拆解,从整体架构、硬件设计、软件协议到调试排障,把你能直接参考的东西都摆出来。

这篇内容适合正在做嵌入式采集设备、想从串口/RS485升级到以太网方案的工程师,也适合刚接手采集类项目、对以太网通信还不算太熟的朋友。我会尽量把方案选型背后的原因讲清楚,不只是给你一个“能跑”的框图,而是告诉你为什么这么搭、容易在哪里翻车、怎么避免。

1. 整体设计思路与系统架构拆解

1.1 核心需求解析:采集单元到底在解决什么问题

以太网采集单元,名字听着很宽泛,但落到实际项目里,需求其实是高度集中的。我把它拆成三条主线:第一是数据采集,也就是前端要接什么样的信号,是4-20mA模拟量、开关量输入,还是Modbus RTU的传感器、温湿度探头、电能表;第二是协议转换与数据处理,把采集到的原始数据整理成上位机能认的格式,比如Modbus TCP、MQTT或者自定义的JSON报文;第三是以太网通信,保证数据稳定、及时地送到指定IP和端口,同时能响应上位机的查询、配置指令。

这三个需求决定了整个系统的骨架。我见过不少失败的方案,都是上来就画框图、选芯片,结果做到一半发现采集通道不够、网口速率上不去、协议栈内存爆了。所以我自己做方案时,习惯先把数据流画清楚:传感器信号怎么进MCU,MCU内部怎么缓存和处理,处理完的数据包怎么封装成以太网帧,链路断了怎么补。这张数据流图画清楚了,后面选型基本不会跑偏。

以常见的8路模拟量采集加1路以太网上行为例,采集端的核心指标是采样率和精度,通信端的核心指标是吞吐量和实时性。假设每路4-20mA信号用16位ADC采样,采样率1kHz,一路数据就是2KB/s,8路总共16KB/s,再加上协议包头和管理报文,满打满算不到100Kbps。这个数据量对100Mbps以太网来说绰绰有余。所以这类设备瓶颈往往不在带宽,而在丢包处理、协议健壮性和长时间运行的稳定性上。搞清楚了这一点,方案设计就不会盲目追求高性能,而是把钱和精力花在可靠性上。

1.2 主控方案选型:为什么我优先考虑MCU加外置PHY

以太网采集单元的主控选择,业内主流就三条路:MCU内部集成MAC加外置PHY、MCU内部同时集成MAC和PHY、以及FPGA加PHY,高端的还会上Linux处理器跑完整协议栈。对于大多数采集场景,我最推荐的是第一路,也就是一颗带以太网MAC的MCU,外挂一颗PHY芯片,比如STM32F407加LAN8720A这套经典组合。

这么选的核心原因有三个。第一,灵活性好。PHY芯片单独选型,可以根据温度范围、是否需要工业级、是否需要支持PoE供电来调整,不会被MCU内置PHY限制住。第二,故障隔离方便。PHY是独立芯片,如果网口浪涌打坏了,换一颗就行,不用动主控;如果MCU集成PHY,坏一处就要换整个核心板,现场维护成本高得多。第三,协议栈资源可控。这类MCU跑LWIP这种轻量级协议栈非常成熟,资料多,踩坑少,团队上手快。

当然,如果产品对成本极度敏感,而且通信速率要求不高,MCU内置PHY的方案也能用,比如STM32F107或者部分国产MCU,省掉一颗PHY芯片和配套的25MHz晶振,成本和PCB面积都能省。但代价是PHY的电气参数无法灵活调整,而且一旦网口部分损坏,整个主控都要换。对工业现场设备来说,维护便利性往往比单台成本重要得多,所以我一般不建议在工业级产品上省这个钱。

1.3 存储与缓存设计:防止瞬间大数据冲垮系统

采集单元有一个容易被忽略但实际很致命的问题:当上位机突发大量读操作,或者多个客户端同时连接查询数据时,如果MCU的缓存设计不够,协议栈缓冲区会被瞬间占满,轻则丢包,重则直接死机。我遇到过不止一次现场问题,最后定位发现都是缓存溢出,而不是通信链路的问题。

在设计时,我习惯预留一层“采集数据环形缓冲区”,大小通常是单个以太网帧载荷的4到8倍。假设每包数据是256字节,环形缓冲区就开2KB,采集任务只管往缓冲区里写,网络发送任务只管从缓冲区读,两者通过读写指针解耦。这样做的好处是,即使网络暂时拥堵,最多丢一点新采集的数据,不会影响MCU整体运行。缓冲区开多大,要结合采集频率和网络拥堵容忍度来算,一般原则是“能承受3到5个报文周期的数据量”,再大意义不大,还浪费RAM。

还有一个细节是存储介质的选择。如果采集单元需要断网补传数据,就得在本地加Flash或者SD卡,记录带时间戳的采集数据,网络恢复后再补报。这个功能看起来简单,但做起来要注意Flash擦写寿命和写平衡策略。工业级Flash按10万次擦写寿命算,如果每分钟写一次,只能用大概69天。所以要么降低写频次(比如每分钟聚合一次数据),要么用磨损均衡算法,要么定期轮换使用多个扇区。我在项目里一般是“高频采集、低频落盘”:实时数据走网络,只有网络异常时才启动本地记录,这样Flash寿命压力小很多。

2. 硬件核心电路设计与PCB落地要点

2.1 PHY芯片选型对比:LAN8720A与DP83848怎么选

PHY芯片是整个以太网链路里最容易纠结的部分,我在项目里用得最多的是两款:瑞昱的LAN8720A和TI的DP83848。这两款都是10/100M自适应、RMII接口,但定位有明显差别。

LAN8720A价格便宜、外围电路简单、功耗低,芯片本身集成度高,RMII接口只需要一根50MHz参考时钟,很多开发板上都用的它,设计资料一抓一大把。但它也有明显的短板:工作温度范围一般是0到70℃的商用级,虽然市面上有标称工业级的版本,但货源稳定性需要确认;ESD和浪涌耐受能力相对一般,必须在接口处增加防护器件。

DP83848价格贵一些,但它是正经的工业级PHY,工作温度-40到85℃,连接稳定性更好,对差分信号质量的容忍度也更高,TI的文档和参考设计很完善,适合对可靠性要求高的工业现场。缺点就是功耗稍大,外围电路比LAN8720A稍微复杂一点,成本也更高。

如果你做的是室内环境监测、机房采集这类场景,LAN8720A足够了;如果设备要装在配电柜、户外机柜、生产线旁,我建议老老实实选DP83848或者其他工业级PHY。因为我自己在配电柜里吃过亏——柜内温度高、电磁干扰强,商用级PHY在夏天长时间运行后,偶尔会出现网口掉线需要重启的问题,换工业级之后就没再犯过。另外还有一颗AMS的PHY也值得一提,性能介于两者之间,适合做国产化替代需求的项目,但资料相对少,团队没经验的话慎选。

2.2 RMII接口与时钟配置:一个容易埋雷的细节

MCU和PHY之间通信的接口,一般选RMII而不是MII。RMII只需要7根信号线(TXD0、TXD1、TX_EN、RXD0、RXD1、CRS_DV、MDC/MDIO),MII则要十几根线,引脚占用多,而且布线麻烦。RMII在100M模式下只需要50MHz时钟,这个时钟可以来自MCU,也可以来自PHY,两边的配置必须一致,不然链路根本起不来。

实际项目里最坑的点就在这里。有的方案是MCU输出50MHz给PHY,有的方案是PHY输出给MCU,还有的用一颗独立有源晶振同时喂两边。如果设计时没想清楚时钟源,PCB画完了才发现PHY的XTAL脚和MCU的RMII参考时钟不是同一个源头,调试的时候就会非常痛苦。我自己的习惯是:优先用PHY的25MHz晶振加上内部PLL,让PHY输出50MHz REF_CLK给MCU,这样MCU可以省一个时钟输出引脚,而且时钟同步性更好。但要注意,此时MCU的RMII接口必须配置为外部时钟输入模式,两边的时钟极性也要对上。

另一个容易忽略的是TXC/RXC走线长度。RMII对总线的时序要求相对宽松,但50MHz时钟信号的走线还是要尽量短、尽量直,避免过孔,并且要和其他信号线拉开距离。我见过一个板子,REF_CLK走了很长一段还绕了两个弯,结果链路能协商到100M,但跑大流量就疯狂丢包,最后重新改板才解决。对这种高速信号,别抱侥幸心理。

2.3 网络变压器、RJ45与防护电路:接口设计不能省的地方

PHY出来之后是网络变压器,它承担三个职责:电平耦合、隔离共模干扰、提供浪涌防护基础。变压器选型主要看两点,一是速率等级要支持100M,二是匝数比要和PHY的驱动电平匹配。市面上RJ45带变压器的集成座子用得最多,比如HANRUN的HR911105A这类,一个器件搞定连接器和变压器,能省不少PCB空间和设计工作量。

我个人的建议是,除非空间极度紧张,否则优先用独立变压器加普通RJ45座的方式。因为集成座的变压器素质参差不齐,碰到恶劣电磁环境时不稳定;独立变压器选择面广,比如BAT、HALO等品牌,性能好验证,坏了好替换。当然,如果产品是消费级、追求低成本,集成座子完全能胜任。

接口防护这块是我特别想强调的。很多人觉得以太网是数字信号,抗干扰能力很强,接个RJ45就完事了。但工业现场不一样,网线可能走几十米,经过强电柜旁边,もし雷击或者大电机启停,感应浪涌打进来,PHY芯片首当其冲。我的标准做法是:RJ45的差分线对地并100nF/2kV高压电容,再串共模电感;如果现场浪涌风险高,还要加TVS管,选结电容小的型号,避免影响信号完整性。电源侧也要做隔离:如果是PoE或者外接24V供电,DC-DC模块原副边之间用隔离电容,让“地”和网口地的连接只有通过变压器的屏蔽层,这样能最大程度切断地环路。

这些防护器件加起来可能多花几块钱,但能避免售后被现场设备问题反复折腾,性价比其实很高。我做过一个对比统计,加了完整防护和没加防护的设备,在同一个工况恶劣的现场运行三个月,故障率差距至少是一倍以上。

2.4 PCB布局布线要点:差分线、接地与电源完整性

硬件原理图画完,PCB布局布线是决定网口性能的关键。以太网差分信号的布线,核心就是“等长、同层、少过孔、不跨分割”。发送和接收两对差分线,要严格控制线宽和线距,保证差分阻抗在100欧姆左右,长度差尽量控制在5mil以内。如果PCB层数不够,没办法做完整参考平面,至少要保证差分线下方有连续的地铜皮,不要在走线正下方开路。

布局上,PHY芯片要尽量靠近RJ45座子,中间放网络变压器,顺序是“PHY → 变压器 → RJ45”,这个顺序不能乱。变压器下方要挖空铜皮,避免寄生耦合。PHY的电源引脚要加足够的去耦电容,一般用0.1uF和10uF搭配,而且电容要靠近引脚放置,走线先过电容再到引脚,别反着来。晶振和时钟电路要远离网口、电源等干扰源,晶振下方不要走其他信号线。

还有一个容易踩的坑是“地”的处理。以太网接口的地和主控板的地,通常通过变压器屏蔽层连接,而不是直接大面积连通。有些工程师怕地不完整,把网口地直连主板地,结果形成地环路,反而把共模干扰引进来了。正确处理方式是:接口地单独铺一块铜皮,通过一个高压电容(比如1nF/2kV)和主板地耦合,只在变压器屏蔽层处单点连接,这样既泄放了高频干扰,又断开了地环路。

3. 软件协议栈与采集处理逻辑实现

3.1 LWIP移植的核心配置:内存、协议栈与网卡驱动

软件这边,我最常用的是LWIP,轻量、资源占用少,配合STM32这类MCU很成熟。LWIP移植看着复杂,其实核心就三块:底层网卡驱动的数据收发接口、内存管理配置、协议栈的时钟心跳。

底层网卡驱动,需要实现的是给协议栈提供底层收发函数。比如在STM32上,配合ETH驱动和描述符链表,把收到的以太网帧交给LWIP的netif->input处理,把协议栈要发的数据包通过描述符交给DMA发送。中断服务函数里要处理接收完成、发送完成、链路状态变化等事件,注意一个原则:中断服务函数里尽量少做逻辑操作,收到包先拷贝到协议栈的PBUF里再交给上层,发送完成只置标志位,真正释放PBUF放在主循环里做,不然中断里处理时间太长,会丢包。

内存配置是LWIP容易出问题的地方。LWIP有两套内存方案:内存池和堆内存。我一般把PBUF池配置成固定大小,比如30个256字节的PBUF,用于接收数据;协议栈堆配置成20KB左右,用于动态分配发送缓冲区。如果设备带的传感器多、并发连接多,内存要适当加大。我的经验是:先按需求估算最大同时能处理的连接数,连接数乘以2到3倍的单连接占用内存,再预留30%余量,这样基本不会OOM。LWIP还提供统计接口可以查看内存使用率,长期跑压力测试的时候记得打开它,能提前发现内存泄漏。

时钟心跳是LWIP运行的基础。LWIP有很多定时事件,比如TCP的重传、ARP缓存老化,都需要一个周期性的tick来驱动。一般用MCU的SysTick或者定时器产生250ms或者1ms的中断,调用sys_check_timeouts()。注意:tick周期不能太长,不然TCP超时重传不准;也不能太短,太短浪费CPU,实测下来10ms到250ms都能跑,看应用需求。

3.2 UDP还是TCP:不同场景下的协议选择

这是个老生常谈但每次选型都要纠结的问题。以太网采集单元的上位机通信,UDP和TCP各有拥趸,我的态度是:存量项目和工业现场设备间通信,优先考虑Modbus TCP(它基于TCP);纯遥测数据上报、对实时性要求不高、可以容忍少量丢包的场景,UDP性价比更高;如果要求数据不能丢、指令必须达成,那必须TCP。

TCP的优势是可靠、有确认和重传机制,适合指令下发和配置管理,比如上位机要改采集单元的IP地址、采样率,必须保证这条指令被设备收到并执行。缺点是协议开销大,建立连接和断开连接需要握手,而且在弱网环境下重传可能导致实时数据堵塞。UDP就简单直接,只管发,数据处理和重传逻辑全扔给应用层自己定。但本地以太网这个环境里,丢包率其实相当低,尤其是用网线直连或者同一个交换机下,所以UDP并没有很多人想象的那么不可靠。

我常用的组合方案是:数据上报用UDP,管理和配置用TCP,或者直接在UDP之上自定义一个带序列号和ACK的轻量协议。之前做一个项目,采集单元要同时服务上位机软件和一个云网关,云网关要求数据走MQTT over TCP,上位机要求Modbus TCP。最后我做了个协议适配层,内部统一用结构体表示采集数据,发送时按不同目标协议封装,接收时统一解析,代码风格清爽,后续加新协议也好扩展。

3.3 采集任务与网络任务的调度设计

MCU上的软件结构,我习惯分成三层:采集驱动层、业务处理层、通信层。采集驱动层由定时器触发,比如每1ms打一次拍,负责读取ADC、滤波、标定;业务处理层做数据融合,比如把8路模拟量打包成结构体,加上时间戳和通道状态;通信层只负责收发和协议封装。三层之间用队列或者环形缓冲区传递数据,不让它们直接耦合。

如果用的是带RTOS的方案,比如FreeRTOS,我会开一个采集任务、一个网络任务、一个状态管理任务。采集任务优先级高于网络任务,因为采集丢一拍可能影响精度,而网络稍微晚一点发个几十毫秒问题不大。采集任务和网络任务之间用一个有界队列,队列满时优先丢弃旧数据保新数据,这个策略在高速采集场景下特别重要。如果发现队列经常满,那就说明采集速率超过了网络发送能力,要么降采样率,要么压缩数据,别通过加大队列掩盖问题。

裸机方案其实也能做到类似效果。主循环里依次执行采集标志检查、网络轮询、协议超时处理,中断只负责置标志和存数据。裸机的优势是代码直观、没有任务切换开销和优先级翻转问题,适合逻辑简单的设备。但如果你的设备同时要处理Modbus TCP和MQTT两种协议,还要本地存储补传,我建议还是直接上RTOS,代码组织和后期维护都轻松很多。

3.4 帧序列号与时间戳:数据完整性设计的细节

做以太网采集,一个容易忽视的细节是数据包的序列号。UDP本身不提供序列号,如果数据在网络上丢了一包,上位机是不知道的。所以我在应用层都自己带一个递增的包序号,放在报文头里,每发一包加一。上位机收到数据后,通过检查序号连续性就能判断是否有丢包,而且还可以对乱序的包做重排,虽然同一个局域网里乱序概率很低,但防患于未然没坏处。

时间戳也是类似。采集的数据必须带设备本地时间,这样上位机或者云平台才能准确判断数据是什么时刻产生的,而不是什么时候收到的。设备本地时间一般通过SNTP从NTP服务器同步,或者由上位机在组态时下发。要注意:如果设备有本地存储补传功能,补传的数据包时间戳是过去的时间,上位机如果按接收时间排序就会出错,必须按数据时间戳排序。这个细节我见过不少项目踩坑,数据本身没错,就是上位机排序逻辑没考虑设备端时间戳,结果曲线乱跳。

还有一个小技巧:在上行报文的帧头加设备ID和固件版本号。设备ID用于多设备组网时区分数据来源,固件版本号用于远程排查问题。我之前调试一个现场,老是报数据异常,后来一查是现场设备固件版本太老,和上位机的新协议不匹配,因为没有版本号,排查至少多花了半天。加进去之后,这类问题一眼就能定位。

4. 联合调试方法与问题排查实录

4.1 硬件调试第一步:先确认PHY和链路协商状态

拿到一块新板子,我从来不直接跑协议栈,那是浪费时间。第一步是硬件层面确认PHY是否工作正常。上电后先量PHY的供电电压和复位时序,确保复位后PHY能稳定工作。然后通过MDIO/MDC接口去读PHY的基本寄存器,比如状态寄存器,看看PHY有没有识别到网线连接,速率协商到多少,全双工还是半双工。

如果PHY读不到寄存器,或者链路状态一直显示断开,优先检查几个地方:PHY的复位引脚有没有被MCU正确拉高或拉低(有的PHY低电平复位)、25MHz晶振有没有起振、RMII接口的时钟源对不对、MDIO上拉电阻有没有接。我调试过一个板子,PHY寄存器读不全,偶发读不到,查了半天发现是MDIO信号线的上拉电阻值选大了,导致信号边沿太缓,换小一点的上拉就好了。

链路协商成功后,再用简单的网络工具验证基本通路。把板子的IP设置成和电脑同一网段,先ping一下,能通说明TCP/IP通路基本没问题。如果你用的是STM32加LWIP,ping通这一步过了,网口硬件和底层驱动基本就稳了。如果ping不通,优先排查MAC地址配置、IP地址子网掩码、默认网关、ARP是否正常解析。重点注意:很多开发板默认MAC地址是00:00:00:00:00:00,这在某些交换机上会被丢弃,记得给设备设置一个合法的MAC地址。

4.2 吞吐量与丢包测试:用iperf和Wireshark说话

ping通了只是起点,采集单元要长时间、高频率上报数据,吞吐量和稳定性必须通过实测验证。我测试时常用的工具是iperf,电脑上跑iperf同时,让板子跑LWIP并打开iperf测试服务,打流就能测出实际吞吐量。对100M以太网来说,MCU加LWIP的实测吞吐量受限于主频和内存拷贝开销,通常能做到50Mbps到90Mbps之间,如果你的设备主频不高,这个数字再低一些也正常。

如果实测吞吐量明显偏低,或者打流过程中出现丢包,我通常按这个顺序排查:先看CPU占用率是不是太高,LWIP的PBUF拷贝和内存分配是不是瓶颈;再看网卡驱动的DMA描述符个数是不是太少,描述符不够会直接丢包;还要看接收中断的处理逻辑,如果每次中断都拷贝大块数据,会造成下一个包没地方放;最后看是否开了太多TCP连接,LWIP的PCB资源有限,连接一多内存就不够用。

Wireshark是排查协议层问题最好的工具。板子发包后,电脑上打开Wireshark抓包,输入过滤条件比如eth.addr == 板子MAC地址或者直接按IP过滤,看报文里面的源IP、目的IP、源端口、目的端口、序列号、时间戳。如果发现板子发的包没有按顺序,说明应用层序列号逻辑有bug;如果包发出去了但电脑没收到,大概率是数据处理或网络驱动的问题。我在现场遇到的问题,有七成是靠Wireshark定位的,建议每个做网络设备的工程师都熟练使用它。

4.3 现场常见故障:从丢包、掉线到IP冲突

采集单元在现场跑起来,各种问题就来了。我把这几年遇到最多的故障整理一下。

第一个是偶发掉线。现象是设备运行一段时间后ping不通,但断电重启又好了。原因通常是PHY进入休眠或者链路断开后没有正确恢复,LWIP没有正确处理网线插拔事件。解决办法是周期轮询PHY的状态寄存器,一旦发现链路断开,就主动复位PHY并重新初始化MAC,同时让LWIP的netif重新进入链路UP状态。另外,现场的电磁干扰也可能造成PHY误判链路断开,所以网口防护和滤波电路不能省。

第二个是丢包严重。如果只在特定时间段丢包,比如变压站里的设备早上和傍晚丢包多,多为现场电磁干扰导致,网口防护和布线要注意。如果是固定间隔丢包,比如每1000包丢一包,多为软件缓存设计问题,重点排查缓冲区大小和DMA描述符数量。如果是高峰时段丢包,多为本地网络存在ARP广播风暴或带宽拥塞,需要在交换机侧适当配置VLAN隔离,把采集单元划分到独立的广播域。

第三个是IP冲突。这是最让人头大的问题,因为两台设备用同一个IP,行为表现时好时坏,很难定位。我处理过的一个现场,新装了一个PLC,结果整条产线上的采集单元集体掉线,排查到最后发现PLC的IP地址被设成了和其中一个采集单元一样的地址。预防措施是给所有设备做统一的IP规划表,下发前通过TELNET、串口或者Web配置界面核对;排查时用Wireshark抓ARP广播,能看到有两个MAC地址在抢同一个IP。

第四个是发热导致的漂移和死机。工业现场柜内温度高,以太网芯片和主控散热不好,长时间运行会不稳定。我的经验是选型阶段就要算总功耗,如果整个板子功耗超过2W,建议加散热片或者主动风道设计;PCB布板时开发电源要靠近大功耗器件,避免热量集中在一小块区域。如果产品已经定型,也可以通过降低主频、降低发射功率、优化代码降低功耗来缓解。

下面的故障速查表是我自己做项目时会贴在工作站旁边的,每次现场出问题先查表,能省不少时间。

故障现象可能原因排查手段解决方案
ping不通PHY未工作/时钟异常/驱动未配置量PHY供电、读PHY寄存器修复硬件,检查复位和时钟配置
偶发掉线链路状态未正确处理/干扰轮询PHY状态寄存器,Wireshark抓包增加链路检测和自动恢复逻辑
固定间隔丢包DNS描述符不足/缓冲区溢出查看LWIP统计计数增加描述符数量,优化缓存策略
高峰时段丢包广播风暴/带宽拥塞交换机关看端口统计划分VLAN,优化网络拓扑
IP冲突两台设备相同IPARP抓包,核对IP规划表统一IP管理,加自动检测告警
长时间运行死机散热不足/内存泄漏观察温度,查看内存统计改善散热,检查内存分配释放逻辑

4.4 一个完整的调试案例:从“网口不通”到“稳定运行24小时”

最后分享一个让我印象挺深的调试案例。有个项目是给一栋办公楼做能耗监测,采集单元装在每个楼层配电间,通过以太网上传电表数据。设备在现场调试时,总是有几台网络不通,而且不固定的,今天这台断,明天那台好。一开始以为是网线问题,换了六类线也没用;以为是交换机端口问题,换了交换机还是偶发。

后来我拿了一台故障设备回实验室,连上Wireshark和电脑单独测,发现ping能通,但用iperf打流时吞吐量只有正常值的四分之一,而且包错误率高。继续排查,发现板子的RMII时钟信号质量很差,在逻辑分析仪上看到REF_CLK的边沿不干净,有毛刺。再查原因,发现是PCB布局时这颗50MHz时钟线从PHY到MCU的距离过长,而且路径正好从一颗DC-DC电源芯片底下穿过,电源芯片的开关噪声耦合到了时钟线上。

解决办法很简单:把时钟线重新走线,避开DC-DC区域,加宽走线并包地处理,同时在PHY和MCU的REF_CLK引脚加小电容滤波。改完打样回来,再用iperf压了24小时,吞吐量稳定在90Mbps以上,丢包率为0。后来这批设备装到现场,再没出现网口问题。

这个案例给我的教训是:很多看似软件或者协议栈的问题,根源都在硬件布局和信号完整性上。所以我现在做以太网相关的板子,原理图和PCB评审阶段就特别较真,尤其是时钟、差分对、电源这几个地方,反复检查。等板子打回来才开始调,一旦出现问题,排查成本高得多。

最后再分享一点我的体会

做以太网采集单元这几年,我最大的感受是:这个系统看起来不难,不就是“采集加上网”嘛,但真正做好、做稳、做到现场不折腾,里面全是细节。芯片选型只是开始,电源、时钟、布局、防护、缓存、协议状态机、异常恢复,每一环都得认真对待。

如果你正准备做类似的产品,我建议先别急着买开发板跑demo,而是先花半天时间,把你要采集的信号类型、数据量、上位机处理逻辑、现场网络环境这几个问题想清楚。这些问题想明白了,写方案的时候自然就知道怎么选型、怎么设计、怎么预留扩展。等样机出来,再按“硬件验证 → 单板通信测试 → 联合上位机测试 → 现场试运行”的顺序走一遍,基本不会出大纰漏。

这套方案往后的扩展方向也不少。比如现在车载以太网越来越普及,测试规范的思路可以借鉴到工业场景的链路质量监测里;如果设备要做TSN(时间敏感网络)同步,那主控和PHY的选型就得重新考虑;还有现在边缘计算越来越火,采集单元完全可以加一颗协处理器,在设备端就完成特征提取和数据清洗,再往上传,能省不少服务器端的压力。希望这篇内容能帮你在做以太网采集单元的时候少走点弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询