什么是EtherCAT
EtherCAT(Ethernet for Control Automation Technology)是由德国倍福(Beckhoff)公司在2003年提出的一种基于以太网的实时工业网络通讯协议。它的核心目标是解决传统以太网在工业控制、多轴运动控制等领域中存在的非确定性和高延迟问题。
在物理层,EtherCAT 完全兼容标准的 IEEE 802.3 以太网(通常是 100BASE-TX),使用标准的网线和 RJ45 接口。但它在数据链路层彻底颠覆了传统的以太网通讯机制。
传统网络和EtherCAT最本质的区别是:传统网络依赖 CPU 软件“先存储再解析”,而 EtherCAT 利用纯硬件逻辑,在数据帧不减速穿过芯片的瞬间直接实现“边走边读写”。
参考链接
https://www.ethercat.org/en/technology.html

核心机制:飞速传输(Processing on the fly)
这是 EtherCAT 最具标志性的技术,也是它能实现极低延迟(微秒级周期)的根本原因。
- 传统以太网的方式: 每个节点收到完整的数据帧后,将其缓存,交给微控制器(MCU)解析软件协议栈,提取属于自己的数据,处理完毕后再组装新的数据帧发送出去。这种“存储-转发”机制会导致巨大的累积延迟。
- EtherCAT 的方式: 数据帧在网络中穿行时,从站节点不会接收并缓存整个数据帧。当数据帧经过从站的专用硬件控制器(ESC)时,硬件会在报文通过的纳秒级时间内,动态地读取属于自己的指令,或将自己的状态数据“插入”到经过的报文中。
关键技术特性
1. 协议数据结构与 FMMU
EtherCAT 数据直接封装在标准以太网帧内,使用专用的以太网类型(EtherType 0x88A4),无需 IP 或 UDP 层(从而减少了协议栈开销)。
一个以太网帧内可以包含多个 EtherCAT Datagram(数据报文)。为了高效寻址,EtherCAT 引入了 FMMU(现场总线内存管理单元)。主站将所有从站的数据映射到一个巨大的逻辑地址空间中,每个从站的硬件 FMMU 负责将逻辑地址映射到自己的本地物理内存,实现了“一次发送,全网更新”。
2. 分布式时钟(Distributed Clocks, DC)
在多轴伺服控制中,多个电机的动作必须严格同步。网络传输会有纳秒级的物理延迟(线缆长度、节点转发),EtherCAT 通过 DC 机制,测量并补偿每个节点之间的传输延迟。它能将网络中所有从站的本地时钟同步到一个主参考时钟,同步精度可达 1 微秒以内。
3. 极端的拓扑灵活性
虽然逻辑上是总线型结构,但在物理连接上,EtherCAT 支持线型、树型、星型甚至环型(用于线缆冗余)。这是因为每个 EtherCAT 从站通常有两个或多个端口(PHY),内部集成了自动转发机制。如果端口 1 收到数据,它会传给内部 MAC,处理后再从端口 2 发出;如果端口 2 未连接,硬件会自动将链路闭合,把数据直接传回端口 1 发出。
4. 非对称的硬件要求
- 主站(Master): 不需要专用的通讯硬件,任何带有标准以太网 MAC 的设备(如 X86 工控机或 ARM SoC)都可以作为主站。主站的核心在于软件协议栈和操作系统的实时性。
- 从站(Slave): 必须使用专用的 EtherCAT 从站控制器芯片(ESC),或者在 FPGA/CPLD 中实现对应的 IP 核,因为“即时处理”和“分布式时钟”完全依赖纯硬件逻辑来保证确定性,无法通过纯软件实现。
传统网络为什么慢?
在普通的以太网里,数据是“打包”发送的。 当数据包到达接收端时,PHY 把信号转给 MAC 硬件,随后触发一次 CPU 中断。CPU 停下手头的活,运行软件协议栈(一层层剥开 IP 头、UDP 头),最后才把有效数据提取到本地内存。 如果要控制 100 个硬件节点,主控就要发 100 个包,每个节点的 CPU 都要经历一次完整的“中断->进内核->拆解软件协议”的过程。这在需要微秒级响应的场景里,延迟根本无法控制。
EtherCAT 的硬件玩法
EtherCAT 的精髓在于,它把网络通讯的解析过程彻底纯硬件化了。
1. 主控端(比如 RK3588):
主站不需要专用的通讯芯片,用普通的千兆网口 MAC 就能跑。
主控在本地内存里开辟一块连续的 Buffer。比如把 0x00-0x03 地址分配给 1 号节点,0x04-0x07 分配给 2 号节点。数据填好后,主控不走 TCP/IP 那些繁琐的协议,直接把这一大段连续的内存数据塞进一个裸以太网帧里,从网口“射”出去。
2. 从站端(纯硬件状态机,无需软件干预): 这是最核心的差别。从站(比如一个驱动器模块)内部处理网络数据的不是跑着操作系统的 CPU,而是一套纯硬件的逻辑电路(类似于直接用 Verilog 写在 CPLD 或 FPGA 里的状态机)。
当主控发出的那个数据帧来到从站的网口时,这串数据流根本不会停下来被存进 RAM 里等待解析。 数据流以极快的速度从芯片的 RX 进,直接从 TX 出。在这串电平信号流经芯片内部的几十纳秒内,硬件逻辑会做实时比对:
- 它发现“这几个字节的地址映射是我的”,纯硬件逻辑就会在信号流过的瞬间,直接把这几个字节“锁存”到自己的控制寄存器里。
- 如果它需要向主控汇报自己的当前状态,也是在属于它的空位流过时,用硬件电路直接把状态数据覆盖写入这段数据流。
一句话总结
整个以太网帧就像一列绝对不减速的高速列车,穿过总线上所有的节点。每个节点内部的纯硬件逻辑在列车呼啸而过的瞬间,把自己的数据“扔”进指定的车厢,并从指定的车厢“抓”走属于自己的控制指令。
到了最后一个节点,列车掉头原路返回主站。主站只需要发出去一个包,收回来一个包,总线上成百上千个硬件节点的状态就全部在硬件底层完成了更新。这就是它能做到极低延迟的秘密。
主站和从站怎么知道哪部分数据是谁的 —— FMMU(现场总线内存管理单元,Fieldbus Memory Management Unit)
1. 主站的视角:4GB 的虚拟内存空间
主站并不关心物理网络拓扑长什么样,也不关心总线上串了多少个节点。在主站的软件协议栈眼里,整个 EtherCAT 网络就是一个巨大的、连续的 4GB 逻辑地址空间(虚拟内存)。
主站启动时,会扫描总线上的所有设备,然后为它们分配“地址段”。 比如:
- 节点 1 是一台伺服电机,主站分配逻辑地址
0x00010000到0x0001000F给它。 - 节点 2 是一个 IO 模块,主站分配逻辑地址
0x00010010到0x00010013给它。
主站发包时,数据帧(Datagram)的头部会带上一个逻辑地址(比如从 0x00010000 开始)。主站只是简单地往这块连续的“虚拟内存”里写数据,然后把这块内存打包发出去。
2. 从站的视角:物理内存与 FMMU 映射
从站(比如你设计的底层 CPLD/FPGA 模块或专用的 ESC 芯片)内部,有一小块真实的物理 RAM(通常是双端口 RAM,DPRAM),用来存放它自己的控制寄存器和状态数据。
每个从站内部都有一组硬件级别的 FMMU 寄存器。在网络初始化阶段,主站会通过独立的配置报文,把映射关系写入每个从站的 FMMU 中。
此时,节点 1 的 FMMU 就知道了:“只要网络上飘过的逻辑地址是 0x00010000 开始的 16 个字节,那就是给我的。”
3. 运行时的硬件魔法:地址匹配
- 硬件地址比较器: 随着数据帧的每一个字节流过,从站的 FMMU 硬件比较器会实时计算当前字节对应的逻辑地址。
- 命中(Hit): 一旦 FMMU 发现当前流经的字节地址落在了自己被分配的区间(
0x00010000-0x0001000F),硬件选通信号(Chip Select/Write Enable)会瞬间拉高。 - 读写交织:
- 如果是写指令,硬件会直接把数据流上的电平信号锁存到本地 DPRAM 的对应物理地址中(提取主站指令)。
- 如果是读指令,硬件会直接把本地 DPRAM 里的状态数据,覆盖电平输出到当前正在流出的数据流特定位置(插入反馈信息)。
- 未命中(Miss): 如果地址不匹配,FMMU 保持沉默,数据像废气一样直接透传,不做任何截留。
留下评论