STM32与LAN9252构建EtherCAT从站(三):LAN9252的XML文件

  1. 一、 STM32与LAN9252构建EtherCAT从站(一):项目简介
  2. 二、 STM32与LAN9252构建EtherCAT从站(二):使用SSC生成EtherCAT协议栈和XML文件
  3. 三、 STM32与LAN9252构建EtherCAT从站(三):LAN9252的XML文件
  4. 四、 STM32与LAN9252构建EtherCAT从站(四):STM32配置SPI
  5. 五、 STM32与LAN9252构建EtherCAT从站(五):STM32与LAN9252适配
  6. 六、 STM32与LAN9252构建EtherCAT从站(六):TwinCAT2的使用和从站测试

STM32与LAN9252构建EtherCAT从站(三):LAN9252的XML文件

EtherCAT从站XML文件简介

每一个EtherCAT从站设备都需要有一个硬件描述的XML文件,用来给TwinCAT组态,XML文件中描述定义了通信时需要用到的各种数据。包括设备所属公司名,设备名,设备版本,LOGO等基础信息,亦包括通信时的点位,点位名称,大小,数量等信息,还包括一个非常特别的14ByteConfigData,这10个字节用来给PHY识别,像ET1100,LAN9252等芯片通过其来识别自身的工作方式,比如第一章STM32与LAN9252构建EtherCAT从站(一):项目简介中我们提到的LAN9252工作的四种方式就是通过这组数据进行确定的。

TwinCAT对设备进行组态时,首先通过其硬件网卡搜索网络上所有的EtherCAT设备,发现设备后可以将XML文件烧录至LAN9252连接的EEPROM中,此后设备上电时,PHY就能根据EEPROM中的数据对自身进行相应的配置。关于TwinCAT的使用,我们在第六章STM32与LAN9252构建EtherCAT从站(六):TwinCAT2的使用和从站测试详细介绍。

XML文件比较大,用普通的文本编辑器打开会显得有些凌乱,上下文结构也不能很好的体现。因此需要一些专门处理XML的工具来辅助编辑,推荐的有XMLSPY和XML Notepad,前者是收费的,破解版也很难找,后者是微软2007年出的,免费试用,但是年代有些久远,功能也不及前者多。

XML中的设备基础信息


如图使用XMLNotepad打开上一章STM32与LAN9252构建EtherCAT从站(二):使用SSC生成EtherCAT协议栈和XML文件生成的XML文件,可以粗略地观察到整个文档由两个节点组成,VendorDescriptions

Vendor下面的idname来自于EtherCAT会员企业信息,我这里不方便用我们公司的真实信息,暂且用#x1EtherCAT来替代。

Vendor下面的ImageData16x14节点,存储的是.bmp格式的16色深度的logo文件,可以使用微软画图或者Photoshop等软件制作,制作完成后使用任何16进制查看器(Notepad++和Sublime都有相关插件直接查看任何文件的16进制数据)将数据填入该节点。

Descriptions->Groups->Group节点下方的TypeName两个节点描述的设备类型的种类和名称,这里根据自己的想法自定义即可。ImageData16x14是设备类型图标,可以直接用上面的数据。

Descriptions->Devices->Device->Physics是以太网口类型,YY表示两个RJ45,一进一出,跟Y相对应的是K,表示EBUS网口,德国倍福的专用端口,不需要修改。

Descriptions->Devices->Device->Type节点下的ProductCodeRevisonNo表示的是硬件编号和版本号,这里取一些有意义的名称,产品迭代升级时不要忘记这里的版本号也应该做相应的升级。TwinCAT通过这两个字段确定XML的唯一性,也就是说你如果两份XML这两个字段一样,放到TwinCAT/IO/EtherCAT文件夹下,只能识别其中一个。

Descriptions->Devices->Device->Name设备名,任意取。

Descriptions->Devices->Device->Info节点存储了一些超时限制的数据,没有特殊情况不需要修改,这里设置好了以后在TwinCAT界面可以看到设备在各种状态切换时的超时限制。

Descriptions->Devices->Device->GroupType与上面Descriptions->Groups->Group->Type相对应。

至此,有关设备基础信息的部分就结束了。

XML中的字典和IO数据

这部分数据超级复杂,包括字典定义和IO点位描述,但这部分数据已经由SSC创建完成了,SSC通过我们填写的Excel自动生成的,如果没有SSC,这里的数据全都由我们自己填写,将是一件非常恐怖的事情,不仅编写起来工作量非常巨大,而且极易出错。我们这里仅做简单地浏览认识一下。

首先理解一下字典,所谓字典就是对数据结构的描述,XML里面每种数据集合都需要有它的类型定义,有些类型是简单的String,UINT等基本类型,有些类型是由多种基本类型组合而成的复合结构,在字典定义部分都需要对其进行定义。打开Descriptions->Devices->Device->Profile节点,里面有两个子节点DataTypeObjects,有点类似C语言中的typedef定义类型和int x定义变量,事实上在SSC生成的协议栈中的SSC-DeviceObjects.h文件也确实与这里的定义一一对应的,感兴趣的朋友可以提前去浏览一下,我们将会在STM32与LAN9252构建EtherCAT从站(五):STM32与LAN9252适配做详细介绍。

举个例子,如图所示,在Objects节点下有一个Object名叫Device name, 其index为#x1008,type为STRING(10),这个STRING(10)就要从上面的DataTypes节点里面找对应的子项了,果然我们会发现一个DataType子节点名叫STRING(10),它的BitSize定义的是80个bit,应该是个uchar[10]的数组,那么这个字符串内容是什么呢,还记得我们之前在硬件基础信息部分定义的Device Name吗,我们去看看,上面定义的是SSC-Device,数一数正好10个字节。

所以在XML中每一个元素都会有自己的数据结构,每一种数据结构都会在数据字典中定义,如果这之间的关系理得不顺,EtherCAT将无法建立连接,想要手工把这里面的关系搞定真的非常困难,SSC在之前帮我们全都搞定了。

IO点位数据就更加复杂了,在Descriptions->Devices->Device节点下有四个Sm节点,这个表示通道,我们通信时一共有四个通道,除了过程传输数据输出和输入以外,还有两个通道用来控制EtherCAT自身状态的,也是EtherCAT协议中非常重要的MailBox概念,分别叫做MBoxOutMBoxIn,这里不需要管它,只需要了解过程传输数据InputsOutputs两个通道,这两个通道内部的数据又分别指向RxPdoTxPdo两个节点,这两个节点每个Entry节点都是我们之前在Excel中定义的一个IO点。SSC通过Excel帮我们完成了一项庞大的工作,在XML中生成了64+64个Entry,如果手工录入,这工作量将会非常恐怖。

综上,XML中数据字典和IO点位我们就粗略的理解到这里了。这其中的还有很多深奥的地方,比如SM通道的size需要16位对齐,Entry节点的bitlen和subindex属性等等,如果您有兴趣理解透彻,可以去看一下CanOpen协议中关于字典和对象的描述,EtherCAT协议这部分内容完全脱胎于CanOPEN协议。

XML中的EEPROM内容


现在我们来到XML最后一部分内容,EEPROM节点,这个节点数据量非常少,只有两个子节点,ByteSize一般为2048,代表板载的EEPROM芯片容量是2KByte,其实我们一般使用512K的物理容量芯片,防止IO数据定义时数据量增加不够存储。这里插一句题外话,与LAN9252相连的EEPROM芯片尽量使用ATMEL家的24FC512,否则EtherCAT可能会有连接困难的现象。

XML中大部分内容都由SSC帮我们生成,现在到了比较重要的最后14byte数据,也就是ConfigData节点,SSC帮我们构建的XML是按照ET1100芯片生成的,默认为050E03440A0000000000,这里使用的是LAN9252,打开LAN9252芯片手册AN1907-Microchip LAN9252 Migration from Beckhoff ET1100,看到2.3节,手册上让我们改成800E00CC8813F0000000800000,我们先跟着做,手册下面一行提示我们如果想进一步了解含义,需要阅读LAN9252 EEPROM章节。

打开LAN9252 datasheet,在12.8 EEPROM Configurable Registers章节,有如下介绍:

可以看到这14个byte其实是由这张表组成的,上面的截图只是表格的前半部分,下面一页有后半部分,不过最重要的就是这前面第一个字节。看到第一个字节定义了芯片的0140h寄存器,这个寄存器叫做Process Data Interface,点击进入改寄存器的详细描述,如下图所示:

在12.14.24章节,有0140h寄存器的详细描述,可以看到这个寄存器配置为80h即为SPI通信方式,这与我们项目架构相匹配。回忆一下之前手册上让我们将ConfigData节点修改为800E00CC8813F0000000800000这第1个80其实就是指的SPI方式,至于后面这些数据代表什么含义,都可以在LAN9252 datasheet中查找到,如果暂时不理解就不要修改,保持默认就可以了。

至此整个XML文档我们就浏览剖析结束了,这份XML后面会放到TwinCAT安装路径下的/Io/EtherCAT文件夹,然后在TwinCAT中给寻找到的EtherCAT设备烧录,LAN9252将其中关键数据存储到与自己相连的EEPROM中,供自己以后上电时给自己配置各项参数。

花开两朵,各表一枝,XML文件我们暂且放在一边,下面一章,我们将给STM32F103配置一下SPI功能,并与之前SSC生成的协议栈做一下SPI部分的融合。