3. 从站ESC与EEPROM信息读取
在 EtherCAT 主从站联调中,主站能否正确驱动一个从站,取决于它是否准确掌握了从站 ESC(EtherCAT Slave Controller)内部的关键配置信息。这些信息并不需要主站逐字节猜测,而是由从站通过 EEPROM 和 ESC 寄存器主动暴露出来。本节围绕“读什么、从哪读、怎么判断”展开,帮助你在联调初期快速建立对从站的完整认知。
一、ESC 与 EEPROM 的分工
ESC 是从站通信的硬件核心,负责处理 EtherCAT 帧、SM 通道、FMMU 映射和诊断计数;EEPROM 则保存从站的“身份档案”,包括厂商 ID、产品代码、修订号、PDI 接口类型、SM 配置、FMMU 配置以及同步管理器参数。主站上电后通常先通过 ESC 寄存器读取 EEPROM 内容,再据此配置过程数据映射。
需要区分两类访问路径:一类是直接读 ESC 寄存器(如 0x0000~0x0FFF 的寄存器区),另一类是通过 ESC 的 EEPROM 接口间接读取 EEPROM 数据。前者反映实时状态,后者反映静态配置。联调时两者都要看,不能只依赖其中一方。
二、从站类型识别:厂商 ID、产品代码与修订号
识别从站类型最直接的依据是 EEPROM 中的三个字段:Vendor ID、Product Code、Revision Number。主站扫描到从站后,会读取这些值并与 ESI(EtherCAT Slave Information)文件比对,从而确定该从站应使用哪套对象字典和 PDO 映射。
例如,某伺服从站返回 Vendor ID = 0x00000002、Product Code = 0x04400002、Revision = 0x00010000。若主站加载的 ESI 文件中没有匹配项,就会报“未知从站”或“配置不匹配”。此时应优先核对 ESI 版本,而不是盲目修改 PDO 配置。下表给出常见字段的判读要点:
| 字段 | 典型位置 | 判读要点 |
|---|---|---|
| Vendor ID | EEPROM 0x0008 | 厂商唯一标识,与 ESI 必须一致 |
| Product Code | EEPROM 0x000A | 产品型号,决定 PDO 默认映射 |
| Revision Number | EEPROM 0x000C | 固件版本,影响对象字典兼容性 |
| Serial Number | EEPROM 0x000E | 唯一序列号,用于多从站区分 |
三、PDI 接口:主站与从站应用层的通道
PDI(Process Data Interface)是从站 ESC 与本地微控制器或应用层之间的接口,常见类型包括 SPI、并行总线、数字 I/O 和 EtherCAT 专用接口。EEPROM 中的 PDI 类型字段告诉主站:该从站的过程数据是通过哪种方式交给应用层的。
联调时若发现从站能进入 OP 状态但过程数据不更新,应检查 PDI 配置是否与硬件实际连接一致。例如,某从站 EEPROM 标注 PDI 为 SPI,但实际板卡使用并行接口,则 ESC 与 MCU 之间无法正确交换数据,表现为输入数据恒为 0 或输出无响应。
四、SM 配置:过程数据的通道规划
SM(SyncManager)是 ESC 内部用于管理数据缓冲和方向控制的通道。每个 SM 通道有独立的物理地址、长度、控制寄存器和状态寄存器。EEPROM 中保存了默认 SM 配置,主站在 PreOP 阶段会据此写入 SM 寄存器。
典型从站至少包含两个 SM:SM2 用于输出(主站→从站),SM3 用于输入(从站→主站)。配置时需要关注三个参数:起始地址、数据长度、控制字(方向、中断、看门狗)。若 SM 长度与 PDO 映射总长度不一致,主站会在配置阶段报错。
示例:某从站 SM 配置
SM2: 起始 0x1100, 长度 0x0040, 控制 0x00010024 (输出)
SM3: 起始 0x1180, 长度 0x0040, 控制 0x00010020 (输入)
读取 SM 状态寄存器还能判断通道是否被正确激活。若 SM2 的激活位未置位,主站写出的过程数据不会进入 ESC 缓冲区,从站自然无法响应。
五、FMMU 配置:逻辑地址到物理地址的映射
FMMU(Fieldbus Memory Management Unit)负责把主站使用的逻辑地址映射到从站 ESC 内部的物理地址。每个 FMMU 单元包含逻辑起始地址、物理起始地址、长度、方向等字段。主站在配置阶段根据 EEPROM 中的 FMMU 默认值和实际 PDO 映射写入 FMMU 寄存器。
联调中常见的“数据错位”问题,往往源于 FMMU 映射长度或方向配置错误。例如,输入 PDO 映射了 8 字节,但 FMMU 只配置了 4 字节,则后 4 字节数据不会被主站读取。此时应同时核对 PDO 映射、SM 长度和 FMMU 长度三者是否一致。
六、诊断寄存器:定位问题的第一手线索
ESC 提供了一组诊断寄存器,用于记录通信错误和状态异常。联调时最常关注以下几类:
- AL Status Code:从站当前状态码,如 0x0011 表示无效请求,0x0016 表示 SM 看门狗超时。
- CRC 错误计数:反映物理链路质量,持续增长说明线缆或接口有问题。
- 看门狗计数器:判断从站是否因主站停止发送而进入安全状态。
- SM 状态寄存器:查看各通道是否激活、是否有数据溢出。
读取诊断寄存器时,建议先读 AL Status Code 确定大方向,再结合 CRC 和看门狗计数判断是链路问题还是配置问题。例如,AL Status Code = 0x0016 且看门狗计数持续增加,说明主站发送周期不稳定或从站未收到有效帧,应优先检查主站任务周期和网络负载。
七、联调实操:一次完整的读取与判读流程
假设你使用 TwinCAT 或 SOEM 作为主站,连接一个未知从站。第一步,扫描网络并读取 EEPROM 基本信息,确认 Vendor ID 和 Product Code 是否与手头 ESI 匹配。第二步,读取 PDI 类型,核对从站板卡的实际接口。第三步,读取 SM 和 FMMU 默认配置,与 ESI 中的 PDO 映射长度做比对。第四步,进入 PreOP 后读取 SM 状态寄存器,确认通道已激活。第五步,若无法进入 OP,读取 AL Status Code 和 CRC 计数,判断是配置问题还是链路问题。
掌握 ESC 与 EEPROM 信息的读取方法后,你就能在从站无法进入 OP、过程数据不更新或映射错位时,快速判断问题出在身份识别、PDI 接口、SM 通道还是 FMMU 映射,而不是盲目更换线缆或重启设备。这是 EtherCAT 联调从“试错”走向“定位”的关键一步。