4. EtherCAT从站开发实战
EtherCAT从站开发的核心,是围绕ESC(EtherCAT Slave Controller)构建一条从物理接口到应用数据的完整通路。RA系列MCU本身并不直接处理EtherCAT帧,而是通过SPI或并行总线与ESC交互,由ESC完成EtherCAT协议链路层处理,RA负责协议栈、对象字典和应用逻辑。理解这条分工边界,是后续所有配置与调试工作的前提。
ESC选型与硬件要求
常见ESC器件包括LAN9252、ET1100、ET1200等。LAN9252是Microchip的2端口EtherCAT从站控制器,集成双PHY,支持SPI和并行主机接口,适合中小型从站;ET1100是Beckhoff经典ESC,提供32位并行接口和多种配置模式,适合高实时性、大数据量从站。选型时需关注三点:主机接口类型是否与RA的可用外设匹配、过程数据RAM容量是否满足PDO映射需求、是否内置PHY及端口数量。
硬件设计上,ESC需要25MHz晶振或时钟输入,EtherCAT端口采用标准RJ45或MII接口。若使用LAN9252的SPI模式,需将SPI_CS、SCK、MISO、MOSI以及中断引脚IRQ、复位RESET正确连接至RA的SPI外设和GPIO。电源部分需注意ESC内核电压与IO电压分离,通常内核1.2V或1.8V、IO 3.3V,去耦电容应靠近引脚布置。EEPROM用于存储ESI信息,上电时ESC自动读取,因此I2C/SPI EEPROM的地址和容量必须与ESC配置一致。
RA与ESC的SPI/并行接口
以LAN9252 SPI模式为例,RA通过SPI访问ESC内部寄存器空间。LAN9252的SPI协议并非标准单次读写,而是采用命令+地址+数据的帧结构,支持单字节、双字节和四字节访问。典型操作流程为:拉低CS,发送命令字节(含读写方向与地址高位),发送地址字节,随后连续读写数据,最后拉高CS。RA端可使用SCI Simple SPI或SPI外设,建议时钟不超过25MHz,并启用DMA减少CPU占用。
中断处理是实时性的关键。ESC在收到过程数据帧或邮箱事件后,通过IRQ引脚通知RA。RA应在中断服务程序中读取ESC中断状态寄存器,判断是PDO更新、邮箱事件还是同步信号,再分派处理。若使用分布式时钟,还需处理SYNC0/SYNC1信号,通常由ESC的同步单元产生,RA据此触发应用任务。
并行接口模式(如ET1100的异步/同步并行总线)适合大数据量场景,RA可通过外部总线接口映射ESC的RAM空间,读写延迟更低,但引脚占用多、布线复杂。选择SPI还是并行,取决于从站过程数据规模与实时性要求。
从站协议栈移植
协议栈通常由ESC厂商或第三方提供,如Beckhoff的SSC(Slave Stack Code)。移植到RA平台需要完成以下适配:
- 硬件抽象层:实现ESC读写函数,如
HW_EscRead、HW_EscWrite,底层调用RA的SPI或并行接口驱动。 - 定时器与中断:提供1ms或更细粒度的系统节拍,用于状态机超时和看门狗。
- EEPROM访问:实现
HW_EepromRead,用于加载ESI配置。 - 应用接口:实现
APPL_InputMapping和APPL_OutputMapping,将过程数据与本地变量关联。
移植后需验证ESC能否被主站扫描到,通常观察ESC的AL Status寄存器是否从INIT进入PREOP、SAFEOP、OP状态。若卡在PREOP,常见原因是PDO映射未配置或邮箱参数不匹配。
PDO映射与邮箱通信(CoE)
PDO映射决定过程数据的布局。以一台伺服从站为例,RxPDO(主站→从站)可映射控制字0x6040、目标位置0x607A、目标速度0x60FF;TxPDO(从站→主站)映射状态字0x6041、实际位置0x6064、实际速度0x606C。每个对象在ESC过程数据RAM中占据固定偏移,映射关系通过对象字典0x1C12(RxPDO分配)和0x1C13(TxPDO分配)以及0x1600/0x1A00(映射参数)描述。
CoE邮箱通信用于非周期数据,如参数读写、SDO上传下载。邮箱通道使用SM0/SM1,RA需在中断中处理邮箱事件,解析CoE服务类型(如SDO请求、SDO响应、紧急事件),并调用协议栈的邮箱处理函数。典型SDO下载流程为:主站发送Initiate Download,从站回复,随后分段传输,最后完成。调试时可观察邮箱计数器是否递增,判断通信是否正常。
ESI文件编写
ESI(EtherCAT Slave Information)是XML格式的从站描述文件,主站据此识别从站并配置PDO。关键字段包括:
| 字段 | 含义 | 示例 |
|---|---|---|
| VendorId | 厂商ID | 0x00000002 |
| ProductCode | 产品代码 | 0x12345678 |
| RevisionNo | 版本号 | 0x00000001 |
| RxPdo / TxPdo | 过程数据映射 | 0x1600 / 0x1A00 |
| Mailbox | 邮箱配置 | SM0/SM1 地址与长度 |
| Fmmu | 逻辑地址映射 | 输入/输出FMMU配置 |
编写ESI时,VendorId和ProductCode必须与ESC EEPROM中存储的值一致,否则主站无法匹配。PDO条目需与对象字典中的映射参数严格对应,包括索引、子索引、位长度和数据类型。ESI文件通常通过EtherCAT主站工具(如TwinCAT)导入验证,若主站能识别从站并进入OP状态,说明ESI与固件配置一致。
从站开发的完整闭环是:硬件连接正确→SPI/并行通信正常→协议栈状态机推进→PDO映射与对象字典一致→ESI被主站识别→进入OP状态并交换过程数据。任一环节出错,都会表现为状态机停滞或数据不更新,需结合ESC寄存器、邮箱计数器和主站诊断信息逐层排查。