文章目录
第8章 FOE
8.1 FOE简介
FOE(File Access over Ethercat),用于节点之间的文件传输。协议类似于TFTP协议,感觉和TFTP协议没有太大的区别,只是一个是UDP传输,一个是Ethercat传输。从机在通过FOE进行固件更新的时候,作为服务端,主机作为客户端,由主机发起固件的上传和下载。FOE与COE一样都是使用邮箱通信,在邮箱头中有一个TYPE字段用来标记当前的数据是COE、FOE或者其他数据。
在使用过程中FOE一般是在Bootstrap状态下与从站通信,当然其他状态下也可以使用。不过在Bootstrap状态下只能使用FOE,因为从站源码中有对邮箱数据进行判断,如果在Bootstrap状态下,接收到的邮箱数据不是FOE,则会报错。
8.2 FOE 数据结构
8.2.1 FOE帧格式
目标地址 | 源地址 | 类型 | Frame Header | Datagram Header | Mailbox Header | FOE Header | Data | FCS |
---|---|---|---|---|---|---|---|---|
6 bytes | 6 bytes | 2 bytes (0x88A4) | 2 bytes | 10 bytes | 6 bytes | 2bytes | N bytes | 4bytes |
FOE 的帧格式与COE的帧格式差不多,也是邮箱数据。FOE Header 2个字节,第一个字节是opcode,第二个字节为预留。opcode的取值范围是1~6,表示数据包的不同功能。
8.2.2 FOE请求
FOE总共有6种请求,分别是读请求、写请求、数据、应答、错误、忙。
1、FOE Read请求
帧部分 | 数据区域 | 大小 | 说明 |
---|---|---|---|
Mailbox Header | Length | 2byte | 邮箱数据的长度,包含2个命令字节。 |
Address | 2byte | 如果主站是客户机,指源站地址,如果从站是客户机,指目的地址。 | |
Channel | bit[0:5] | 保留,默认0 | |
Priority | bit[6:7] | 数据的优先级,0~3;0最低。 | |
Type | bit[0:3] | 0x00:错误;0x01:保留;0x02:EOE;0x03:COE;0x04:FOE;0x05:SOE;0x06~0x0E:保留;0x0F:供应商特定 | |
Cnt | bit[4:6] | 邮箱服务计数器(1~7)。从站与主站的邮箱数据中的Cnt没有关联,两者都是递增的。从站通过主站邮箱数据中的Cnt来判断是否是重复写服务。主站通过从站邮箱服务的Cnt可以检查出是否丢包。 | |
Reserved | bit[7] | 保留,默认0 | |
FOE Header | Opcode | 1byte | 0x01:读请求 |
Reserved | 1byte | 默认0 | |
Read Data | Password | 4byte | 0:不适用密码 1~0xFFFFFFFF:密码 从站对password作为一个判断,只有当密钥正确的时候才进行操作 |
File Name | n byte | 被读文件名字 |
2、写请求
帧部分 | 数据区域 | 大小 | 说明 |
---|---|---|---|
Mailbox Header | Length | 2byte | 邮箱数据的长度,包含2个命令字节。 |
Address | 2byte | 如果主站是客户机,指源站地址,如果从站是客户机,指目的地址。 | |
Channel | bit[0:5] | 保留,默认0 | |
Priority | bit[6:7] | 数据的优先级,0~3;0最低。 | |
Type | bit[0:3] | 0x00:错误;0x01:保留;0x02:EOE;0x03:COE;0x04:FOE;0x05:SOE;0x06~0x0E:保留;0x0F:供应商特定 | |
Cnt | bit[4:6] | 邮箱服务计数器(1~7)。从站与主站的邮箱数据中的Cnt没有关联,两者都是递增的。从站通过主站邮箱数据中的Cnt来判断是否是重复写服务。主站通过从站邮箱服务的Cnt可以检查出是否丢包。 | |
Reserved | bit[7] | 保留,默认0 | |
FOE Header | Opcode | 1byte | 0x02:写请求 |
Reserved | 1byte | 默认0 | |
Write Data | Password | 4byte | 0:不适用密码 1~0xFFFFFFFF:密码 从站对password作为一个判断,只有当密钥正确的时候才进行操作 |
File Name | n byte | 被读文件名字 |
3、数据
帧部分</ |
---|