我们来详细、系统地解释 EtherCAT FoE(File Access over EtherCAT)功能的原理、开发和配置。
一、原理解释
1. 什么是 FoE?
FoE 是 File Access over EtherCAT 的缩写,顾名思义,它是一种在 EtherCAT 主站和从站之间进行文件传输 的协议。它本质上是一个运行在 EtherCAT 应用层之上的简单协议,其设计思想借鉴了古老的 TFTP(简单文件传输协议),因此实现起来非常轻量。
2. FoE 的核心用途
-
固件更新:这是最主要、最常见的应用。无需拆卸设备或使用专用编程器,通过网络即可对从站设备(如伺服驱动器、IO模块)的固件进行远程、在线升级。
-
参数文件传输:上传或下载设备的配置文件、参数集、校准数据等。
-
数据记录传输:从设备中获取记录的历史数据文件(如故障日志、运行数据)。
-
通用文件存储:在从站设备的非易失性存储器(如 Flash)中存储和读取任何类型的文件。
3. 工作原理
FoE 采用简单的请求-响应模型 ,通信只在主站和单个从站之间进行,是一种点对点的文件传输。
-
传输单元 :FoE 数据被封装在 EtherCAT 邮箱协议 的数据区中。邮箱协议提供了可靠的、有序的、带确认的通信通道。
-
协议核心:
-
操作码:定义操作类型,主要有:
-
OP_READ/OP_WRITE: 读文件(主站从从站下载)或写文件(主站向从站上传)。 -
OP_DATA: 数据传输包。 -
OP_ACK: 确认包。 -
OP_ERROR: 错误响应。
-
-
数据包号:每个数据包都有一个递增的编号,用于确认和排序。
-
文件名 :在读写请求中指定要操作的文件名。从站根据文件名决定操作哪个文件(如
"firmware.bin","config.xml")。
-
-
工作流程(以固件上传/写文件为例):
-
主站发送一个
WRITE_REQUEST包给目标从站,指定文件名(如"boot.hex")。 -
从站检查是否可以创建/写入该文件,然后回复
ACK包。 -
主站将文件数据分块 ,通过一系列
DATA包发送。每个DATA包包含一个数据块(如 512 字节)和一个序列号。 -
从站每收到一个
DATA包,就回复一个ACK包,确认该序列号。 -
主站收到
ACK后,发送下一个DATA包。 -
文件发送完毕后,从站关闭文件。传输完成。
分块大小 : 由从站决定,并在第一个
ACK中告知主站(Packet Size参数)。主站必须遵守。 -
-
错误处理 : 任何一方发生错误(如文件不存在、存储空间不足、校验失败),都会发送
ERROR包,中止传输并报告错误代码。
4. 协议栈位置
+---------------------+
| FoE 协议 | <--- 你的应用层逻辑(文件传输逻辑)
+---------------------+
| 邮箱协议 (CoE) | <--- 封装 FoE 数据,提供可靠通道
+---------------------+
| EtherCAT 数据链路层 | <--- 处理帧和寻址
+---------------------+
| 物理层 (ETH) |
+---------------------+
二、开发与实现
开发分为 主站侧 和 从站侧。
A. 从站设备开发
从站需要在其 EtherCAT 从站控制器(ESC)的固件中实现 FoE 服务。
关键步骤:
-
邮箱协议支持: 确保邮箱通信(特别是 CoE 服务通道)已正确实现。
-
FoE 状态机: 实现一个处理 FoE 操作码(OPCODE)的状态机。
-
文件系统接口: 提供底层文件访问函数。对于嵌入式设备,可能不是完整的文件系统,而是简单的:
-
foe_open(): 根据模式和文件名准备存储区域。 -
foe_read()/foe_write(): 读写数据块。 -
foe_close(): 关闭文件,可能触发固件校验和重启。
-
-
存储管理:
-
通常需要两个或多个固件存储区(
Bootloader+Application A+Application B)以实现安全更新。 -
Bootloader 必须实现 FoE,用于接收新的应用固件文件。
-
文件写入后,需进行完整性校验(如 CRC32)。
-
-
关键考虑:
-
分块大小 : 根据从站 RAM 缓冲区大小设置合理的
Packet Size(通常 512-4096 字节)。 -
超时与重试: 在邮箱级别处理通信超时。
-
安全 : 实现身份验证(通过可选的 FoE 密码 字段)、固件签名验证,防止未授权更新。
-