尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

以太网原理与实战:从帧结构到ESP32、STM32踩坑全攻略

以太网原理与实战:从帧结构到ESP32、STM32踩坑全攻略 以太网这词儿干网络的人天天挂在嘴边搞嵌入式的也绕不开它甚至家里随便拉根网线插电脑上那个叫“以太网”的图标背后就是一套跑了四十多年的成熟技术栈。我最早接触以太网还是在学校实验室拿一根交叉线怼两台电脑传文件当时觉得这东西真神奇后来工作了在工控现场、在FPGA板卡上调10G MAC再回头看以太网才发现它的设计比想象中要精妙得多。这篇就把以太网从原理到实战的方方面面捋一遍尤其是把热词里提到的ESP32接LAN8720那几个坑、Windows下以太网选项消失这类日常高频问题也一起讲透既照顾新手入门也给老手做个备忘。1. 以太网到底解决什么问题一台设备怎么和全世界对话很多人一上来就背定义说以太网是“一种计算机局域网技术”但这事儿得从根上理解。以太网要解决的核心问题只有一个让多台设备在同一个网络里高效地共享数据。打个比方就好比一个办公室里十几个人要互相传文件你得有统一的传文件规则、统一的文件格式、统一的传文件顺序否则一群人同时开口说话谁也听不清谁。以太网干的就是这事儿它定了“数据长什么样”“怎么从A到B”“冲突了怎么办”这一整套规矩。早期的以太网用的是同轴电缆一条线串起所有机器像搭积木一样串在一起那个时候叫“总线型拓扑”。一台机器发数据其他所有机器都能收到——这就是以太网最初的设计逻辑共享介质广播传输。但所有机器共享一条线就意味着同时只能有一台发数据否则就“撞车”了。为了让大伙儿有序地“轮流说话”以太网设计了一个很巧妙的机制叫CSMA/CD载波监听多路访问/冲突检测这个机制是早期以太网的灵魂我把它展开讲一下。1.1 CSMA/CD一套“先听后说、边听边说”的交通规则CSMA/CD具体工作流程可以拆成四步先听、再说、边发边听、撞了就退。先听Carrier Sense发送数据前先监听这条共享介质上有没有其他设备在传输数据。如果有就等一会儿再试相当于你进会议室前先看看里面有没有人在讲话。再说Multiple Access确认介质空闲后开始发送数据。边发边听Collision Detection发送过程中还要同时监听线路上的信号。两辆车同时抢一个路口司机得靠鸣笛察觉撞车了。如果发现线路上的信号跟自己发的对不上说明产生冲突立刻停止发送。撞了就退Random Backoff冲突后不能马上重发而是随机等一段时间再重发。随机退避很重要因为如果大家都等同样的时间重发时还会再撞。这套规则很有生活智慧类似于对讲机通话的场景你先按住PTT键听有没有人正在讲话没人讲你再说说的过程中如果感觉有人跟你抢话头两个人就都停下来各自心里默数一个随机的秒数再试着说。后来交换机普及全双工通信成为主流发送和接收各用一对线CSMA/CD这一套在物理上已经很少出现冲突了但它在教科书里依然是理解以太网的历史入口很多老工程师排查疑难杂症时还会往回翻这一段。1.2 从“一根线大家抢”到“交换机点对点”现在你用的以太网物理形态早就变了。中间一条主干线被换成了交换机Switch每台设备通过双绞线或者光纤独立地接到交换机上组成了星型拓扑。这个改变是革命性的。在早期的共享式以太网里带宽是所有设备均分的10Mbps的网段10台设备同时用每台最多分到1Mbps。而有了交换机之后每个端口提供独立的带宽你和另一个端口之间的通信其他端口完全不受影响。这就好比原来办公室里只有一个公共复印机大家排队用现在给每个工位配了一台谁都不耽误谁。交换机还有个关键能力叫MAC地址学习。它能记住每个端口后面挂的设备网卡地址MAC地址数据来的时候看一眼目的MAC然后只从对应的端口转发出去不再无脑广播到所有端口。这个功能极大地提升了网络利用率也降低了其他设备的处理压力。2. 核心细节拆解以太网帧、MAC地址和最小帧长要上手调以太网不管是写驱动还是配交换机都绕不开“帧”这个概念。以太网的数据是从一个设备“扔”到另一个设备的扔出去的每一段数据都叫一个“帧Frame”。就像快递包裹不能光把货裸着寄出去外面得有包裹箱、面单、单位和收件人信息。以太网帧就是给数据套上的那层包裹皮。2.1 以太网帧格式逐字节拆解标准以太网帧长这样以最常见的Ethernet II格式为例字段长度作用前导码Preamble7字节告诉接收方“数据要来了”用于同步时钟内容是0x55交替SFD帧起始定界符1字节最后一个同步标志内容为0xD5表示紧随其后的是帧头目的MAC地址6字节接收方网卡的物理地址源MAC地址6字节发送方网卡的物理地址类型/长度Type/Length2字节0x0800表示上层是IPv40x0806表示是ARP0x86DD表示IPv6在早期标准里也表示后面数据段的长度数据载荷Payload46~1500字节真正要传的上层数据比如IP包不足46字节要填充FCS帧校验序列4字节CRC32校验值接收方拿它判断数据有没有传错前导码和SFD在抓包软件里一般不显示因为它们算物理层的东西大部分网卡芯片已经自动剥掉了。你打开Wireshark看到的“Ethernet II”部分通常是从目的MAC开始的。Type字段有个历史沿革当年第一个版本用2字节表示长度后来发现网络变大后得知道上层协议是什么干脆改成了类型值而且规定大于1500的值一律视为类型。现在你看到的0x0800、0x0806都是类型值。2.2 MAC地址网卡界的身份证号MAC地址是每个有以太网接口的设备出厂时烧录进网卡的物理地址一共48比特6字节写作十六进制时像“A4:5E:60:XX:XX:XX”。前24位是厂商代码也叫OUI比如华为、思科、瑞昱都有自己申请的号段后24位是厂商内部自己分配的序列号。这就好比你身份证的前6位代表省市区后面是个人编码。新手常犯一个认知错误总把MAC地址当IP地址用。记住一条原则MAC地址解决的是“在同一个局域网里帧往哪儿送”的问题IP地址解决的是“在全球互联网里数据包最终找谁”的问题。数据包从北京发到上海中间每一段链路的MAC地址都在变每一跳的源和目的MAC都重新封装唯独IP地址不变。所以你在Wireshark里看到的MAC地址永远是相邻设备的它不代表源主机的真实身份只代表“上一棒是哪台设备发来的下一棒要交给哪台设备”。2.3 最小帧长度和时间空隙为什么一定得是64字节以太网规定一个帧从目的MAC到FCS字段最短要64字节。算一下目的MAC 6 源MAC 6 Type 2 Payload FCS 4 64那Payload最少就得是46字节不够就往下填充。为什么定这个下限这里有个历史原因。早年用的是CSMA/CD发送方在最远端的距离内如果发生冲突得保证发送方还没发完这个帧就有机会检测到冲突。什么情况检测不到冲突如果帧太短眨眼就发完了然后线路进入空闲可信号其实还没传到最远端远端这时候发了一个信号过来两边就撞了但发送方那边已经收工了它感知不到这次冲突这个帧就“白丢”了。后来10Mbps以太网经过计算在最大冲突域直径的情况下要想确保“边发边听”能听到远端冲突最短发送时间折算成字节正好是64字节。这个数字在今天的全双工交换网络里看已经没有强制必要性了但为了兼容历史协议栈和交换机逻辑所有网卡仍然遵守这个规则要传的数据不够46字节网卡硬件会自动填充程序员一般不用管。帧和帧之间还有一个必须留出的空隙叫帧间隔Inter-Frame GapIFG标准规定最短要有96比特时间10Mbps下是9.6微秒。这相当于快递班车之间车距给接收方留出处理上一帧、清空缓冲区的时间。有些低端网卡或者驱动偷懒把帧间间隔压缩了短时间内不会出问题但高流量下就会莫名其妙地丢包这类问题在万兆调优时特别常见。3. 物理那点事网线、接口和自动协商的冷门细节协议层面的帧格式看得差不多了工作里卡住你的往往不是协议而是物理层。网线没做对什么协议都白搭。很多人觉得做网线是运维小弟的活儿但当你在现场没有现成的成品线只能自己压水晶头时就知道这里面有多少讲究了。3.1 双绞线线序T568A和T568B的选择现在家用和办公用得最多的是超五类Cat5e和六类Cat6双绞线里面一共8根铜芯两两绞合在一起分成4对。“双绞”这个设计就是为了抵消电磁干扰——两根线绞在一起外部干扰在两根线上产生的噪声几乎是同相位的接收端靠差分信号一减干扰就没了。做水晶头必须按标准线序来主流标准就两个T568A和T568B。B方案用得最多T568B线序从左到右橙白、橙、绿白、蓝、蓝白、绿、棕白、棕T568A线序从左到右绿白、绿、橙白、蓝、蓝白、橙、棕白、棕有个百试百灵的技巧只要把T568B的1和3号线对调、2和6号线对调就变成了T568A。本质上只动橙绿这两对线在1、2、3、6位置上的排列。两端都按同一个标准做叫直通线是现在用得最多的因为现在的网卡口和交换机口都有自动翻转功能Auto-MDIX交叉线和直通线能互相替代。如果线序一头是T568A、一头是T568B那就是交叉线老设备之间直连时用现在基本用不上了。3.2 百兆和千兆只用4根线和用满8根线的区别很多刚入行的朋友看到百兆网线里只有4根线在工作觉得很奇怪。其实百兆以太网在双绞线上只用到1、2、3、6四根线1和2负责发送3和6负责接收剩下的4、5、7、8在百兆模式下是空闲的。这是当初百兆标准为了兼容10Mbps和节省成本做的妥协。但千兆以太网不一样8根线全部都要用上4对线同时收发每一对都是双向全双工。这就是为什么有些时候你插上一条老网线链路协商出来速度只有100Mbps跑不满千兆——大概率是那几根“平时用不到”的芯线接触不良或者根本没有压到位。实操中有个更隐蔽的坑有些便宜的网线虽然标着千兆实际芯径是铜包铝或者只有四根铜芯两根铁芯线损很大长距离传输时丢包严重。在工程现场我会直接拿万用表量一下每对线的直流电阻纯铜芯每百米阻值大概在9.5欧姆左右超过这个数太多基本就是偷工减料了。3.3 自动协商机制千兆口为什么恋人百兆口把千兆设备插到百兆交换机上链路为什么会自己变成100Mbps这是**自动协商Auto-Negotiation**在起作用。网卡上电后会在链路上发送一个快速脉冲序列告诉对端“我能支持多快的速率我能支持全双工或者半双工”双方各自比较能力集取一个双方都支持的最高速率和双工模式。这个机制平时很省心但也有翻车场景。最有名的坑是某些老设备强制设为100Mbps全双工新交换机端开着自动协商两边会协商失败或者速率能对上、双工模式对不上。结果链路显示是通的但跑起来丢包率极高表现为“能ping通但慢得要死”实际原因是对端默认回退到了半双工模式两个全双工/半双工不一致小流量没事大流量直接冲突爆炸。遇到这种问题唯一的稳妥办法就是两边都强制设置成一样的速率和双工模式。4. 从Ethernet到TCP/IP一组实测经验带你看清分层很多人一开始分不清TCP/IP和以太网的关系。这俩不是一回事但日常一起用几乎可以打包理解。打个比方以太网是“送快递的货车”它只负责把配送车从一个路口开到下一个路口TCP/UDP是“快递单上的规则”负责把包裹拆包、按序排列、确认签收。货车不管包裹里装的是什么以太网也不管上层是浏览器网页、视频流还是聊天图片。4.1 一个数据包出门的完整流程当你在浏览器里输入一个网址数据是这么一层层“套娃”出去的应用层生成HTTP请求。TCP层把HTTP请求拆成多个合适的段Segment每个段加上源端口、目的端口以及序号等信息。IP层给每个段套上IP头填上源IP和目标IP地址形成一个IP包。在真正把数据从网卡发出去之前系统要先知道“下一跳设备”的MAC地址。这时候协议栈会先查ARP缓存如果没有就广播一条ARP请求“谁的IP是192.168.1.1告诉你的MAC地址。”目标设备回一条ARP应答协议栈拿到MAC地址后填入以太网帧头帧才被交给网卡。网卡把这个帧通过双绞线发到交换机交换机根据目的MAC转发给目标设备。目标设备收到帧后一层层剥掉以太网头、IP头、TCP头最终把数据交给应用。抓包时你会发现以太网帧头里的目的MAC有时不是“你真正想访问的服务器”的MAC而是网关路由器的MAC这个细节是很多新人第一次抓包时懵圈的点。原因很简单数据包要先发给网关由网关再往外转以太网这一层只覆盖“本段链路”。4.2 为什么叫Ethernet II而不是叫VLAN经常在Wireshark里看到两种帧类型Ethernet II和802.3 LLC。Ethernet II用的是前面说的Type字段方式简单高效802.3 LLC是IEEE正式标准定的格式在Type字段的位置变成了“长度”然后在数据前面额外加了DSAP、SSAP和Control三个字节。后来因为大家都习惯了Ethernet II实际网络里跑的绝大多数都是Ethernet II。而你在网管交换机上配置Trunk时看到的VLAN Tag就是在源MAC和Type字段中间插入了4字节的802.1Q标签不影响帧本身的结构判断。5. 嵌入式场景实战ESP32接LAN8720和STM32F407调以太网的避坑指南以太网不只是电脑和路由器之间的通信在物联网设备、工控主控板上单片机一样要上以太网。这一块是热搜词里被问得最多的也是我当年踩坑最狠的地方。拿ESP32接LAN8720来说这个方案在开源社区非常流行因为ESP32本身不带以太网MAC所需的PHY收发器需要通过RMII接口外挂一颗PHY芯片LAN8720是最常用的选择。理论上很成熟但实操中一堆人卡住我把高频问题集中曝光一下。5.1 三大高频问题的现象、根因和解决方法问题一插上网线后Link灯不亮或一直闪协商不到链路。这个80%出在硬件接线和网络变压器上。LAN8720的差分收发引脚RX/RX-、TX/TX-必须配对接到RJ45的网络变压器上而且一定不能接反。很多人画PCB时只注意了RMII数字接口CLK、TX_EN、TXD0、TXD1、RXD0、RXD1、CRS_DV却忽略了PHY和RJ45之间的模拟连接没做阻抗匹配。另外LAN8720的REF_CLK有内部时钟源和外部时钟源两种模式时钟频率必须精准稳定在50MHz用内部时钟时晶振质量不好会导致链路能协商成100Mbps但丢包率感人。问题二单片机读不到LAN8720的寄存器PHY地址不对。LAN8720的PHY地址是由PHYAD0引脚的电平决定的固定搭配是ETH_PHY_ADDR 0时PHYAD0引脚要拉低。有些模块把PHYAD0引出来了而且默认是高电平如果你不理会它直接用默认地址0去读必然读不到。解决方法是先用万用表测一下模块上PHYAD0引脚的电平再在代码里把PHY地址改成1。问题三RMII时钟相位没对齐丢包严重。RMII接口要求以太网PHY提供50MHz的REF_CLK这个时钟有两个选择一个是从PHY的XTAL1/CLK_OUT输出给MCU另一个是MCU自己提供50MHz给PHY。ESP32和LAN8720的组合里最稳的方式是让LAN8720做主时钟源也就是用25MHz晶振给PHY然后LAN8720内部PLL倍频出50MHz REF_CLK输出给ESP32。如果反过来让ESP32输出50MHz给LAN8720时序上迟滞大容易在外设配置不当时出现极不稳定的现象。很多人的代码例程没注意这一点导致同样的驱动逻辑在不同板子上表现好坏不一。提示遇到链路不稳定先看ESP32日志里ETH_SYSTEM_CLOCK是否成功使能再看LAN8720的Basic Mode Status Register地址1的第5位有没有置1如果为0说明远端没有回发链路脉冲问题还在物理层扒代码没用去查线。5.2 STM32F407以太网RMII83848配置要点STM32F407内置了10/100M以太网MAC控制器但同样需要外接一颗PHY和ESP32方案类似区别在于STM32的ETH外设对于中断、DMA描述符的管理复杂一些。用DM9161或LAN8720时我建议直接把STM32的RMII主时钟配置说明写清楚F407的RMII接口需要外部提供50MHz参考时钟这个时钟可以由STM32的MCO引脚输出从PLL分频而来也可以由外部有源晶振专门供给PHY。个人强烈建议用外部50MHz有源晶振直连PHY的REF_CLK引脚同时给STM32的RMII接口提供同一个时钟避免MCO配置时跟系统主频相互牵制减少时钟抖动。F407的DMA描述符初始化也是重灾区。以太网DMA需要你在内存中维护一个发送描述符链表和一个接收描述符链表每个描述符里填缓冲区地址、状态标志。如果描述符的地址没有正确对齐要求4字节对齐DMA会直接总线错误表现就是ETH_RX描述符读取不到数据回调函数永远不会触发。很多教程直接给了STM32CubeMX生成的代码但没有解释描述符链表的原理一旦要改成动态分配内存就懵了。5.3 单芯片方案与PHY外挂方案的取舍做产品选型时到底是用内置以太网MAC外挂PHY还是直接选一个集成MACPHY的单芯片比如W5500这是一道经典选择题。STM32LAN8720方案成本低灵活性高适合有一定驱动开发经验的团队。但你必须自己操心PHY寄存器初始化、中断处理、DMA描述符管理软硬件联调周期比较长。W5500方案W5500把MAC和PHY都集成了而且内部硬件实现了TCP/IP协议栈单片机只需要通过SPI接口读写寄存器就能完成TCP通信开发工作量大幅降低。代价是它只能处理TCP和UDP吞吐量受限于SPI通信速度千兆场景根本不用想。FPGA方案如果上了万兆以太网10G Ethernet Subsystem那就是Xilinx、Intel FPGA搭配SFP光模块的天下了。MGT高速串行收发器加Xilinx 10G MAC IP核配合DMA引擎做数据搬运逻辑上比单片机复杂一个数量级时钟约束和时序收敛问题能把人调到怀疑人生。这种场景我在实际项目里的体会是MAC层IP核可以省很多事瓶颈一定在DDR带宽和PCIe/DMA接口设计上。6. 系统日常排障从Windows网络设置到虚拟机网卡的那些事热搜词里有好几个都很接地气什么“win11没有以太网选项了”、“网络适配器以太网消失”、“我们无法设置移动热点因为你的电脑未建立以太网”这些我在日常帮人处理电脑时也经常遇到。很多时候不是网络真坏了而是网卡驱动或者系统电源管理把网卡整失踪了。6.1 以太网适配器凭空消失的急救方法Win11系统里前面的以太网选项不见了或者是设备管理器里的网卡设备带了个黄色感叹号按以下思路排查打开设备管理器展开“网络适配器”看有没有网卡设备。如果整个列表里只剩无线网卡说明有线网卡在系统层面没被识别可以点“操作—扫描检测硬件改动”先扫一遍。如果设备还在但带感叹号升级网卡驱动用驱动总裁或者直接去官网下最新驱动都行。Realtek的千兆网卡最常出现这种情况。如果设备完全消失除了驱动问题还可能是BIOS里禁用了有线网卡。进BIOS查Onboard LAN或者Integrated NIC选项确认是Enabled。还有一种极其隐蔽的电工软故障网卡和芯片组因为主板上静电导致掉电断电拔插头、扣主板电池放个电重新开机就好了。听着玄学但我实测至少救回过两台机器。“无法设置移动热点”的报错通常也是因为Windows在检测主机网络状态时发现“以太网”这个接口没有正确暴露根源还是在网卡驱动或者服务被优化软件禁用。Win11这代系统对网络接口的枚举逻辑很敏感各种“一键优化”工具极容易把WLAN AutoConfig服务和以太网的相关注册表项搞坏。6.2 VirtualBox Host-Only Ethernet Adapter报错的常见原因很多人装VirtualBox或者VMware创建虚拟网卡时会报错“Interface (VirtualBox Host-Only Ethernet Adapter) is not a host-only adapter”。这个报错的本质是VirtualBox在主机上创建的那个虚拟网卡没有正确绑定到虚拟网络协议栈上导致VBoxMis无法识别它的类型。常见修复路径在Windows的“网络连接”里找到VirtualBox Host-Only Network适配器右键属性确认勾选了“VirtualBox NDIS6 Bridged Networking Driver”和“VirtualBox Host-Only Ethernet Adapter”这两个协议项。如果协议项不全先卸载这个网卡设备管理器里删除设备再在VirtualBox全局设定里重新添加Host-Only网络。如果还不行把VirtualBox升级到最新版老版本和Windows 11的新网络栈确实有兼容性问题。6.3 排查链路层问题网卡状态和抓包三板斧遇到以太网连接问题我个人的排查顺序永远是“从物理层开始往上走”这不是教科书规矩而是经验教训——先看硬件再看链路最后才看协议。第一板斧看网卡状态。Windows下打开“网络和共享中心—更改适配器设置”双击以太网看“速度”那一栏。如果是1.0Gbps说明物理协商正常如果是100Mbps线缆问题优先如果显示“网络电缆被拔出”查线、查端口、查交换机供电。第二板斧ping网关。ping 127.0.0.1测的是协议栈自身这个通不等于网卡通。真正测链路得ping自己电脑的内网IP再ping网关IP比如192.168.1.1。ping得通但网络还是慢说明二层链路OK问题在DNS或出口带宽。第三板斧抓包。Wireshark抓包时如果发现大量TCP重传、乱序先去查链路双工模式是不是匹配如果看到大量的ARP广播重复有可能有设备配置了相同的IP地址。这些都是小问题但定位起来很花时间没有抓包三板斧纯靠猜能把人累死。7. 面向新兴方向的延伸车载以太网值得工程人提前布防热搜词里“车载以太网”出现了好多次说明这个概念已经从传统汽车圈蔓延到普通工程师视野了。传统汽车的内部通信一直靠CAN、LIN总线速率极低一个CAN总线最高也就1Mbps连个复杂的音视频流都传不动。随着智能座舱、自动驾驶对高带宽的需求爆发车载以太网被推上前台。车载以太网用的物理层标准和办公室以太网不一样最典型的是100BASE-T1和1000BASE-T1。它只用一对双绞线传输代替了传统百兆/千兆以太网的四对线目的就是为了减轻车内线束重量、降低布线复杂度。而且它支持的传输距离更长抗电磁干扰能力更强因为车里的电磁环境比机房恶劣太多了。协议层面车载以太网也引入了一些音频/视频桥接AVB和时间敏感网络TSN的机制能保证实时音视频流的低延迟传输。这些技术方向在未来几年会成为汽车电子工程师的必备技能做传统嵌入式以太网的朋友可以提前观察一下。不过对刚入门的读者来说车载以太网不用急着啃先把基础的以太网帧结构、PHY芯片接入、交换机转发这些吃透车载场景只是在物理层和链路层做了针对性改编核心的以太网基因是一样的。8. 工业现场的以太网封装Kepware和DL645电表通信的一个实战案例热搜词里有一条“Kepware连接DL645-2007电能表以太网封装”这种工控场景看着冷门但逻辑很有代表性。DL/T 645是中国电表常用的通信规约传统上走串口RS485但现在的智能电表都支持网口或者串口服务器转以太网Kepware这个网关软件需要把DL645协议的数据包“封装”进以太网包里再发给电表。实际配置时要注意几点KEPware里使用时序类型为“Ethernet”目标地址写法通常是IP:端口比如192.168.0.100:10001不能只写IP不写端口。DL645的报文里带CRC校验和长度字段Kepware在串口模式下会把控制字符做转义但以太网封装后一般不做转义两者解析逻辑不同设置错会导致Kepware返回超时错误。现场有交换机时电表侧要确认IP和掩码跟电脑在同一个网段否则跨网段通信Kepware会一直显示Bad Quality状态。这类工业协议封装的核心思路就是底层不管是以太网还是串口上层业务逻辑照跑区别只是透明传输的载体不同。理解了这一点你就能在这个领域一通百通。9. 聊聊FPGA里的10G Ethernet Subsystem和高速以太网调优最后一个偏门但必须提的方向是FPGA领域的万兆以太网。现在的数据中心、通信设备里10G甚至25G以太网越来越常见FPGA里的10G Ethernet Subsystem IP核提供了从MAC到PHY或者只到MAC的完整方案但想把它调好涉及的功夫不在IP核本身而在系统架构。调试10G以太网我最深的体会是中间层没有问题问题永远在数据流量控制。MAC层发着发着忽然挂了大概率是上游DMA停了没恢复或者AXI总线带宽不够导致FIFO写满溢出。你得用ILA逻辑分析仪去抓MAC的tvalid/tready信号盯着它看上百万个时钟周期观察背压是怎么产生的。另一个高频问题是时钟抖动。万兆以太网对时钟质量要求极高参考时钟抖动超过某个阈值误码率就会呈指数上涨。现场排查时别只看有没有网口先拿频谱仪测参考时钟的近端相位噪声很多链路不稳都是因为用了普通的晶体振荡器而不是专用的低抖动晶振。在FPGA上调高速串行接口的经验告诉我不要一开始就追求跑满极限带宽先把环回模式Loopback跑通了再说。PHY内部环回、串行器环回、外部光模块回环一级一级打通每层验证完再往下一层走这种“自下而上”的调试方法能帮你过滤掉至少一半的低级问题。最后分享一点实际体会以太网这套技术入门门槛不高想用熟却真的靠积累。我踩过的最深的坑就是当年在F407上做以太网通信一切都“按教程配置”结果死活ping不通折腾了两天最后发现是网络变压器中间抽头供电没接对PHY的TX/RX眼图严重劣化。那种“软件没问题但就是不通”的挫败感后来想想其实是最长经验值的时刻。所以给你个建议学以太网不要光在电脑上试着玩找块带PHY芯片的开发板、一根几块钱的网线、一台傻瓜交换机自己动手做一条交叉线把两块开发板直连在抓包软件里亲眼看看ARP请求、TCP握手到底是什么样的。见识过这些原始报文后你再去看任何“以太网疑难杂症”心里都会比旁人透亮许多。
返回列表