4. EtherCAT从站EEPROM结构
EtherCAT从站上电后,主站首先通过ESC(EtherCAT Slave Controller)读取EEPROM中的信息,以识别设备身份、能力与配置。EEPROM并不是一段随意存放的字节,而是按照EtherCAT规范严格划分的地址映射结构。理解这套结构,是排查“从站识别失败”“PDO配置不匹配”“固件升级后设备不认”等问题的关键基础。
一、EEPROM地址映射总览
EtherCAT从站EEPROM通常为1 Kbit至4 Kbit(部分支持更大容量),采用字地址(Word Address)寻址,每个字为16位。ESC通过I²C或内部接口访问EEPROM,主站则通过寄存器0x0502:0x0503发起读取,并借助0x0500:0x0501获取状态。整个EEPROM空间按功能划分为若干区域:
- 配置区(Configuration Area):字地址0x0000~0x0007,共8个字,定义基本硬件配置。
- 厂商与产品标识区:字地址0x0008~0x0011,包含Vendor ID、Product Code、Revision Number、Serial Number。
- 引导状态与邮箱配置区:字地址0x0012~0x0013,定义Bootstrap与标准邮箱配置。
- 类别与版本区:字地址0x0014~0x0015,包含Category、Revision等扩展信息。
- SM与FMMU配置区:字地址0x0018起,描述同步管理器与FMMU通道配置。
- PDO与对象字典区:字地址0x0040起,存放PDO映射、对象字典及CoE信息。
- 字符串与注释区:字地址0x0080起,存放设备名称、硬件版本、注释等文本。
这些区域并非全部必须使用,但配置区、厂商ID、产品码、修订号、序列号是主站识别从站的最小必要集合。若这些字段缺失或错误,主站可能拒绝进入OP状态。
二、配置区字段详解
配置区位于EEPROM最前端,共8个字,是ESC初始化时最先读取的内容。其字段定义如下:
| 字地址 | 字段名称 | 位宽 | 说明 |
|---|---|---|---|
| 0x0000 | PDI类型 | 8位 | 0x00=无PDI,0x01=数字I/O,0x04=SPI,0x05=OSSP,0x08=以太网 |
| 0x0001 | 设备类型 | 8位 | 0x00=未定义,0x01=数字I/O,0x02=模拟I/O,0x03=运动控制,0x04=编码器 |
| 0x0002 | FMMU数量 | 8位 | 从站支持的FMMU通道数,通常为0~8 |
| 0x0003 | SM数量 | 8位 | 从站支持的同步管理器数量,通常为0~8 |
| 0x0004–0x0005 | ESC版本 | 16位 | 高字节主版本,低字节次版本,如0x0301表示ESC 3.1 |
| 0x0006–0x0007 | 保留/端口配置 | 16位 | 端口描述、保留位,部分ESC用于指示端口数量 |
配置区一旦写入错误,ESC可能无法正确初始化。例如PDI类型与实际硬件不符,会导致主站无法建立通信;FMMU或SM数量虚报,则会在配置阶段报错。
三、厂商ID、产品码、修订号与序列号
这四个字段构成从站的“身份指纹”,主站通过它们匹配ESI(EtherCAT Slave Information)文件,决定加载哪套对象字典与PDO配置。
- Vendor ID(0x0008–0x0009):由ETG分配给厂商的唯一标识,16位。例如Beckhoff为0x00000002,汇川为0x00000A3C。主站据此判断设备来源。
- Product Code(0x000A–0x000B):厂商自定义的产品型号编码,32位。同一厂商下不同产品必须不同,用于区分具体设备。
- Revision Number(0x000C–0x000D):产品修订版本,32位。固件升级或硬件改版时应递增,主站可据此判断是否兼容。
- Serial Number(0x000E–0x0011):设备序列号,32位。用于唯一标识单台设备,支持热插拔与资产追踪。
匹配逻辑:主站扫描到从站后,读取Vendor ID与Product Code,在ESI库中查找对应条目;再比对Revision Number,若主站ESI版本低于从站实际修订号,可能提示“设备版本不匹配”,此时需更新ESI文件或降级固件。
四、实操:读取与解析EEPROM
在调试阶段,可通过TwinCAT或IgH EtherCAT Master读取EEPROM内容。以下为IgH主站下使用ethercat命令读取从站EEPROM的示例:
# 查看从站0的EEPROM基本信息
ethercat eeprom 0 --dump
# 输出示例(节选)
0x0000: 05 01 04 04 03 01 00 00
0x0008: 02 00 00 00 3C 0A 00 00
0x0010: 01 00 00 00 00 00 00 00
# 解析:
# 0x0000: PDI=0x05(OSSP), 设备类型=0x01, FMMU=4, SM=4
# 0x0004: ESC版本=0x0301 (3.1)
# 0x0008: Vendor ID=0x0002 (Beckhoff)
# 0x000A: Product Code=0x00000A3C
# 0x000C: Revision=0x00000001
# 0x000E: Serial=0x00000000
若读取到全0xFF或全0x00,通常说明EEPROM未正确烧录、I²C通信失败或ESC未使能EEPROM访问。此时应检查EEPROM供电、上拉电阻及ESC的0x0500寄存器状态。
五、常见误区与复盘
误区一:只改Product Code不改Revision。固件功能变更后若修订号不变,主站仍按旧ESI加载PDO,可能导致过程数据长度不匹配,进入OP失败。
误区二:Vendor ID与ESI文件不一致。部分厂商使用测试ID量产,导致主站无法匹配官方ESI,设备只能停留在PREOP。
误区三:忽略配置区PDI类型。PDI类型错误会使ESC无法与本地应用层通信,表现为“从站可见但无法读写过程数据”。
复盘建议:每次修改EEPROM后,使用ethercat eeprom --dump核对配置区、Vendor ID、Product Code、Revision、Serial五个关键字段;同时确认ESI文件中的对应条目已同步更新。对于批量生产,建议在产线工装中自动写入并回读校验,避免人工烧录遗漏。
掌握EEPROM地址映射与字段定义,不仅能快速定位从站识别问题,还能在设备定制、固件升级和产线测试中建立标准化的配置流程。下一阶段将结合ESI文件,进一步分析对象字典与PDO映射的对应关系。