文章目录
一、EEPROM功能
EtherCAT从站控制器(EtherCAT Slave Controller,ESC)使用EEPROM(带电可擦可编程只读存储器)来存储设备相关信息,这个存储器也称为从站信息接口(Slave Information Interface,SII)。
EEPROM中存储的信息是由厂商写入的,用于描述从站设备。EEPROM的容量为1Kbit-4Mbit,取决于ESC规格。在用户使用时,可以通过ESC中的EEPROM控制寄存器来读写其中的信息。此外,在设备上电或复位时,ESC会自动从EEPROM中的ESC寄存器配置区读取数据写入相应寄存器完成ESC配置。
二、EEPROM信息存储结构
EEPROM中存储的信息组织结构如下图所示。
下图展示的是一个EtherCAT电机设备的EEPROM信息,不同色块区分不同类型的信息。
EEPROM使用字地址。需要注意的是,EEPROM存储数据使用的是小端字节序,即低地址存放低字节。因此图中第一个字的数据应为0x0c08,其他同理。
接下来具体介绍各部分信息。
1、基本信息
EEPROM中字0-64是必须的基本信息,具体如下:
(1)ESC寄存器配置区
字0-7,由ESC在上电或复位后自动读取后写入相应寄存器,并检查校验和。
(2)产品标识区
字8-15,包括厂商标识(VendorID)、产品码(ProductCode)、版本号(RevisionNo)和序列号(SerialNo),各占两个字。
(3)硬件延时
字16-19,描述端口时延和处理时延等信息。
(4)引导状态下邮箱配置
字20-23。
(5)标准邮箱通信SM配置
字24-27。
(6)邮箱协议类型
字28。
该字段可设置的值如下,用于表示支持的协议类型。
(7)保留字段
字29-61,全置0。
(8.)EEPROM容量及版本
字62、63。
2、分类附加信息
基本信息后面的部分是分类附加信息,包含可选的从站信息。
不同于上面基本信息的固定信息长度,分类附加信息的长度是不固定的。因此每类信息开头的第一个字都用来表示信息类型,第二个字用来表示信息长度。
下表列出了用来表示不同信息类型的值。因为是可选信息,所以EEPROM中不一定含有下表中的所有类型。
例如下图截取了EtherCAT电机设备EEPROM的文本字符串信息部分,第一个字0x000a对应上表中的STRINGS类型,第二个字0x011e表示文本字符串信息长度为286字(不包括第一、二个字)。
(1)字符串信息
字符串信息表示方法如下表。
例如下面截取的文本字符串信息,从第三个字开始是信息内容。第三个字的第一个字节用于表示字符串数量,0x24即一共有36个字符串,之后一个字节表示第一个字符串的长度,0x09即第一个字符串长度为9,再往后9个字节用于表示第一个字符串内容,即“2DM522-EC”。后面的内容以此类推。
字符串信息中的字符串会在其他类型的信息中被引用,例如在设备信息中就会引用某个字符串来表示某个信息。
(2)设备信息
设备信息表示方法如下表。
例如下图截取的设备信息。从第三个字开始的第一个字节数据为0x02,意为引用字符串信息中的第二个字符串“2DM Slave”来表示Group Information。
(3)FMMU信息
FMMU信息表示方法如下表。
每个字节描述一个FMMU,例如下面截取的FMMU信息,一共包含三个FMMU。FMMU0用于输出,FMMU1用于输入,FMMU2用于同步管理器状态。最后一个字节0xff用于填充空余位。
(4)同步管理器信息
同步管理器信息表示方法如下表。
例如下图截取的同步管理器信息,从第三个字开始每四个字描述一个同步管理器信息,一共有四个同步管理器SM0、SM1、SM2、SM3。
以SM0为例,物理起始地址为0x1000,长度为0x80,控制寄存器为0x26,用于邮箱输出。
(5)PDO信息
PDO信息描述了所有的PDO映射对象信息,以及PDO映射对象中包含的PDO信息。
PDO映射对象信息描述方式如下方第一个表,PDO信息描述方式如下方第二个表。
例如下图截取的TxPDO信息,按照上面两个表对其进行解析标注。
(6)分布时钟信息
分布时钟信息表示方法如下表。
例如下图截取的分布时钟信息。
该设备的EEPROM中不涉及FMMUX信息和SyncUnit信息,故本文只放出官方文档中描述这两类信息的表格。
(7)FMMUX信息
(8)SyncUnit信息
三、EEPROM信息读取过程
一般在EtherCAT主站开启后,就会开始读取连接的从站设备的EEPROM。主站会发送FPWR类型数据帧来操作从站设备的寄存器,从而控制ESC读取EEPROM信息并写入寄存器中,然后主站再发送FPRD类型数据帧来读取寄存器中的信息。
需要使用的寄存器地址如上表,读取的具体过程如下所述。
(1) 主站首先发送FPWR数据帧,向寄存器0x0500地址写入数据0x00
0x0500地址的第0位和第1位的用途如下图,写入数据0x00后表示取消PDI对EEPROM的控制,由主站对EEPROM控制。
(2) 然后发送FPWR数据帧,向寄存器0x0502:0x0503地址设置参数,向寄存器0x0504:0x0507地址写入需要读取的EEPROM字地址。本文以读取EEPROM中的版本号信息为例描述读取过程,版本号信息在EEPROM中的起始字地址为0x0c。
(需要注意的是主站开启后会将从站设备的EEPROM信息从字地址0x00开始依次全部读取一遍,直到读取到数据是结束标志0xffff才停止读取。)
上图中,对0x0502:0x0503地址写入数据为0x0180,转换为二进制是0000 0001 1000 0000,第15位到第0位的顺序是从左到右,该地址段的各个数据位的作用如下表。第6位写入0,表示读取EEPROM信息时连续读取4个字节,即两个字;第10-8位分别写入0、0、1,表示读取EEPROM信息。向0x0504地址写入数据为0x000c,表示要从EEPROM信息的第12个字开始读取,且读取时会连续读取四个字节,所以会读取第12、13个字,即版本号信息。
(3) 连续向从站设备发送FPRD数据帧,读取寄存器0x0502:0x050b地址数据,根据0x0502:0x0503地址数据判断ESC是否已读取到所需的EEPROM信息并写入了寄存器0x0508:0x050b地址中。
如下图中,从0x0502:0x0503地址读取到的数据是0x8160,转换为二进制是1000 0001 0110 0000。因此当前EEPROM接口状态忙,EEPROM信息还未装载完成,主站还需要继续发送FPRD数据帧直到状态改变。
下图是上图的后一个帧,在该帧中从0x0502:0x0503地址读取到的数据是0x0060,转换为二进制是0000 0000 0110 0000。因此得知当前EEPROM接口状态空闲,EEPROM信息装载完成,并且能够看到从寄存器0x0508:0x050b地址读取的数据相对上一个帧发生了变化。
到此完成了对EEPROM第12个、第13个字的读取,得到了版本号信息0x20190620。
之后会继续重复步骤(2)和(3),将EEPROM中的所有设备信息全读取一遍,直到读到结束标志0xffff。