跳到主要内容

FoE - 文件传输

什么是 FoE?

FoE (File Access over EtherCAT) 是 EtherCAT 的文件传输协议,提供类似 TFTP 的文件上传/下载功能。

FoE 允许主站和从站之间传输文件,最常用于固件升级、配置文件管理和日志文件读取。

协议特点

FoE 是一个简单高效的文件传输协议,专门针对嵌入式设备优化,相比 FTP 更轻量级。

核心功能

功能说明应用场景
文件上传主站 → 从站固件更新、配置文件下发
文件下载从站 → 主站日志读取、配置备份
分段传输大文件分块传输支持任意大小文件
错误恢复传输失败重试提高可靠性
进度监控实时传输进度用户反馈

FoE 工作原理

传输流程

FoE 使用简单的请求-响应模式:

    1. 开始 — 主站 → 从站,发送文件名、操作类型,请求读取或写入
    1. 确认 — 从站 → 主站,ACK 或错误码,从站准备就绪
    1. 数据传输 — 双向,数据包 + 包号,分段传输数据
    1. 确认 — 反向,ACK + 包号,确认每个数据包
    1. 完成 — 双向,最终 ACK,传输结束

数据包结构

每个 FoE 数据包包含:

  • 操作码 — 读/写/数据/确认/错误
  • 包序号 — 用于顺序控制和重传
  • 数据 — 最多几百字节(取决于邮箱大小)
  • 文件名 — 仅在开始包中

分段传输机制

对于大文件(如固件镜像):

  • 自动分割成小数据包
  • 每个包独立确认
  • 支持断点续传(部分实现)
  • 超时自动重传

主要应用场景

固件升级

最常见的 FoE 用途:

  • 在线升级 — 运行时更新固件,可能影响通信
  • 引导加载 — Boot 模式下更新,需要重启从站
  • 双分区更新 — 写入备用分区,无缝切换,更安全

典型流程:

  1. 进入 Boot 模式(可选)
  2. 通过 FoE 上传固件文件
  3. 从站验证固件
  4. 重启应用新固件

配置文件管理

配置上传:

  • 将配置文件下发到从站
  • 更新设备参数
  • 批量设备配置

配置备份:

  • 从从站读取当前配置
  • 保存为文件
  • 用于灾难恢复

日志和诊断

日志下载:

  • 读取设备运行日志
  • 故障历史记录
  • 性能统计数据

诊断数据:

  • 采集波形数据
  • 振动分析数据
  • 温度历史记录

其他文件操作

  • 许可证文件上传
  • 参数模板文件
  • 用户自定义脚本
  • 多媒体文件(显示屏图片等)

FoE 与其他文件传输方式对比

特性FoEFTPTFTPHTTP
复杂度极低
传输可靠性
协议开销极小
嵌入式支持优秀一般优秀良好
EtherCAT 集成原生需要 EoE需要 EoE需要 EoE
安全性基本可加密可加密
适用场景设备固件通用文件简单文件Web 应用

为什么使用 FoE 而不是 FTP?

无需 TCP/IP 协议栈 - FoE 直接在 EtherCAT Mailbox 上工作 ✅ 资源占用小 - 适合小型嵌入式系统 ✅ 集成度高 - 无需配置网络、IP 地址 ✅ 确定性 - 使用 EtherCAT 通信机制 ✅ 简单可靠 - 协议简单,易于实现和调试

FoE 操作类型

读操作 (Read Request)

主站从从站读取文件:

  • 发送读请求 — 指定文件名
  • 接收数据包 — 分段接收文件内容
  • 发送 ACK — 确认每个数据包
  • 完成 — 接收所有数据

写操作 (Write Request)

主站向从站写入文件:

  • 发送写请求 — 指定文件名和大小
  • 发送数据包 — 分段发送文件内容
  • 接收 ACK — 等待从站确认
  • 完成 — 所有数据已写入

错误处理

FoE 定义了多种错误类型:

  • 0x8001 — 文件未找到,读取不存在的文件
  • 0x8002 — 访问被拒绝,权限不足
  • 0x8003 — 磁盘满,存储空间不足
  • 0x8004 — 非法操作,不支持的操作
  • 0x8005 — 未知包ID,包序号错误
  • 0x8006 — 文件已存在,写入已有文件
  • 0x8007 — 无此用户,认证失败

完整示例

方式1:标准更新流程

  1. 准备阶段

    • 检查从站支持 FoE
    • 验证固件文件完整性
    • 备份当前配置
  2. 传输阶段

    • 将从站切换到 Init 或 Boot 状态
    • 通过 FoE 上传固件文件
    • 监控传输进度
  3. 验证阶段

    • 从站验证固件 CRC
    • 检查固件版本和兼容性
    • 确认写入成功
  4. 应用阶段

    • 从站重启
    • 加载新固件
    • 恢复到运行状态

方式2:在线更新

某些高级设备支持在线更新:

  • 写入备用固件分区
  • 无需停止通信
  • 更新完成后切换分区
  • 重启生效

Darra SDK 中的 FoE 支持

Darra SDK 提供完整的 FoE 功能:

核心功能

  • 文件上传 — 支持任意文件上传到从站
  • 文件下载 — 从从站下载文件
  • 进度回调 — 实时监控传输进度
  • 错误处理 — 自动重试和错误恢复
  • 并发传输 — 支持多设备同时传输
  • 固件更新向导 — 简化固件升级流程

主要API(示例性说明)

参考 SDK 详细文档了解具体 API 使用方法。

性能考虑

传输速度

FoE 的传输速度取决于:

  • 邮箱大小 — 更大邮箱=更大数据包(典型 128-1024 字节)
  • 周期时间 — 更快周期=更高吞吐(典型 1-4 ms)
  • 网络负载 — 高负载会降低 FoE 速度
  • 从站处理速度 — 写入 Flash 较慢

典型传输速度

  • 理想条件:100-500 KB/s
  • 实际应用:50-200 KB/s
  • Flash 写入限制:10-50 KB/s

优化建议

  1. 增大邮箱大小 - 在 ESI 中配置更大的邮箱
  2. 使用更快周期 - 缩短循环时间(如果可能)
  3. 减少并发流量 - 更新时暂停非必要通信
  4. 选择合适时机 - 在系统空闲时进行更新

安全注意事项

固件验证

⚠️ 重要:始终验证固件文件:

  • 检查文件完整性(CRC/SHA)
  • 验证固件签名(如支持)
  • 确认设备型号匹配
  • 检查固件版本兼容性

更新失败恢复

如果固件更新失败:

  1. 多数设备有引导加载程序保护
  2. 可以重新尝试更新
  3. 某些设备支持双分区回滚
  4. 最坏情况:需要使用 JTAG/串口恢复

权限控制

某些设备实现了 FoE 访问控制:

  • 只读文件无法写入
  • 需要密码或证书
  • 特定状态下才能更新
  • 防止未授权固件

常见问题

哪些设备支持 FoE?

查看设备 ESI 文件中的 <FoE /> 标签,或查看设备文档。多数现代 EtherCAT 从站都支持 FoE。

FoE 传输会影响实时通信吗?

FoE 使用 Mailbox 通信,优先级低于 PDO。在高负载下可能会降低 FoE 速度,但不会中断实时数据交换。

固件更新失败怎么办?

  1. 检查固件文件是否正确
  2. 确认设备支持该固件版本
  3. 尝试将设备切换到 Boot 模式
  4. 检查网络连接和信号质量
  5. 联系设备厂商技术支持

能否同时更新多个从站?

可以,但建议:

  • 串行更新更安全可靠
  • 并行更新要注意网络带宽
  • 关键设备单独更新

FoE 有文件大小限制吗?

协议本身无限制,但实际限制来自:

  • 从站存储容量
  • 超时设置
  • 主站内存

典型固件文件:几百 KB 到几 MB。

开发建议

实现 FoE 服务器(从站侧)

如果您在开发 EtherCAT 从站:

  1. 实现基本操作

    • 支持读和写请求
    • 正确处理包序号
    • 实现错误响应
  2. 文件系统抽象

    • 定义虚拟文件名
    • 映射到 Flash 分区或配置区域
    • 实现文件读写函数
  3. 固件更新保护

    • 验证固件签名和 CRC
    • 使用引导加载程序保护
    • 实现回滚机制
  4. 测试和验证

    • 测试各种错误场景
    • 验证部分传输和重试
    • 压力测试大文件传输

使用 FoE 客户端(主站侧)

如果您在开发主站应用:

  1. 实现进度反馈

    • 显示传输进度条
    • 估算剩余时间
    • 提供取消功能
  2. 错误处理

    • 实现自动重试机制
    • 友好的错误提示
    • 日志记录所有操作
  3. 批量操作

    • 支持多设备批量更新
    • 并发控制和排队
    • 结果汇总和报告