1. 项目背景与挑战
去年接手了一个工业控制器的升级项目,客户要求将原有的CAN总线架构升级为EtherCAT实时以太网。作为主控平台的Zynq-7000需要实现EtherCAT主站功能,这在当时看来是个不小的挑战。经过半年的摸爬滚打,终于完成了从裸机到Linux系统的完整方案验证。今天就把这段实战经历完整记录下来,希望能帮到同样在Zynq上折腾EtherCAT的朋友们。
选择Zynq作为EtherCAT主站平台有几个现实考量:首先,PS端的双核ARM Cortex-A9能满足实时性要求;其次,PL端的可编程逻辑可以灵活实现EtherCAT从站控制器;最重要的是,客户现有硬件平台就是基于Zynq-7020设计的。但实际开发中遇到的坑比预想的多得多——从驱动适配到实时性调优,每个环节都需要反复验证。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 方案选型与技术路线
2.1 EtherCAT主站方案对比
市场上主流的EtherCAT主站实现有三种路线:
- 商业方案(如TwinCAT3)
- 开源方案(如IgH EtherCAT Master)
- 自主开发协议栈
考虑到成本和技术可控性,我们最终选择了IgH EtherCAT Master。这个开源方案虽然文档较少,但社区活跃度高,且支持Linux和RTOS环境。实测在Xilinx官方Linux内核(4.19版本)上移植相对顺利。
注意:IgH对内核版本有严格要求,建议直接使用官方支持的kernel版本(4.9/4.14/4.19),避免在新版本内核上折腾驱动兼容性问题。
2.2 Zynq平台的特殊配置
Zynq的PS端网口需要特殊配置才能满足EtherCAT的实时性要求:
c复制// 设备树中必须关闭TCP/IP校验和卸载
&gem0 {
local-mac-address = [00 0a 35 00 22 01];
phy-mode = "rgmii-id";
xlnx,ptp-enet-clock = <0x6750918>;
/delete-property/ tx-checksum-offload;
/delete-property/ rx-checksum-offload;
};
实测表明,开启校验和卸载会导致EtherCAT帧处理延迟增
