Skip to content

CAN2.0A to FTSCS1.0 Protocol

This page is a transcription of the official《CAN2.0A转FTSCS1.0 协议》(CAN2.0A to FTSCS1.0 Protocol) document. FTSCS1.0 is the FT-SCS custom protocol (instruction frame and status frame structure) shared by all families in Bus Protocol; see FT-SCS Protocol. For the memory tables of each family, see Memory Table Parameters.

1. Protocol overview

This protocol is based on the CAN2.0A standard data frame: custom communication instructions are converted into the FTSCS1.0 custom protocol, so that all FEETECH custom-protocol bus servos can work together with CAN bus devices.

Communication uses CAN2.0A standard data frames. The factory default CAN baud rate is 1M, configurable in the range 100K~1M. The factory default CAN station number is 1; the CAN baud rate and the station address can both be set through CAN instructions. Since the FTSCS1.0 protocol is based on 485/TTL, the CAN converter must follow a strict question-answer communication rule, otherwise data conflicts may occur on the 485/TTL bus.

This conversion protocol must be used together with a specific FEETECH conversion module (such as the CAN2.0A-to-TTL single-bus module) to achieve the communication conversion function.

2. CAN2.0A frame format

CAN-ID DLC Data1 Data2 ... Data n
11-bit CAN-ID Data length, range 0~8 1 byte per data field, n<=8

CAN-ID structure:

CAN-ID BIT10 ... BIT6 BIT5 ... BIT0
CAN instruction code CAN station address
  • BIT5 ~ BIT0: CAN station number, range 0~63, where 0 is the broadcast address and 1~63 are unicast addresses
  • BIT10 ~ BIT6: CAN instruction code, indicating the function of the CAN message to be sent

CAN instruction codes:

Instruction code Function CAN-ID Description
0x01 Memory table read instruction 0x080+CAN station number
0x02 Memory table write instruction 0x100+CAN station number
0x03 Position control instruction 0x180+CAN station number
0x04 Synchronous read instruction 0x200+CAN station number
0x05 Asynchronous control instruction 0x280+CAN station number
0x06 Asynchronous action instruction 0x300+CAN station number
0x07 Synchronous control instruction 0x380+CAN station number
0x08 Synchronous action instruction 0x400+CAN station number
0x09 Servo reply instruction 0x480+CAN station number Used to carry the servo reply data
0x0A CAN configuration instruction 0x500+CAN station number
0x0B Servo calibration instruction 0x580+CAN station number

2.1 Memory table read instruction (0x01)

The memory table read instruction reads the servo memory table; at most 6 bytes can be read per instruction.

CAN-ID DLC Data
Send 0x080+CAN station number 3 Servo ID (1 byte), memory table address (1 byte), memory table length N (1 byte, N<=6)
Reply 0x480+CAN station number N+2 Servo ID (1 byte), servo status (1 byte), memory table data 1 (1 byte) ... memory table data N (1 byte)

2.2 Memory table write instruction (0x02)

The memory table write instruction writes data to the servo memory table; at most 6 bytes can be written per instruction.

CAN-ID DLC Data
Send 0x100+CAN station number N+2 Servo ID (1 byte), memory table address (1 byte), memory table data 1 (1 byte) ... memory table data N (1 byte, N<=6)
Reply 0x480+CAN station number 2 Servo ID (1 byte), servo status (1 byte)

2.3 Position control instruction (0x03)

The position control instruction controls the servo position. The input instruction includes: servo ID (1 byte), position (2 bytes), acceleration (1 byte), speed (2 bytes) and running current (2 bytes).

CAN-ID DLC Data
Send 0x180+CAN station number 8 Servo ID (1 byte), target position (2 bytes), running acceleration (1 byte), running speed (2 bytes), running current (2 bytes)
Reply 0x480+CAN station number 2 Servo ID (1 byte), servo status (1 byte)

2.4 Synchronous read instruction (0x04)

The synchronous read instruction can read the memory table data of up to 6 servos at the same time.

CAN-ID DLC Data
Send 0x200+CAN station number n+2 Memory table address (1 byte), memory table length N (1 byte, N<=6), servo ID1 (1 byte) ... servo IDn (1 byte, n<=6)
Reply 0x480+CAN station number N+2 Servo ID (1 byte), servo status (1 byte), memory table data 1 (1 byte) ... memory table data N (1 byte)

2.5 Asynchronous control instruction (0x05)

The asynchronous control instruction controls the servo position asynchronously. The input instruction includes: servo ID (1 byte), the input instruction includes position (2 bytes), acceleration (1 byte), speed (2 bytes) and running current (2 bytes).

CAN-ID DLC Data
Send 0x280+CAN station number 8 Servo ID (1 byte), target position (2 bytes), running acceleration (1 byte), running speed (2 bytes), running current (2 bytes)
Reply 0x480+CAN station number 2 Servo ID (1 byte), servo status (1 byte)

2.6 Asynchronous action instruction (0x06)

The asynchronous action instruction executes the buffered asynchronous control instructions.

CAN-ID DLC Data
Send 0x300+CAN station number 0 None

2.7 Synchronous control instruction (0x07)

The synchronous control instruction controls the servo position synchronously. The input instruction includes: servo ID (1 byte), the input instruction includes position (2 bytes), acceleration (1 byte), speed (2 bytes) and running current (2 bytes). The input instruction is first buffered in the CAN converter; after the synchronous action instruction is received, it is converted into the servo synchronous control instruction and output.

CAN-ID DLC Data
Send 0x380+CAN station number 8 Servo ID (1 byte), target position (2 bytes), running acceleration (1 byte), running speed (2 bytes), running current (2 bytes)

2.8 Synchronous action instruction (0x08)

After the CAN converter receives the synchronous action, it converts the buffered synchronous control instructions into the servo synchronous control instruction and outputs it.

Action instruction:

CAN-ID DLC Data
Send 0x400+CAN station number 0 None

Clear instruction:

CAN-ID DLC Data
Send 0x400+CAN station number 1 0

Query instruction:

CAN-ID DLC Data
Send 0x400+CAN station number 1 1
Reply 0x400+CAN station number 1 Number of buffered instructions (1 byte)

2.9 CAN configuration instruction (0x0A)

CAN configuration instruction:

CAN-ID DLC Data
Send 0x500+CAN station number 3 CAN baud rate (1 byte), CAN station number (1 byte), servo baud rate (1 byte)
Reply 0x500+CAN station number 8 Baud rate (1 byte), CAN station number (1 byte), servo baud rate (1 byte), reserved (1 byte), firmware version (1 byte), firmware release year (1 byte), firmware distribution month (1 byte), firmware release day (1 byte)
  • CAN station number: 1~63
  • Servo baud rate: 0~3, 0 means 1M, 1 means 500k, 2 means 250k, 3 means 115200
  • CAN baud rate: 0~3, 0 means 1M, 1 means 500k, 2 means 250k, 3 means 100k

Return CAN configuration information:

CAN-ID DLC Data
Send 0x500+CAN station number 0 None
Reply 0x500+CAN station number 8 Baud rate (1 byte), CAN station number (1 byte), servo baud rate (1 byte), reserved (1 byte), firmware version (1 byte), firmware release year (1 byte), firmware distribution month (1 byte), firmware release day (1 byte)

Note: configuration changes take effect after a restart

2.10 Servo calibration instruction (0x0B)

Recalibrate the current position to the set value:

CAN-ID DLC Data
Send 0x580+CAN station number 3 Servo ID (1 byte), calibration position (2 bytes)
Reply 0x480+CAN station number 2 Servo ID (1 byte), servo status (1 byte)

Calibrate the current position to the midpoint:

CAN-ID DLC Data
Send 0x580+CAN station number 1 Servo ID (1 byte)
Reply 0x480+CAN station number 2 Servo ID (1 byte), servo status (1 byte)