FSoE frame structure explained by examples

One byte of safety data: The simplest safety PDU

This contains just one safety data instance, consisting of only one byte

OffsetSizeNameDescription
01 byteCommandCommand
11 byteSafeData[0]safety data, octet 0
22 byteCRC_016-bit CRC
42 byteConn_Idunique connection ID

All multi-byte fields are stored in little endian.

FSoEShortestSafetyPDU.h
struct __attribute__((packed)) FSoEShortestSafetyPDU {
    uint8_t Command;
    uint8_t SafeData_0;
    uint16_t CRC_0;
    uint16_t Conn_Id;
};

Two bytes of safety data

OffsetSizeNameDescription
01 byteCommandCommand
11 byteSafeData[0]safety data, octet 0
21 byteSafeData[1]safety data, octet 1
32 byteCRC_016-bit CRC
52 byteConn_Idunique connection ID

All multi-byte fields are stored in little endian.

FSoETwoByteSafeDataPDU.h
struct __attribute__((packed)) FSoETwoByteSafeDataPDU {
    uint8_t Command;
    uint8_t SafeData_0;
    uint8_t SafeData_1;
    uint16_t CRC_0;
    uint16_t Conn_Id;
};

Four bytes of safety data

OffsetSizeNameDescription
01 byteCommandCommand
11 byteSafeData[0]safety data, octet 0
21 byteSafeData[1]safety data, octet 1
32 byteCRC_016-bit CRC 0
51 byteSafeData[2]safety data, octet 2
61 byteSafeData[3]safety data, octet 3
72 byteCRC_116-bit CRC 1
92 byteConn_Idunique connection ID

All multi-byte fields are stored in little endian.

FSoEFourByteSafeDataPDU.h
struct __attribute__((packed)) FSoEFourByteSafeDataPDU {
    uint8_t Command;
    uint8_t SafeData_0;
    uint8_t SafeData_1;
    uint16_t CRC_0;
    uint8_t SafeData_2;
    uint8_t SafeData_3;
    uint16_t CRC_1;
    uint16_t Conn_Id;
};

Source: ETG.5100 S (D) V1.2.0, Table 4: Shortest safety PDU and Table 3: General Safety PDU, available on request from the EtherCAT Technology Group (ETG)


Check out similar posts by category: FSoE, EtherCAT, Safety