EtherCAT帧结构详解:帧头、数据报、CRC校验、帧尾的组成与功能

核心原理:EtherCAT帧在以太网报文中的“内嵌”方式

EtherCAT协议并不重新定义物理层,而是直接利用标准IEEE 802.3以太网帧,在以太网帧的数据字段(Payload)中“内嵌”一个或多个EtherCAT数据报。从OSI模型看,EtherCAT位于以太网数据链路层之上,但它的帧结构设计使其能够实现“边传输边处理”的实时机制。理解EtherCAT帧结构,首先需要明确:整个EtherCAT报文(包含帧头、数据报、CRC)都位于标准以太网帧的Payload区域,而以太网帧头(目的MAC、源MAC、EtherType)和帧尾FCS仍然保留。

关键认知:EtherCAT帧的“帧头”与“帧尾”是相对于EtherCAT报文自身而言的,并非以太网帧的帧头/帧尾。一个完整的以太网帧中,EtherType字段固定为0x88A4,用于标识上层承载的是EtherCAT协议。

EtherCAT帧在标准以太网帧中的封装结构 标准以太网帧(IEEE 802.3) 以太网帧头 目的MAC (6B) 源MAC (6B) EtherType 0x88A4 (2B) EtherCAT报文(内嵌于以太网Payload) EtherCAT 帧头 长度 (11bit) 保留 (1bit) 类型 (4bit) = 0x1 后续数据报 标志 (1bit) 数据报 1 数据报头 (10B) 命令+索引+地址 数据区 (0~1486B) 工作计数器 WKC (2B) 填充位 (可选) 数据报 2 数据报头 (10B) 命令+索引+地址 数据区 (0~1486B) WKC (2B) 填充位 (可选) 帧尾 FCS (4B) CRC-32 由以太网 控制器计算 覆盖整个 以太网帧 一个以太网帧可承载多个EtherCAT数据报,通过帧头中的“后续数据报标志”串联 每个数据报独立寻址、独立返回WKC,从站按顺序处理并转发 帧尾FCS由以太网MAC硬件生成,EtherCAT协议本身不额外增加CRC

EtherCAT帧头:长度、类型与后续标志

EtherCAT帧头共2字节(16位),紧跟在以太网帧的EtherType字段之后。其结构如下:

  • 长度(Length,11位):表示紧随其后的所有EtherCAT数据报的总字节数(不包含帧头本身)。该长度值决定了从站需要处理的数据量。
  • 保留位(1位):协议规定必须为0,接收方忽略此位。
  • 类型(Type,4位):固定为0x1,表示这是一个EtherCAT数据报类型。若未来协议扩展,此字段可用于区分不同报文类型。

帧头中没有单独的“帧尾”字段——EtherCAT报文的结束由长度字段隐式确定。当从站解析完长度字段指定的字节数后,即认为EtherCAT报文结束,后续字节属于以太网帧的填充或FCS区域。

EtherCAT数据报:命令、寻址与工作计数器

每个EtherCAT数据报是真正承载读写指令和数据的最小单元。一个数据报由三部分组成:数据报头(10字节)、数据区(0~1486字节)、工作计数器WKC(2字节)。数据报头结构如下表:

字段 位宽 说明
命令 (Cmd) 8 bit 定义操作类型:NOP(0x00)、APRD(0x01)、APWR(0x02)、APRW(0x03)、FPRD(0x04)、FPWR(0x05)、FPRW(0x06)、BRD(0x07)、BWR(0x08)、LRD(0x09)、LWR(0x0A)等
索引 (Idx) 8 bit 由主站生成,用于匹配请求与响应,可检测数据报丢失或重复
地址 (Address) 32 bit 从站地址或逻辑地址,具体含义取决于命令类型(如APRD使用从站配置地址,LRD使用逻辑地址)
长度 (Len) 11 bit 数据区有效字节数(0~1486),不含WKC
保留 (R) 3 bit 必须为0
中断 (C) 1 bit 电路相关标志,通常为0
下一个 (M) 1 bit 后续数据报标志:1表示后面还有数据报,0表示这是最后一个
IRQ 16 bit 中断请求寄存器,由从站置位通知主站异常事件

工作计数器(WKC)是EtherCAT实现分布式控制的关键机制。每个从站处理完数据报后,会根据命令类型和操作结果对WKC进行递增:读命令成功则WKC+1,写命令成功则WKC+1,读写命令成功则WKC+2。主站通过比较返回的WKC与预期值,即可判断哪些从站成功执行了操作,无需逐站查询。

CRC校验与帧尾:硬件级保障

EtherCAT协议本身不额外添加CRC字段,而是直接依赖以太网帧尾的FCS(Frame Check Sequence,4字节CRC-32)。该FCS由以太网MAC控制器硬件自动计算,覆盖从目的MAC地址到Payload末尾的所有字节。任何一位翻转都会导致CRC校验失败,从而被网卡丢弃。

重要区分:EtherCAT数据报中的“填充位”不是CRC,而是为了满足以太网最小帧长(64字节)要求而插入的0字节。从站通过帧头长度字段即可跳过填充位,不会将其误认为有效数据。

由于CRC校验在硬件层完成,从站收到帧时无需软件参与校验,这大大降低了处理延迟。若发生CRC错误,从站直接丢弃该帧且不转发,主站通过超时机制发现通信故障。

案例场景:一个典型的周期读写过程

假设主站需要读取从站1的输入状态(4字节),并写入从站2的输出数据(4字节)。主站构造一个以太网帧,内含两个数据报:

以太网帧头: 目的MAC=广播/多播, 源MAC=主站MAC, EtherType=0x88A4
EtherCAT帧头: 长度=44, 类型=0x1
  数据报1: Cmd=0x04(FPRD), Idx=0x01, 地址=从站1配置地址, Len=4, M=1
           数据区=空, WKC=0(待从站填充)
  数据报2: Cmd=0x05(FPWR), Idx=0x02, 地址=从站2配置地址, Len=4, M=0
           数据区=待写入的4字节输出, WKC=0(待从站填充)
以太网帧尾: FCS(由硬件自动计算)

帧经过从站1时,从站1识别数据报1的地址匹配,读取自身4字节输入写入数据区,并将WKC置为1;随后将整个帧转发给从站2。从站2处理数据报2,将数据区4字节写入输出寄存器,WKC置为1。帧返回主站后,主站检查两个数据报的WKC均为1,确认操作成功。

误区与复盘:常见理解偏差

误区1:认为EtherCAT帧头包含“帧尾”字段。实际上EtherCAT没有独立的帧尾标记,报文结束由长度字段决定。

误区2:混淆以太网帧的FCS与EtherCAT的CRC。EtherCAT不增加额外CRC,完全依赖以太网硬件CRC-32。

误区3:忽略“M”标志的作用。当一帧包含多个数据报时,M位用于指示数据报边界;若M位错误,从站将无法正确解析后续数据报。

误区4:将WKC理解为校验和。WKC是操作成功计数器,不是数据完整性校验值;数据完整性由FCS保证。

复盘建议:在调试EtherCAT通信时,使用Wireshark抓包并启用EtherCAT解析器,重点观察帧头长度字段与实际数据报总长度是否一致、每个数据报的WKC是否符合预期、M位是否正确串联。若出现CRC错误计数持续增长,应检查线缆质量、接地和电磁干扰,而非协议配置。