BrainCo-Revo2Slave EtherCAT Communication Protocol Document
1.Equipment basic information
| Project | Content |
|---|---|
| Device name | BrainCo-Revo2Slave |
| Vendor Name | BrainCo |
| Vendor ID | 0x00BC0000 |
| Product Code | 0x00009252 |
| Revision No | 0x00000001 |
- Specific object dictionary configuration
2.Synchronization Manager and PDO Mapping
2.1 Synchronization Manager Configuration
| SM Index | Function | Corresponding PDO Index |
|---|---|---|
| SM2 (0x1C12) | Master → Slave Output | 0x1600 |
| SM3 (0x1C13) | Slave → Master Input | 0x1A00 |
2.2 RxPDO(0x1600)
| Subindex | Objects | Description |
|---|---|---|
| 0x01 | 0x7000:01 | Multiple finger control modes |
| 0x02 | 0x7000:02 | Multiple finger control parameters1(6xINT16) |
| 0x03 | 0x7000:03 | Multiple finger control parameters2(6xUINT16) |
| 0x04 | 0x7010:01 | Single finger control mode |
| 0x05 | 0x7010:02 | Single finger target joint ID |
| 0x06 | 0x7010:03 | Single finger control parameter1(INT16) |
| 0x07 | 0x7010:04 | Single finger control parameter2(UINT16) |
Control mode definition
# define CTRL_MODE_POS_TIME 0x01 // Position + Time control
# define CTRL_MODE_POS_SPD 0x02 // Position + Speed control
# define CTRL_MODE_SPD 0x03 // Speed control
# define CTRL_MODE_CURRENT 0x04 // Current control
# define CTRL_MODE_PWM 0x05 // PWM duty cycleTarget Joint ID Definition
typedef enum {
// 拇指尖部
THUMB_FLEX,
// 拇指根部
THUMB_ABDUCT,
// 食指
INDEX_FINGER,
// 中指
MIDDLE_FINGER,
// 无名指
RING_FINGER,
// 小指
PINKY
} finger_index_t;2.3 Finger TxPDO(0x1A00)
| Subindex | Objects | Description |
|---|---|---|
| 0x01 | 0x6000:01 | Joint position(6xUINT16) |
| 0x02 | 0x6000:02 | Joint speed(6xINT16) |
| 0x03 | 0x6000:03 | Joint current(6xINT16) |
| 0x04 | 0x6000:04 | Joint status(6xUINT16) |
- Position of 6 finger motors(Pos) → UINT16 ×6
- Speed of 6 finger motors(Spd) → INT16 ×6
- Current of 6 finger motors(Cur) → INT16 ×6
- Status of 6 finger motors(State) → UINT16 ×6
- Total:12 + 12 + 12 + 12 = 48 Byte data, main station can be directly mapped to variable usage.
2.4 Capacitive Tactile TxPDO Dictionary(0x6010)
| Index | Sub-index | Field Name | Type | Quantity | Description |
|---|---|---|---|---|---|
| 0x6010 | 0x01 | force_normal | UINT16 | 5 | Normal force |
| 0x6010 | 0x02 | force_tangential | UINT16 | 5 | Tangential force |
| 0x6010 | 0x03 | force_direction | UINT16) | 5 | Direction of tangential force |
| 0x6010 | 0x04 | proximity | UINT32 | 5 | Approaching consciousness |
| 0x6010 | 0x05 | touch_status | UINT16 | 5 | Tactile state |
Normal force of five fingers(force_normal) → UINT16 ×5
Tangential force of five fingers(force_tangential) → INT16 ×5
Tangential force direction of five fingers(force_direction) → INT16 ×5
The five fingers are close to sensing.(proximity) → UINT32 ×5
Tactile state of five fingers(touch_status)→ UINT16 ×5 Total:10 + 10 + 10 + 20 + 10 = 60 Byte data, main station can be directly mapped to variable usage.。
The normal force and tangential force are 16-bit unsigned data. The unit is 100 * N. For example, a tangential force of 1000 represents 1000 / 100 N, which is 10 N. The measurement range for the normal force and tangential force is 0 ~ 25 N.
The direction of the tangential force is 16-bit unsigned data. The unit is degrees, with a range of 0 to 359 degrees. The direction near the fingertip is 0 degrees, increasing clockwise up to a maximum of 359 degrees. A value of 65535 (0xFFFF) indicates that the tangential force direction is invalid.
The approximate value is a 32-bit unsigned data.
The tactile status register is 16 bits, with the high and low bytes representing different status information:
High byte: Used to represent the packet sequence number for internal sensor data updates. If the value of this byte increases or changes, it indicates that the sensor output data has been updated.
Low byte: used to indicate the current status of the sensor, with each bit defined as follows:
- bit2:Trigger time out
- bit1:The original value has not been updated
- bit0:Invalid original value
3.Configuration parameter dictionary(Object 0x8000)
3.1 General configuration fields
| Subindex | Parameter Name | Type | Description |
|---|---|---|---|
| 0x01 | hand_type | UINT8(WR) | 0=left hand,1=right hand |
| 0x02 | led_switch | UINT8(WR) | Back of hand light switch |
| 0x03 | buzzer_switch | UINT8(WR) | Buzzer switch |
| 0x04 | vibrator_switch | UINT8(WR) | Vibrating motor switch |
| 0x05 | unit_mode | UINT8(WR) | 0=Dimensionless, 1=Physical unit |
| 0x06 | pos_calibration | UINT8 (WO) | Manual position calibration |
| 0x07 | auto_calibration | UINT8(WR) | Automatic calibration on startup |
| 0x08 | turbo_mode | UINT8(WR) | Turbo |
| 0x09 | turbo_param[0] ,turbo_param[1] | 2XUINT16(WR) | Turbo |
3.2 Current field for protecting each joint
| Subindex | Parameter Name | Type | Description |
|---|---|---|---|
| 0x0A | thumb_flex_pro_cur | UINT16(WR) | Thumb flex protects current |
| 0x0B | thumb_aux_pro_cur | UINT16(WR) | Thumb abduct protection current |
| 0x0C | index_pro_cur | UINT16(WR) | Index finger protection current |
| 0x0D | mid_pro_cur | UINT16(WR) | Middle finger protection current |
| 0x0E | ring_pro_cur | UINT16(WR) | Ring finger protective current |
| 0x0F | pink_pro_cur | UINT16(WR) | Little finger protection current |
| 0x10 | thumb_aux_lock_cur | UINT16(WR) | Thumb abduct joint locking current |
3.3 Firmware information field
| Subindex | Parameter Name | Type | Description |
|---|---|---|---|
| 0x11 | ctrl_wrist_fw_version | STRING(20)(RO) | Control board firmware version (string: high.mid.low) |
| 0x12 | ctrl_sn | STRING(18)(WR) | Control panel device serial number(SN) |
| 0x13 | wrist_fw_version | STRING(20)(RO) | Wristband firmware version (string: high, medium, low) |
| 0x14 | wrist_sn | STRING(18)(WR) | Wrist brace device serial number(SN) |
| 0x15 | foe_file_type | UINT8(WO) | FoE File type identifier: 1=Wrist board, 2=Control board |
| 0x16 | foe_auth_code | STRING(8)(WO) | FoE Document authentication code |
4.Tactile SDO Parameter Dictionary(Object 0x8010)
| Index | Sub-index | Field Name | Type | Length | Description |
|---|---|---|---|---|---|
| 0x8010 | 1 | thumb_calibration | uint8(WO) | 1 | Thumb Calibration |
| 0x8010 | 2 | index_calibration | uint8(WO) | 1 | Index finger calibration |
| 0x8010 | 3 | mid_calibration | uint8(WO) | 1 | Middle Finger Calibration |
| 0x8010 | 4 | ring_calibration | uint8(WO) | 1 | Ring Finger Calibration |
| 0x8010 | 5 | pinky_calibration | uint8(WO) | 1 | Pinky Calibration |
| 0x8010 | 6 | touch_vendor | uint8(RO) | 1 | Tactile manufacturer(1:Capacitive 2:pressure-sensitive) |
| 0x8010 | 7 | thumb_acq_param_update | uint8(WO) | 1 | Thumb channel value adjustment |
| 0x8010 | 8 | index_acq_param_update | uint8(WO) | 1 | Index finger channel value adjustment |
| 0x8010 | 9 | mid_acq_param_update | uint8(WO) | 1 | Middle finger channel value adjustment |
| 0x8010 | 10 | ring_acq_param_update | uint8(WO) | 1 | Ring finger channel value adjustment |
| 0x8010 | 11 | prink_acq_param_update | uint8(WO) | 1 | Little finger channel value adjustment |
| 0x8010 | 12 | reserved1 | uint8(RO) | 1 | Reserved |
| 0x8010 | 13 | thumb_touch_fw_version | string(RO) | 20 | Thumb tactile firmware version |
| 0x8010 | 14 | index_touch_fw_version | string(RO) | 20 | Index Finger tactile Firmware Version |
| 0x8010 | 15 | mid_touch_fw_version | string(RO) | 20 | Middle finger tactile firmware version |
| 0x8010 | 16 | ring_touch_fw_version | string(RO) | 20 | Ring finger tactile firmware version |
| 0x8010 | 17 | pink_touch_fw_version | string(RO) | 20 | Pinky Finger Tactile Firmware Version |
5.Control mode and parameter description
The dexterous hand control protocol supports individual or joint control of 6 fingers. The control methods support various modes such as position, speed, current, and PWM duty cycle, adapting to both percentage mode and physical quantity mode. The symbols represent direction (positive for finger bending direction, negative for finger straightening direction).
5.1 Control mode number (suitable for single/multi-finger control)
| Control Mode Number | Mode Name | param1 Description | param2 Description |
|---|---|---|---|
| 0x01 | Position + Time control | Target position | Exercise time(ms) |
| 0x02 | Position + Speed control | Target position | Movement speed |
| 0x03 | Speed Control | Target Speed | None |
| 0x04 | Current Control | Target Current | None |
| 0x05 | PWM Duty Cycle Control | PWM Ratio | None |
5.2 PWM Control Instructions
- The PWM duty cycle is a unitless ratio, range -1000 ~ +1000
5.3 Unit mode explanation
a)Percentage mode(unit_mode = 0)
| Parameter | Meaning | Range |
|---|---|---|
| Position | Percentage of itinerary | 0 ~ 1000 |
| Speed | Percentage of maximum speed | -1000 ~ 1000 |
| Current | Percentage of maximum current (1000mA) | -1000 ~ 1000 |
b)Physical quantity mode(unit_mode = 1)
| Parameter | Meaning | Unit |
|---|---|---|
| Location | Finger angle position | ° |
| Speed | Finger angular velocity | °/s |
| Current | Actual motor control current | mA |
5.4 Difference between multi-finger control and single-finger control
| Type | Address Area | Control Mode Field | Control Parameter Structure |
|---|---|---|---|
| Multi finger control | RxPDO 0x7000 | mult_finger_ctrl_mode | param1[6] + param2[6] |
| Single finger control | RxPDO 0x7010 | finger_ctrl_mode | finger_id + param1 + param2 |
- Multi-finger control sets the target for all 6 fingers at once
- Single-finger control is used for precise adjustments or debugging of a single finger
6. FoE Firmware Upgrade Protocol Description
Revo 2 Pro and Touch version of the dexterous hand support firmware upgrades via the EtherCAT FoE (File over EtherCAT) protocol, suitable for the independent upgrade needs of the wrist board and control board.
6.1 Upgrade type and certification information
| Upgrade Type | File Name | Upgrade Authentication Code |
|---|---|---|
| Wrist board firmware | Revo2EC_x.x.x_$time.bin | BRCW2025 |
| Control board firmware | Revo2_Vx.x.x_$time.bin | BRCC2025 |
6.2 FoE Upgrade process
The complete process of upgrading FoE includes four steps: certification, document type specification, firmware transfer, and writing.:
1. Main station writes in the upgrade type and authentication code
- SDO 0x8000:0x15 Write upgrade type(1=wrist board,2=Control board)
- SDO 0x8000:0x16 Write in the authentication code(such as"BRCW2025")
2. The main station sends the firmware file through FoE.
- The file name must match the agreed value.(such as Revo2EC_0.0.1_2506231346.bin)
3. Receiving and Verifying from the Station
- Check if the authentication code matches
- Write to the corresponding Flash area
4. Upgrade Completed
- It is recommended that the master station reset the device or the system to rescan
6.3 Precautions
- Filename is case-sensitive and must match exactly
- PDO communication will be interrupted during the slave write process
- The device will automatically restart with the new firmware after upgrading
- It is recommended to restart the EtherCAT bus after the upgrade is complete
6.4 Upgrade timing diagram
6.5 Firmware file header structure
To ensure the legality and version identification of the firmware upgrade files.,All .bin files upgraded through FoE,The following header structure has been automatically added by the packaging tool.(A total of 16 bytes):
| Field Name | Length | Description |
|---|---|---|
| Magic Number | 8 bytes | Fixed identifier used to identify device type: wrist board → "BRCW2025" Control panel → "BRCC2025" |
| Firmware Version | 4 bytes | The structure of the firmware version number is as follows: The highest byte is a reserved field.(0x00), The last three bytes correspond to the major version number.(Major)、 Minor version number(Minor)、Revision number(Patch)。 For example, the version number 1.2.3 Represented as:0x00010203 |
| Reserved field | 4 bytes | Reserved field, currently 0x00, reserved for future expansion. |
This structure is automatically written to the file header by the packaging tool, and users do not need to add it manually, nor should they modify it.
** Upgrade Verification Logic**
- After the FoE file is received, first check if the Magic Number matches the current upgrade type;
- If it does not match, the upgrade is rejected; if it matches, proceed to the burning process.
- The firmware header data is used for upgrade determination and will not be written into the Flash application area.