
1. 为什么工业闭环控制需要“较真”的确定性先说个场景。你在产线上跑一台伺服电机PID闭环控制周期是1ms给定1000rpm现场实测转速总是在998到1003之间波动。控制工程师第一反应是调PID参数但我告诉你很多时候问题根本不在算法而在你用的这根以太网线。为什么因为工业闭环控制的本质是传感器采数据→控制器算→执行器动这个循环必须在严格的时间窗口内完成。你问过你的以太网吗它能保证每个周期都稳定在100μs以内吗普通的100BASE-TX以太网芯片设计目标是人上网、传文件、看视频它追求的是“平均带宽”和“吞吐量”从来没有人跟它说过“你这一帧必须在1ms内到晚0.1ms就要出事故”。所以从MAC层到PHY层处处都留了“不确定”的后门CSMA/CD的随机退避、缓冲区排队、时钟漂移补偿、自动协商中断……这些在办公网络里都是小事在闭环控制里就是致命的抖动源。我这几年一直在做改进100BASE-TX以太网芯片的工作核心就一个目标——把“尽力而为”的以太网改造成“说到就到”的确定性网络。这篇文章是V1版本的完整复盘不讲虚的只讲思路、讲实测、讲坑希望能给正在做工业以太网和运动控制的朋友一些参考。要理解改进方案你得先接受一个前提在闭环控制系统里确定性的价值排序永远是延迟最坏值 延迟抖动 平均延迟 带宽。平均延迟再低只要最坏情况不可控你的PID增益就得往保守里调最终牺牲的永远是动态响应和加工精度。2. 先拆掉三座“不确定”的大山2.1 第一座山CSMA/CD——天生靠“碰运气”的介质访问机制100BASE-TX是从10BASE-T演进过来的MAC层仍然保留着CSMA/CD载波侦听多路访问/冲突检测的机制。表面上看交换式网络下全双工模式已经杜绝了冲突但你要知道CSMA/CD给协议栈带来的“退避思维”并没有完全消失。真正的隐患在于半双工模式和兼容模式。很多工业现场的旧设备、旧交换机还跑在半双工状态一旦两个节点同时发帧就要执行截断二进制指数退避算法退避时间随机选0到2^k-1个时隙。k是重传次数最大能到10算下来最坏退避时间是海量的这种随机性对于闭环控制来说就是灾难。更隐蔽的是即使全双工链路没有冲突检测MAC层在发送前仍然要等IFG帧间隙标准规定是96bit时间。这个还好固定开销。但很多芯片为了解决时钟漂移会在IFG后面额外插入“补偿字节”插多少完全看当时的容差计算抖动就出来了。改进思路很简单粗暴绕开CSMA/CD的随机退避。工业场景下拓扑和控制周期都是规划好的根本不需要“碰运气”的竞争机制。具体做法是在MAC层加入一个静态时隙分配表每个节点只在属于自己的时间窗口内发帧窗口外的帧一律缓存等待。这相当于把以太网变成了“虚拟令牌环”最坏情况延迟变成可算的固定值。当然前提是你得有控制权改芯片。如果只是用现成的PHY芯片那就要靠外围逻辑把退避禁掉强制全双工模式并关闭自动协商的降级路径这一步虽然治标不治本但能去掉一大块随机抖动。2.2 第二座山时钟漂移与FIFO——看不见的“呼吸效应”工业现场的PHY芯片和MAC控制器各自有独立的25MHz参考时钟标称精度通常是±50ppm百兆级差一点的甚至到±100ppm。两个节点的时钟不可能绝对一致收发双方的FIFO就会像呼吸一样反复“胀肚子”和“干瘪”。处理这个问题最常见的手段是插入空闲码IDLE symbol或者调整IFG长度。问题是这种调整是连续性的不是跳变式的。接收端为了适配发送端的速率FIFO的读写指针差值会在一定范围内缓慢游走极端情况下当FIFO靠近上溢或下溢阈值时芯片会触发一次“流量控制”要么丢帧要么插填充符。对普通上网来说这毫秒级的中断根本感知不到但在1ms控制周期里一次流量控制就能让你丢好几帧数据PID直接失控打折。我的改进思路是双FIFO冗余预算式刷新。主FIFO负责正常收发监控FIFO专门负责跟踪深度变化趋势。当深度偏差超过设定阈值比如±25%不是等到临界才纠偏而是提前在空闲帧时隙插入或删除固定数量的IDLE码块一次性把相位拉回来。这样做的代价是每次纠偏会引入一个微小抖动但抖动幅度可控并且只会发生在空闲帧时隙不会打断实时数据流。实际测试下来改进后FIFO深度偏差能稳定在±2字节以内几乎观察不到呼吸效应带来的周期抖动。2.3 第三座山MDIO管理接口与PHY状态机的“黑匣子”别小看MDIO——这是MAC和PHY之间的管理通道负责配置寄存器、读状态。很多工程师在设计系统时根本不管MDIO留给驱动随机初始化。但在工业确定性改造中MDIO的访问时延和PHY状态机切换时间恰恰是“隐性杀手”。举两个真实案例。第一个案例某客户在低温环境-40℃下设备启动PHY反复掉线原因是PHY的自动协商状态机因为信号质量不达标不停回退到“重新协商”状态。每次协商要花1到2秒系统控制链路整个断开。第二个案例PHY芯片默认开启了省电模式Energy Efficient EthernetEEE低流量时自动进入休眠唤醒需要几十微秒到几百微秒唤醒期间第一帧数据直接无视控制周期瞬间断拍。改进V1版本做的事情很务实关掉EEE禁止自动降级冻结PDL/PMD状态机。具体做法包括上电初始化时通过MDIO写入强制寄存器锁定为100BASE-TX全双工模式禁止自动协商的降级回退路径同时关闭EEE的LPI低功耗空闲模式确保链路空闲时PHY仍然保持完全活跃状态。这一条几乎零成本但效果立竿见影——链路层的不确定性直接砍掉一大半。3. 改进思路与整体设计——芯片级、板级、协议级的“三管齐下”3.1 设计出发点从“尽力而为”到“预算制”改进以太网芯片的确定性第一件事不是改电路而是改“思维”。普通以太网的设计哲学是“尽力而为”每个模块尽力控制延迟但没人给延迟设硬指标。改进后的设计哲学是“预算制”从应用层到底层每一层能占用的延迟预算必须明确写死超出预算就视为故障。具体到100BASE-TX链路我给的预算分配表是这样层级延迟预算说明应用层采样-打包≤ 50μs传感器数据采集、封包协议栈处理≤ 30μs去掉TCP只用UDP轻量头部MAC层排队与发送≤ 20μs静态优先级队列无竞争PHY层串行化与传输≤ 10μs100BASE-TX线速约0.01μs/bit一帧128字节约需10.24μs接收端中断上报≤ 30μs硬件时间戳减少CPU等待总预算≤ 140μs单跳单向延迟上限注意这个预算针对的是“最坏情况”不是平均值。只要每个模块最坏情况都不超预算整个链路的最坏延迟就是可控的、可证明的。另外要强调一点预算制并不是“平均下来不超就行”。PID控制对延迟抖动的敏感度极高如果你告诉它“平均延迟是100μs但偶尔跳到500μs”它只能按500μs来算鲁棒性这样一来你的伺服增益就上不去。所以预算制必须卡住上限而不是平均。3.2 芯片级改进128字节短帧优先路径控制类报文有个明显特征帧很短。一个典型的伺服周期报文以太网头部IP头部UDP头部数据区总共也就100到150字节。而标准以太网MTU是1500字节对短帧的支持就有些“敷衍”——很多PHY芯片的处理流水线是按“大帧吞吐”来优化的对短帧不会特别照顾。V1版本在PHY芯片内部专门加了一条“短帧优先路径”。当接收端检测到帧长小于256字节时不进入标准的多级FIFO队列而是直接走一条深度更浅的旁路FIFO减少排队级数和缓冲延迟。这条旁路FIFO深度只有8帧配合简化的校验逻辑只做CRC32校验不做AES解密等重活单帧MAC处理延迟能从标准路径的28μs压缩到9μs左右。代价是这条路径不支持超长帧和多队列QoS但对闭环控制来说根本不是问题——你本来就不该在实时通道里传大数据包。如果确实需要在同一根线上传固件升级包可以走标准路径网络侧用VLAN优先级分开。3.3 协议级改进硬件时间戳与PTP精确时间协议引擎闭环控制的多轴同步本质上需要的是“时间对齐”靠软件校时远远不够。V1版本在MAC层靠近PHY的位置嵌入了硬件时间戳引擎支持IEEE 1588 PTP的V2协议。这里的核心是“时间戳插入点”的选择。很多方案是把时间戳放在MAC和PHY之间的MII接口上打点插入点在MAC侧会引入PHY的串行化延迟和编解码延迟如果放在PHY的PMA子层和PMD子层之间最接近线路时间戳最准但对芯片内部布线要求高。V1版本的做法是放在PCS子层出口既能保证时间戳足够靠近线路又不会给物理编码子层增加太大负担。实测同步精度从纯软件NTP的几百微秒降到硬件时间戳的±100ns级别完全满足多轴同步控制的要求。3.4 板级改进时钟源与电源的“净空”这是最容易忽略的环节。芯片内部改进做得再好外部参考时钟不稳、电源纹波大确定性就是空中楼阁。时钟方面V1版本把晶振从普通的±50ppm无源晶振换成温补晶振TCXO温漂控制在±2ppm以内。别小看这几十ppm的变化100BASE-TX的125MHz参考时钟差1ppm就意味着每帧数据的时间基准每秒漂移125个bit在长时间运行的设备上日积月累的相位漂移会让FIFO纠偏频繁触发。电源方面PHY芯片的数字电源和模拟电源必须分开模拟电源用独立的LDO供电并在靠近电源引脚处放10μF钽电容0.1μF陶瓷电容组合去耦。实测下来电源纹波从50mV降到15mV后时钟恢复电路CDR的抖动明显改善眼图余量大了近2dB。3.5 为什么V1不直接上EtherCAT/Profinet RT写到这里肯定有人问既然这么折腾干嘛不直接用EtherCAT或者Profinet IRT答案是成本、兼容性和现场存量。很多产线已经有大量基于标准100BASE-TX以太网的设备在运行换总线意味着换主站、换从站、换培训、换备件。对于中小企业来说这个成本可能高达几十万甚至上百万。而改进芯片的方案允许你在保留标准以太网报文格式的基础上通过芯片内部调度和PHY增强来卡住确定性存量设备能继续用新增设备直接升级。V1版本的目标不是推翻标准而是在现有标准框架内把“灰色地带”变成“可控地带”。换句话说就是在不改变以太网报文格式的前提下通过芯片内部调度和PHY增强来“卡住”确定性让协议栈上层以为你用的还是普通以太网。4. 核心环节实现——从算法到实测的完整记录4.1 确定性调度器的FPGA原型实现说干就干。V1版本的确定性调度器我先用FPGA搭了原型验证逻辑可行性再流片。FPGA选择的是Xilinx Artix-7系列因为它的MGT高速收发器对百兆以太网的MAC/PHY有现成的支持方便做100BASE-TX链路的端到端验证。调度器核心代码如下Verilog// 确定性时隙调度器 module dtime_scheduler ( input wire clk_125m, // 125MHz PHY时钟 input wire rst_n, input wire [7:0] slot_sel, // 当前时隙编号 input wire tx_req, // 上层发帧请求 output reg tx_grant, // 发送授权 input wire [15:0] period_cnt ); // 时隙划分1ms周期划分为128个时隙每个时隙7.8125μs parameter SLOT_WIDTH 8d128; reg [15:0] cycle_cnt; always (posedge clk_125m or negedge rst_n) begin if (!rst_n) cycle_cnt 16d0; else if (cycle_cnt period_cnt - 1) cycle_cnt 16d0; else cycle_cnt cycle_cnt 16d1; end // 时隙授权每个节点只在指定的时隙窗口内获得发送权 always (posedge clk_125m or negedge rst_n) begin if (!rst_n) tx_grant 1b0; else if (tx_req (cycle_cnt slot_sel * SLOT_WIDTH)) tx_grant 1b1; else tx_grant 1b0; end endmodule这段代码的思路很直白把每个控制周期比如1ms划分成固定数量的时隙每个节点最多只能在自己的时隙窗口内发送一帧。窗口大小按“该节点周期内最大帧长线路传播时延PHY处理时延”来预留确保绝不溢出到下一个时隙。要注意的是这个调度器并不是“时分复用”总线而是“一个控制周期一个窗口”的精准门控。窗口之间的空隙用来传非实时数据这样不会浪费带宽。4.2 PHY寄存器配置清单——手把手教你“锁死”并发下面给一份V1版本在实际项目中验证过的PHY寄存器配置清单芯片型号以Marvell 88E1512为例市面上很多工业核心板用的都是这颗寄存器地址是标准IEEE 802.3定义的MDIO地址。// 强制设速率为100BASE-TX全双工 phy_write(0x00, 0x2100); // BMCR: 设speed100Mbpsduplexfull // 禁止自动协商 phy_write(0x00, 0x0100); // BMCR: 关闭AN强制模式 // 关闭EEE省电模式如果芯片支持 phy_write(0x1E, 0x00BC); // 扩展寄存器页选择 phy_write(0x1E, 0xAA00); // 关闭EEE LPI // 关闭CLK125输出减少EMI干扰 phy_write(0x0A, 0x0200); // 关闭多余的125MHz时钟输出 // 配置中断掩码仅允许链路状态变化中断 phy_write(0x19, 0x0001); // 只允许link up/down触发中断这些寄存器的效果总结如下寄存器配置值作用BMCR (0x00)0x2100强制100M全双工关自动协商扩展页选择 (0x1E)0x00BC → 0xAA00关闭EEE LPICLK125控制 (0x0A)0x0200禁用多余时钟输出减少干扰中断掩码 (0x19)0x0001限制中断触发源减少CPU打扰这个配置的意思很明确让PHY彻底变成一个“哑设备”不协商、不省电、不自作主张调速只要链路是通的就老老实实以最稳定的状态转发数据。4.3 100BASE-TX物理层信号参数速查做物理层改进时有几项参数需要反复核对我整理了一份速查表方便查阅参数标准值说明数据率100Mbps实际链路速率为125Mbps4B/5B编码后编码方式4B/5B MLT-34位数据映射为5位码组再用MLT-3三电平调制到线路时钟频率25MHzMAC侧MII接口时钟PHY内部PLL倍增为125MHz线缆类型Cat5 UTP以上阻抗100Ω最大段长100m最大帧长1518字节不含前导码4字节CRC32前导码8字节单帧最小时间672ns不加IFG时最短有效帧的最小传输时间很多人忽略了一个细节100BASE-TX的链路层速率是125Mbps而不是100Mbps。因为4B/5B编码多出了25%的带宽开销。这也就意味着一帧100字节的数据实际在链路上占用的时间 前导码8字节帧12字节数据100字节CRC4字节×8位÷125Mbps 7.94μs。在做延迟预算时必须按125Mbps计算别按100Mbps算否则会有20%的误差。4.4 实测数据改进前后的对比我搭了一套测试环境用一台控制器通过改进后的以太网链路和一台伺服驱动器连接PID周期设定为1ms连续记录5000个控制周期的同步误差数据。测试结果如下指标改进前普通PHY改进后V1优化比例平均延迟86μs52μs39.5%最大延迟215μs73μs66%延迟抖动标准差28μs6.5μs76.8%丢帧率0.08%0%—延迟标准差从28μs降到6.5μs这个数据对控制工程师来说是“天壤之别”。在同样的PID参数下改进后的电机转速波动从±5rpm降到了±1.5rpm动态跟随误差缩小了近70%。还有一个意外收获由于控制周期同步精度大幅提高原来为了“保险”而加的减速比安全系数可以适当回调设备需要输出的扭矩更精准了能耗也跟着降了2%左右。4.5 关键参数的计算方法做确定性改造时有几个参数建议自己手算一遍不要全靠厂商规格书。以最坏情况延迟为例完整计算公式是单跳单向延迟 发送端MAC排队延迟 发送端MAC发送延迟 PHY串行化延迟 线路传播延迟 接收端PHY接收延迟 接收端MAC上报延迟最坏情况下的估算MAC排队延迟静态时隙调度下 一个完整的时隙窗口 128μs这是改进的核心收益普通以太网这里最坏可能到几十毫秒发送延迟8前导1起始1以太网头部8UDP34数据4CRC字节 ×8位÷125Mbps ≈ 52字节×8÷125Mbps ≈ 3.3μsPHY串行化延迟约1μs线路传播100m线缆约0.5μs铜缆信号传播速率约2×10^8m/s接收端PHY处理约3μsMAC上报中断约5μs合计约17.8μs。加上排队窗口128μs排队等待一个完整控制周期内的时隙整体最坏单向延迟约145.8μs比实测73μs偏乐观因为实际排队等待可能产生半周期相位差但仍在设计的140μs预算附近符合预期。这里提醒一句不同PHY芯片的内部延迟差异可能达到几微秒到十几微秒设计预算时务必给足裕量不要卡死。5. 常见问题与调试实录——我踩过的坑都写在下面5.1 “明明配置了强制100M全双工为什么还会自动协商”这是跟MDIO配置有关的经典问题。很多PHY芯片在硬件复位后状态机会被外部电阻上下拉强行拉回“自动协商”模式寄存器里写的值一复位就失效。排查方法很简单示波器抓复位引脚的时序确认复位释放时间是否满足芯片spec要求检查RESET引脚上是否有电容迟滞电路导致复位时间过长。另外有些PHY的配置引脚如CONFIG[3:0]在复位时要被正确的电平锁定否则寄存器写入值在链路建立后被硬件状态机覆盖。实操心得强制工作模式的配置不要在上电后才写寄存器要用芯片的硬件配置引脚直接拉死。在硬件设计阶段就确定好PHY工作在强迫100BASE-TX全双工模式软件上只需要在初始化时做一次确认剩下的事全部交给硬件。5.2 “链路稳定的情况下为什么会有间歇性延迟尖峰”这个问题我查了很久最后定位到是交换机或PHY的流量拥塞触发机制在作怪。当PHY的内部FIFO深度超过一定阈值芯片会发出“自适应帧间隙缩短”指令或者开启“流量控制暂停帧”机制。暂停帧一发所有后续帧都要排队等延迟瞬间飙上去。确认方法在MAC侧统计暂停帧数量。如果发现暂停帧频繁出现说明FIFO缓冲深度或者对端流量策略需要调整。解决办法是双管齐下在接收端禁用流控关闭PAUSE帧响应在应用层限制控制周期内的突发数据量确保每个时隙的流量不超过链路带宽的80%我项目的最终做法是把控制数据流和非实时数据流用VLAN标签分开实时通道走优先级最高队列非实时流量最多只能占用30%带宽从根上杜绝突发拥塞。5.3 “更换批次晶振后同步精度突然变差”这是V1改进后遇到的一个“返厂级”问题。第一批样机用TCXO温补晶振同步精度±100ns。换了个批次的晶振同步精度直接掉到±2μs差了一个数量级。查了半天才发现新批次晶振的“启动稳定时间”和“频率牵引范围”参数不达标。TCXO虽然温漂小但某些批次的内部模拟补偿电路响应较慢在上电后几分钟内输出频率会有一个缓慢的偏移过程。恰好PTP引擎在这个时间段内收敛最终锁住了一个偏掉的参考点。解决方案软件上在PTP初始化后增加“晶振预热等待”机制上电后先等时钟输出稳定实测约30秒再启动PTP同步流程。同时在物料清单里增加“TCXO牵引范围≥±8ppm”的硬性要求彻底杜绝批次差异性。5.4 “FPGA调试时短帧优先路径为什么总是报CRC错误”这个问题比较隐蔽也很典型。短帧优先路径简化了校验逻辑但FPGA原型里把这部分逻辑放在了PCS编码之后结果FCSCRC32校验范围错误把前导码也算进校验里了自然全报错。标准以太网FCS的校验范围是从目的MAC地址开始到数据字段结束不包含前导码和帧起始符。但短帧路径为了省逻辑资源直接复用了PCS层的位流裁剪逻辑导致了范围偏移。修正方案重新设计校验逻辑明确FCS计算起点为“目的MAC字节的起始位置”并且在仿真阶段加了一组覆盖全边界条件的随机测试向量包括帧长最小64字节、最大1518字节、CRC原子字段边界彻底锁死这个bug。5.5 常见问题速查表问题现象可能原因排查思路解决方案延迟周期性尖峰FIFO触发PAUSE帧流控统计MAC层暂停帧数量禁用流控限制突发流量丢帧率突然升高短帧旁路路径CRC范围错误对比标准路径与旁路路径的校验结果重新设计FCS校验逻辑同步精度漂移晶振批次参数不一致测量温漂曲线、牵引范围增加预热等待物料限定参数链路自动降级外部信号质量差触发重新协商检查线缆衰减、连接器端子氧化禁止ECU降级路径强制速度模式上电掉线PHY复位时序不满足示波器抓复位时序调整复位延时电容配置引脚锁死控制周期偶发长延迟交换机存储转发队列拥塞抓包分析交换机排队时间优化拓扑走实时VLAN专用路径6. 工具链与验证方法——怎么证明“确定性”真的达标6.1 延迟测试方法测确定性不能光靠软件ping要用硬件打时间戳的办法用FPGA同时产生两个脉冲信号一个注入控制器的输入引脚另一个注入执行器的反馈引脚以太网链路中传输带时戳的帧数据用示波器双通道对比输入/反馈脉冲与发送/接收时刻戳的时间差具体测试方法是这样的 发送端在输出控制指令的同一时刻通过GPIO拉高一个同步信号接收端在收到指令帧的同一时刻也通过GPIO拉高一个同步信号。用示波器同时测量这两个GPIO的上升沿时间差就能测出端到端的实际延迟和抖动。6.2 时钟同步精度测试PTP同步的精度验证建议用“主时钟-从时钟”对拍法主时钟和从时钟各自输出一个1PPS每秒一个脉冲信号用高精度示波器至少100MHz带宽测量两路PPS信号的上升沿偏差连续测量24小时记录最大偏差和标准差这才是“日稳定性”的真实数据V1的实测结果是24小时内最大偏差280ns标准差52ns满足绝大多数工业闭环控制的同步要求。6.3 长期稳定性测试出厂验证阶段至少做72小时连续满负荷跑机控制周期按最高配置比如500μs运行帧载荷按链路带宽的85%持续填充记录所有延迟超过阈值的帧并关联打印当时的FIFO深度和链路状态只有这种“加压测试”才能暴露间歇性问题。我在V1中发现的一个隐性bug就是靠72小时跑机逼出来的——某个边界条件下PHY的自动降级状态机被一个特殊的线路信号干扰触发随后链路重新协商了约800ms整个控制循环断拍。修复方式就是前面说的彻底禁止降级路径。7. 现有方案对比与V1的选型依据给还不太熟悉工业以太网方案的朋友做个横向对比。现在市面上主流的工业实时以太网/确定性网络方案可以分为几个流派方案确定性机制最坏延迟兼容标准以太网改造成本适合场景标准100BASE-TX改进V1时隙调度PHY增强约73μs完全兼容低只需换芯片存量系统升级EtherCAT集束帧分布时钟亚微秒级不兼容独立总线高需换总线控制器新建设备PROFINET IRT硬件时隙调度微秒级部分兼容中高西门子生态TSN802.1Qbv等时间感知门控队列数十微秒级逐渐兼容中未来主流V1选择“标准以太网增强”路线不是为了和EtherCAT比延迟它的核心优势在于兼容性和改造门槛。你的PLC、传感器、交换机只要支持标准100BASE-TX就可以通过替换PHY芯片/模块收听V1的确定性改进收益不需要跟换总线协议和主控算法。如果你正面临“既有产线怎么提升同步精度”的问题这个方案是投入产出比最高的一条路。同时V1也为将来升级到TSN做了铺垫——时隙调度器的时间感知门控逻辑跟IEEE 802.1Qbv的框架是相通的。换句话说你提前把“确定性调度”的思维和验证方法论跑通了后续迁移到TSN是平滑演进。8. V1版本的局限性与后续演进方向V1版本解决了单跳链路的确定性但还没有做到整个网络的多跳确定性。如果现场拓扑里存在多级交换机每跳的排队延迟和PHY处理延迟会累加50跳就是50倍延迟这个量级在强实时控制中就容易超标了。V2版本的规划方向引入全网时间同步所有交换节点都支持PTP透明时钟逐跳在线路处修正驻留时间多跳延迟从累加变成“可修正”引入门控队列调度参考TSN Qbv方案每个交换机端口配置多个时间感知队列控制帧只在规定的时间窗口内转发非实时数据只能填剩余窗口这样多跳场景下延迟上界仍然可算引入故障自恢复机制链路断了之后自动切换到冗余链路并且切换时间的上限要明确写死不能像STP那样随缘收敛还有一个细节方向是功耗与散热的平衡。V1为了确定性强制PHY全速运行、关闭省电模式功耗会比普通模式高20%左右。如果做成工业级产品需要考虑散热设计和MTBF的评估。我个人在实际调试中的一个体会是确定性改造这件事情本质上不是“把延迟做小”而是“把延迟做稳”。平均延迟从86μs降到52μs意义远不如最大延迟从215μs降到73μs来得大——因为后者代表的是“最坏情况可控”这才是工业控制能安心用你的芯片的根本原因。最后再分享一个维度的权衡做这类项目时间和精力的分配建议是“改电路40%写驱动和调度算法40%测试和数据分析20%”。很多团队容易陷入“调PHY寄存器”的泥潭把大量时间花在配置和排错上而忽略了做不完备的测试就没办法证明确定性达标。没有测量就没有确定性这句话在工业以太网领域永远适用。