APIs, concepts, guides, and more
FoE - File over EtherCAT

Use FoE to send files over an EtherCAT network.

๐Ÿ”น What is FoE?

FoE (File over EtherCAT) - This simple protocol similar to TFTP (Trivial File Transfer Protocol) enables file access in a device and a uniform firmware upload to devices across an EtherCAT network. The protocol has been deliberately specified in a lean manner, so that it can be supported by boot loader programs โ€“ a TCP/IP stack isnโ€™t required.

๐Ÿ”น Why use FoE?

This feature allows your device to receive a new firmware in order to update itself. You no longer need to send a tech out into the field with a special service cable to move to new firmware revisions.

๐Ÿ”น How to Perform FoE?

  1. Use RapidSetup to Generate an ENI file. Make note of the node number you wish to update. 0 Ordinate. You will use this later. In our example below, we are using the 4th Node (Node # 3). The Network should be Uninitialized or Shutdown (Not Operational) for the next steps.
  2. Place your firmware file in the RapidCode Folder (Typically C:\RSI\#.#.#\ where # represent the version number.) In our example we are downloading EL3064-0000-FW09-FW.efw though we remove the .efw as an extension.
Warning
For Beckhoff: remove any file extension such as .efw if they exist. For Mitsubishi: Keep .bin file extension.
  1. Locate and Run Ldrta.exe in your INtime folder. (Typically C:\Program Files (x86)\INtime\bin\)
  2. Browse to your RapidCode Folder and Select RMPNetwork.rta (Typically C:\RSI\#.#.#\ where # represent the version number.)
  3. Enter >>> -f # firmwareFileName <<< in Arguments
    1. \-f (Indicates File Download)
    2. \# The Node number of the node to update. Determined by Step 1 above.
    3. The firmware file name such as (EL3064-0000-FW09-FW).
    4. Spaces between a,b,c. See the image below.

      Image

  4. Select Open. You should see something like the example output below.
Note
It is generally recommend that you restart your node after downloading firmware and allowing it time to update.

EXAMPLE OUTPUT

RMPNetwork: (i) 00:10:34.062 EtherCAT RMPNetworkStarter.cpp:82 Starting RMPNetwork firmware
RMPNetwork: (i) 00:10:34.067 EtherCAT RMPNetworkFirmware.cpp:207 Network offset 0xd167ec
RMPNetwork: (i) 00:10:34.067 EtherCAT RMPNetworkFirmware.cpp:213 pNetwork address: 0x23168ac
RMPNetwork: (i) 00:10:34.067 EtherCAT RMPNetworkFirmware.cpp:214 RMP signature = 0xdeadbeef
RMPNetwork: (i) 00:10:34.067 EtherCAT RMPNetworkFirmware.cpp:215 RMP partial serial number:
RMPNetwork: (i) 00:10:34.076 EtherCAT RMPNetworkFirmware.cpp:1350 Attempting to discover the number of EtherCAT nodes on the network...
RMPNetwork: (i) 00:10:34.679 EtherCAT INtimeDevice.cpp:492 hpeOpen-Probe ie1g0 found
RMPNetwork: (i) 00:10:39.305 EtherCAT INtimeDevice.cpp:536 MAC address:
RMPNetwork: (i) 00:10:39.305 EtherCAT INtimeDevice.cpp:547 Allocate and attach the receive buffers
RMPNetwork: (i) 00:10:40.555 EtherCAT INtimeDevice.cpp:597 Checking Ethernet PHY media status for nodes...
RMPNetwork: (i) 00:10:40.555 EtherCAT INtimeDevice.cpp:614 Interface is connected at 100Mbps
RMPNetwork: (i) 00:10:40.555 EtherCAT RMPNetworkFirmware.cpp:1367 Discovery device opened ok, now detecting how many nodes on the network...
RMPNetwork: (i) 00:10:40.555 EtherCAT RMPNetworkFirmware.cpp:1377 Calling DiscoveryInit()...
RMPNetwork: (i) 00:10:40.570 EtherCAT RMPNetworkFirmware.cpp:1379 Discovery Node Count is 4
RMPNetwork: (i) 00:10:40.651 EtherCAT RMPNetworkFirmware.cpp:1434 Node 0
RMPNetwork: (i) 00:10:40.651 EtherCAT RMPNetworkFirmware.cpp:1435 VendorID = 0x2
RMPNetwork: (i) 00:10:40.651 EtherCAT RMPNetworkFirmware.cpp:1436 ProductCode = 0x44d2c52
RMPNetwork: (i) 00:10:40.651 EtherCAT RMPNetworkFirmware.cpp:1437 Revision = 1114112
RMPNetwork: (i) 00:10:40.651 EtherCAT RMPNetworkFirmware.cpp:1438 SerialNumber = 0
RMPNetwork: (i) 00:10:40.651 EtherCAT RMPNetworkFirmware.cpp:1439 StationAlias = 0
RMPNetwork: (i) 00:10:40.734 EtherCAT RMPNetworkFirmware.cpp:1434 Node 1
RMPNetwork: (i) 00:10:40.734 EtherCAT RMPNetworkFirmware.cpp:1435 VendorID = 0x2
RMPNetwork: (i) 00:10:40.734 EtherCAT RMPNetworkFirmware.cpp:1436 ProductCode = 0x7d83052
RMPNetwork: (i) 00:10:40.734 EtherCAT RMPNetworkFirmware.cpp:1437 Revision = 1179648
RMPNetwork: (i) 00:10:40.734 EtherCAT RMPNetworkFirmware.cpp:1438 SerialNumber = 0
RMPNetwork: (i) 00:10:40.734 EtherCAT RMPNetworkFirmware.cpp:1439 StationAlias = 0
RMPNetwork: (i) 00:10:40.816 EtherCAT RMPNetworkFirmware.cpp:1434 Node 2
RMPNetwork: (i) 00:10:40.816 EtherCAT RMPNetworkFirmware.cpp:1435 VendorID = 0x2
RMPNetwork: (i) 00:10:40.816 EtherCAT RMPNetworkFirmware.cpp:1436 ProductCode = 0x3f03052
RMPNetwork: (i) 00:10:40.816 EtherCAT RMPNetworkFirmware.cpp:1437 Revision = 1179648
RMPNetwork: (i) 00:10:40.816 EtherCAT RMPNetworkFirmware.cpp:1438 SerialNumber = 0
RMPNetwork: (i) 00:10:40.816 EtherCAT RMPNetworkFirmware.cpp:1439 StationAlias = 0
RMPNetwork: (i) 00:10:40.897 EtherCAT RMPNetworkFirmware.cpp:1434 Node 3
RMPNetwork: (i) 00:10:40.897 EtherCAT RMPNetworkFirmware.cpp:1435 VendorID = 0x2
RMPNetwork: (i) 00:10:40.897 EtherCAT RMPNetworkFirmware.cpp:1436 ProductCode = 0xbf83052
RMPNetwork: (i) 00:10:40.897 EtherCAT RMPNetworkFirmware.cpp:1437 Revision = 1310720
RMPNetwork: (i) 00:10:40.897 EtherCAT RMPNetworkFirmware.cpp:1438 SerialNumber = 0
RMPNetwork: (i) 00:10:40.897 EtherCAT RMPNetworkFirmware.cpp:1439 StationAlias = 0
RMPNetwork: (i) 00:10:40.958 EtherCAT RMPNetworkFirmware.cpp:1190 Attempting to start in Bootstrap state.
RMPNetwork: (i) 00:10:40.958 EtherCAT EthCatDr.cpp:396 Opening EC driver in Bootstrap mode
RMPNetwork: (i) 00:10:40.958 Controller MKBusBaseDriver.cpp:67 Attaching hardware card of driver EtherCATDriver
RMPNetwork: (i) 00:10:40.966 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 0 (Beckhoff - EK1101).ID.ID Bits: 16 Offset: 312 VarBitOffs: 0
RMPNetwork: (i) 00:10:40.966 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 2 (Beckhoff - DI8).Channel 1.Input Bits: 1 Offset: 328 VarBitOffs: 0
RMPNetwork: (i) 00:10:40.966 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 2 (Beckhoff - DI8).Channel 2.Input Bits: 1 Offset: 329 VarBitOffs: 1
RMPNetwork: (i) 00:10:40.966 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 2 (Beckhoff - DI8).Channel 3.Input Bits: 1 Offset: 330 VarBitOffs: 2
RMPNetwork: (i) 00:10:40.966 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 2 (Beckhoff - DI8).Channel 4.Input Bits: 1 Offset: 331 VarBitOffs: 3
RMPNetwork: (i) 00:10:40.966 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 2 (Beckhoff - DI8).Channel 5.Input Bits: 1 Offset: 332 VarBitOffs: 4
RMPNetwork: (i) 00:10:40.966 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 2 (Beckhoff - DI8).Channel 6.Input Bits: 1 Offset: 333 VarBitOffs: 5
RMPNetwork: (i) 00:10:40.966 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 2 (Beckhoff - DI8).Channel 7.Input Bits: 1 Offset: 334 VarBitOffs: 6
RMPNetwork: (i) 00:10:40.967 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 2 (Beckhoff - DI8).Channel 8.Input Bits: 1 Offset: 335 VarBitOffs: 7
RMPNetwork: (i) 00:10:40.967 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 3 (Beckhoff - AI4).AI Compact Channel 1.Value Bits: 16 Offset: 336 VarBitOffs: 0
RMPNetwork: (i) 00:10:40.967 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 3 (Beckhoff - AI4).AI Compact Channel 2.Value Bits: 16 Offset: 352 VarBitOffs: 0
RMPNetwork: (i) 00:10:40.967 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 3 (Beckhoff - AI4).AI Compact Channel 3.Value Bits: 16 Offset: 368 VarBitOffs: 0
RMPNetwork: (i) 00:10:40.967 EtherCAT EtherCATConfigParser.cpp:1823 InputName: Term 3 (Beckhoff - AI4).AI Compact Channel 4.Value Bits: 16 Offset: 384 VarBitOffs: 0
RMPNetwork: (i) 00:10:40.968 EtherCAT EtherCATConfigParser.cpp:1956 OutputName: Term 1 (Beckhoff - DO8).Channel 1.Output Bits: 1 Offset: 208 VarBitOffs: 0
RMPNetwork: (i) 00:10:40.968 EtherCAT EtherCATConfigParser.cpp:1956 OutputName: Term 1 (Beckhoff - DO8).Channel 2.Output Bits: 1 Offset: 209 VarBitOffs: 1
RMPNetwork: (i) 00:10:40.969 EtherCAT EtherCATConfigParser.cpp:1956 OutputName: Term 1 (Beckhoff - DO8).Channel 3.Output Bits: 1 Offset: 210 VarBitOffs: 2
RMPNetwork: (i) 00:10:40.969 EtherCAT EtherCATConfigParser.cpp:1956 OutputName: Term 1 (Beckhoff - DO8).Channel 4.Output Bits: 1 Offset: 211 VarBitOffs: 3
RMPNetwork: (i) 00:10:40.973 EtherCAT EtherCATConfigParser.cpp:1956 OutputName: Term 1 (Beckhoff - DO8).Channel 5.Output Bits: 1 Offset: 212 VarBitOffs: 4
RMPNetwork: (i) 00:10:40.973 EtherCAT EtherCATConfigParser.cpp:1956 OutputName: Term 1 (Beckhoff - DO8).Channel 6.Output Bits: 1 Offset: 213 VarBitOffs: 5
RMPNetwork: (i) 00:10:40.974 EtherCAT EtherCATConfigParser.cpp:1956 OutputName: Term 1 (Beckhoff - DO8).Channel 7.Output Bits: 1 Offset: 214 VarBitOffs: 6
RMPNetwork: (i) 00:10:40.975 EtherCAT EtherCATConfigParser.cpp:1956 OutputName: Term 1 (Beckhoff - DO8).Channel 8.Output Bits: 1 Offset: 215 VarBitOffs: 7
RMPNetwork: (i) 00:10:41.476 EtherCAT INtimeDevice.cpp:492 hpeOpen-Probe ie1g0 found
RMPNetwork: (i) 00:10:45.193 EtherCAT INtimeDevice.cpp:536 MAC address:68-05-ca-2d-9a-de
RMPNetwork: (i) 00:10:45.193 EtherCAT INtimeDevice.cpp:547 Allocate and attach the receive buffers
RMPNetwork: (i) 00:10:46.443 EtherCAT INtimeDevice.cpp:597 Checking Ethernet PHY media status for nodes...
RMPNetwork: (i) 00:10:46.443 EtherCAT INtimeDevice.cpp:614 Interface is connected at 100Mbps
RMPNetwork: (i) 00:10:46.443 EtherCAT EthCatDr.cpp:837 EtherCAT starting with cycle period=500 [usec]
RMPNetwork: (i) 00:10:47.077 Drive RMPNetworkStarter.cpp:343 Requesting file send.
RMPNetwork: (i) 00:10:47.077 Drive RMPNetworkStarter.cpp:351 Progress (0)
RMPNetwork: (i) 00:10:47.095 Drive RMPNetworkStarter.cpp:351 Progress (0)
RMPNetwork: (i) 00:10:47.145 Drive RMPNetworkStarter.cpp:351 Progress (1)
RMPNetwork: (i) 00:10:47.195 Drive RMPNetworkStarter.cpp:351 Progress (2)
RMPNetwork: (i) 00:10:47.395 Drive RMPNetworkStarter.cpp:351 Progress (4)
RMPNetwork: (i) 00:10:47.595 Drive RMPNetworkStarter.cpp:351 Progress (5)
RMPNetwork: (i) 00:10:47.795 Drive RMPNetworkStarter.cpp:351 Progress (7)
RMPNetwork: (i) 00:10:47.995 Drive RMPNetworkStarter.cpp:351 Progress (8)
RMPNetwork: (i) 00:10:48.295 Drive RMPNetworkStarter.cpp:351 Progress (9)
RMPNetwork: (i) 00:10:48.495 Drive RMPNetworkStarter.cpp:351 Progress (11)
RMPNetwork: (i) 00:10:48.695 Drive RMPNetworkStarter.cpp:351 Progress (12)
RMPNetwork: (i) 00:10:48.895 Drive RMPNetworkStarter.cpp:351 Progress (14)
RMPNetwork: (i) 00:10:49.095 Drive RMPNetworkStarter.cpp:351 Progress (15)
RMPNetwork: (i) 00:10:49.295 Drive RMPNetworkStarter.cpp:351 Progress (17)
RMPNetwork: (i) 00:10:49.595 Drive RMPNetworkStarter.cpp:351 Progress (18)
RMPNetwork: (i) 00:10:49.795 Drive RMPNetworkStarter.cpp:351 Progress (19)
RMPNetwork: (i) 00:10:49.995 Drive RMPNetworkStarter.cpp:351 Progress (21)
RMPNetwork: (i) 00:10:50.195 Drive RMPNetworkStarter.cpp:351 Progress (22)
RMPNetwork: (i) 00:10:50.395 Drive RMPNetworkStarter.cpp:351 Progress (24)
RMPNetwork: (i) 00:10:50.595 Drive RMPNetworkStarter.cpp:351 Progress (25)
RMPNetwork: (i) 00:10:50.795 Drive RMPNetworkStarter.cpp:351 Progress (26)
RMPNetwork: (i) 00:10:51.095 Drive RMPNetworkStarter.cpp:351 Progress (28)
RMPNetwork: (i) 00:10:51.295 Drive RMPNetworkStarter.cpp:351 Progress (29)
RMPNetwork: (i) 00:10:51.495 Drive RMPNetworkStarter.cpp:351 Progress (31)
RMPNetwork: (i) 00:10:51.695 Drive RMPNetworkStarter.cpp:351 Progress (32)
RMPNetwork: (i) 00:10:51.895 Drive RMPNetworkStarter.cpp:351 Progress (34)
RMPNetwork: (i) 00:10:52.095 Drive RMPNetworkStarter.cpp:351 Progress (35)
RMPNetwork: (i) 00:10:52.395 Drive RMPNetworkStarter.cpp:351 Progress (36)
RMPNetwork: (i) 00:10:52.595 Drive RMPNetworkStarter.cpp:351 Progress (38)
RMPNetwork: (i) 00:10:52.795 Drive RMPNetworkStarter.cpp:351 Progress (39)
RMPNetwork: (i) 00:10:52.995 Drive RMPNetworkStarter.cpp:351 Progress (41)
RMPNetwork: (i) 00:10:53.195 Drive RMPNetworkStarter.cpp:351 Progress (42)
RMPNetwork: (i) 00:10:53.395 Drive RMPNetworkStarter.cpp:351 Progress (43)
RMPNetwork: (i) 00:10:53.595 Drive RMPNetworkStarter.cpp:351 Progress (45)
RMPNetwork: (i) 00:10:53.895 Drive RMPNetworkStarter.cpp:351 Progress (46)
RMPNetwork: (i) 00:10:54.095 Drive RMPNetworkStarter.cpp:351 Progress (48)
RMPNetwork: (i) 00:10:54.295 Drive RMPNetworkStarter.cpp:351 Progress (49)
RMPNetwork: (i) 00:10:54.495 Drive RMPNetworkStarter.cpp:351 Progress (51)
RMPNetwork: (i) 00:10:54.695 Drive RMPNetworkStarter.cpp:351 Progress (52)
RMPNetwork: (i) 00:10:54.895 Drive RMPNetworkStarter.cpp:351 Progress (53)
RMPNetwork: (i) 00:10:55.195 Drive RMPNetworkStarter.cpp:351 Progress (55)
RMPNetwork: (i) 00:10:55.395 Drive RMPNetworkStarter.cpp:351 Progress (56)
RMPNetwork: (i) 00:10:55.595 Drive RMPNetworkStarter.cpp:351 Progress (58)
RMPNetwork: (i) 00:10:55.795 Drive RMPNetworkStarter.cpp:351 Progress (59)
RMPNetwork: (i) 00:10:55.995 Drive RMPNetworkStarter.cpp:351 Progress (60)
RMPNetwork: (i) 00:10:56.195 Drive RMPNetworkStarter.cpp:351 Progress (62)
RMPNetwork: (i) 00:10:56.395 Drive RMPNetworkStarter.cpp:351 Progress (63)
RMPNetwork: (i) 00:10:56.695 Drive RMPNetworkStarter.cpp:351 Progress (65)
RMPNetwork: (i) 00:10:56.895 Drive RMPNetworkStarter.cpp:351 Progress (66)
RMPNetwork: (i) 00:10:57.095 Drive RMPNetworkStarter.cpp:351 Progress (68)
RMPNetwork: (i) 00:10:57.295 Drive RMPNetworkStarter.cpp:351 Progress (69)
RMPNetwork: (i) 00:10:57.495 Drive RMPNetworkStarter.cpp:351 Progress (70)
RMPNetwork: (i) 00:10:57.695 Drive RMPNetworkStarter.cpp:351 Progress (72)
RMPNetwork: (i) 00:10:57.995 Drive RMPNetworkStarter.cpp:351 Progress (73)
RMPNetwork: (i) 00:10:58.195 Drive RMPNetworkStarter.cpp:351 Progress (75)
RMPNetwork: (i) 00:10:58.395 Drive RMPNetworkStarter.cpp:351 Progress (76)
RMPNetwork: (i) 00:10:58.595 Drive RMPNetworkStarter.cpp:351 Progress (77)
RMPNetwork: (i) 00:10:58.795 Drive RMPNetworkStarter.cpp:351 Progress (79)
RMPNetwork: (i) 00:10:58.995 Drive RMPNetworkStarter.cpp:351 Progress (80)
RMPNetwork: (i) 00:10:59.295 Drive RMPNetworkStarter.cpp:351 Progress (82)
RMPNetwork: (i) 00:10:59.495 Drive RMPNetworkStarter.cpp:351 Progress (83)
RMPNetwork: (i) 00:10:59.695 Drive RMPNetworkStarter.cpp:351 Progress (85)
RMPNetwork: (i) 00:10:59.895 Drive RMPNetworkStarter.cpp:351 Progress (86)
RMPNetwork: (i) 00:11:00.095 Drive RMPNetworkStarter.cpp:351 Progress (87)
RMPNetwork: (i) 00:11:00.295 Drive RMPNetworkStarter.cpp:351 Progress (89)
RMPNetwork: (i) 00:11:00.495 Drive RMPNetworkStarter.cpp:351 Progress (90)
RMPNetwork: (i) 00:11:00.795 Drive RMPNetworkStarter.cpp:351 Progress (92)
RMPNetwork: (i) 00:11:00.945 Drive RMPNetworkStarter.cpp:351 Progress (93)
RMPNetwork: (i) 00:11:00.995 Drive RMPNetworkStarter.cpp:351 Progress (94)
RMPNetwork: (i) 00:11:01.045 Drive RMPNetworkStarter.cpp:351 Progress (96)
RMPNetwork: (i) 00:11:01.095 Drive RMPNetworkStarter.cpp:351 Progress (97)
RMPNetwork: (i) 00:11:01.145 Drive RMPNetworkStarter.cpp:351 Progress (99)
RMPNetwork: (i) 00:11:01.320 Drive RMPNetworkStarter.cpp:343 File transfer complete.
RMPNetwork: (i) 00:11:01.320 Drive RMPNetworkStarter.cpp:351 Progress (100)
RMPNetwork: (i) 00:11:02.070 Drive RMPNetworkStarter.cpp:313 FoE Download Complete.
RMPNetwork: (i) 00:11:02.082 EtherCAT RMPNetworkFirmware.cpp:1486 Node #(0) : AL Status (0x0), Code (0x0)
RMPNetwork: (i) 00:11:02.082 EtherCAT RMPNetworkFirmware.cpp:1486 Node #(1) : AL Status (0x0), Code (0x0)
RMPNetwork: (i) 00:11:02.082 EtherCAT RMPNetworkFirmware.cpp:1486 Node #(2) : AL Status (0x0), Code (0x0)
RMPNetwork: (i) 00:11:02.082 EtherCAT RMPNetworkFirmware.cpp:1486 Node #(3) : AL Status (0x0), Code (0x0)
RMPNetwork: (i) 00:11:03.332 EtherCAT EthCatDr.cpp:981 MKEtherCATDriver::Stopping
RMPNetwork: (i) 00:11:04.582 EtherCAT EthCatDr.cpp:1119 MKEtherCATDriver::Clear
RMPNetwork: /!\ 00:11:05.832 EtherCAT EthCatDr.cpp:3865 --> Close driver
RMPNetwork: (i) 00:11:05.832 Controller MKBusBaseDriver.cpp:98 Driver EtherCATDriver closed
Warning
It is possible to destroy a node by downloading garbage data or interrupting this process. Be wary when using this feature.
Note
ETG1000 _5 (AL Services) & _6 (ALProtocols) contain additional information about FoE standards and operation.