0 工具准备
1.EtherCAT主站
2.EtherCAT从站(本文使用步进电机驱动器)
3.Wireshark
1 抓包分析
1.1 报文总览
本文让主站去读取从站1字地址为0的EEPROM数据内容,主站读取从站EEPROM数据内容使用Wireshark抓包如下:
1.2 EEPROM读取阶段1:将EEPROM访问控制权设置为主站
这一阶段涉及的寄存器包括0x0500、0x0501,有关这2个寄存器的描述如下:
将EEPROM访问控制权设置为主站的操作分为2步:
(1)强制PDI释放EEPROM访问控制权
通过APWR自动增量写报文设置0x0500.1为1,该位设置为1时将复位0x0501.0为0。这一操作可以强制清除0x0501.0为0,从PDI手中夺取EEPROM访问控制权。
(2)主站接管EEPROM访问控制权
通过APWR自动增量写报文设置0x0500.0为0,由主站接管EEPROM的控制权。
1.3 EEPROM读取阶段2:读取EEPROM支持读字节数
这一阶段涉及的寄存器为0x0502:
主站通过APRD自动增量读报文读取0x0502寄存器获取EEPROM状态,返回的数据为0x0060,表明EEPROM支持读取的字节数为8字节,也就是每次读取每个字地址时都会返回以字地址开头的8字节数据。
1.4 EEPROM读取阶段3:等待EEPROM接口空闲
这一阶段涉及的寄存器为0x0502的bit15:
主站不断发送APRD自动增量读报文查看0x0502的bit15状态,一直等到EEPROM接口空闲。
1.5 EEPROM读取阶段4:发送读取EEPROM命令
这一阶段涉及的寄存器为0x0502的bit8以及0x0504-0x0507寄存器:
主站通过APWR自动增量写报文设置0x0502寄存器的bit8为1,表示主站要开始进行读操作,设置寄存器0x504-0x507为0x0表示EEPROM的读取字地址为0x0:
1.6 EEPROM读取阶段5:等待EEPROM接口空闲
这一阶段涉及的寄存器为0x0502的bit15:
主站不断发送APRD自动增量读报文,读取0x0502寄存器bit15查看EEPROM接口是否空闲:
1.7 EEPROM读取阶段6:读取EEPROM数据
这一阶段涉及的寄存器为0x0508:
主站发送APRD自动增量读报文读取0x0508寄存器内容,长度为8,也就是前文获取到的读取字节数:
至此,主站读取从站EEPROM工作结束,获取到的以字地址0开头的EEPROM 8字节数据为:00 3C 00 00 00 64 00 00。
2 总结
主站读取从站EEPROM数据可以分为以下6个步骤:
(1)主站夺取EEPROM访问控制权
(2)获取从站EEPROM支持的读字节数
(3)等待从站EEPROM接口空闲
(4)发送读取EEPROM命令(包括读取地址)
(5)等待从站EEPROM接口空闲
(6)读取EEPROM数据