Edit on GitHub

개요

다이나믹셀을 제어하기 위해서는 다이나믹셀의 프로토콜에 맞추어 통신을 해야 합니다.
다이나믹셀은 binary 형태의 데이터를 받아 구동됩니다. 이러한 데이터를 전송하기 위한 프로그램 예제는 다이나믹셀 전용 Controller 또는 USB2DYNAMIXEL, U2D2 의 사용자 설명서에 자세히 기술되어 있습니다. 따라서 본 다이나믹셀의 사용자 설명서에서는 Main controller 가binary 형태의 데이터를 전송할 수 있다는 가정하에 다이나믹셀에서 사용하는 통신 방식에 대한 설명과 통신 프로토콜에 대한 설명만을 기술하였습니다

참고: 다이나믹셀 프로토콜 호환표 참고.

참고: MX(2.0)은 프로토콜 2.0을 지원하는 MX 시리즈의 별도 펌웨어를 의미함. DYNAMIXEL Wizard2.0의 펌웨어 복구 기능을 활용하여 MX(2.0) 펌웨어로 업그레이드 가능.

Packet

Main Controller와 다이나믹셀은 Packet이라고 불리는 데이터를 주고 받으며 통신합니다. Packet에는 두 가지 종류가 있습니다. Main Controller가 다이나믹셀을 제어하기 위해 전송하는 Instruction Packet과 다이나믹셀이 Main Controller로 답변하는 Status Packet이 그것입니다.

ID

ID는 한 개의 버스에 여러 개의 다이나믹셀이 연결되었을 때 각각의 다이나믹셀들을 구별하기 위해 만든 고유 번호입니다. Instruction Packet과 Status Packet에 ID를 넣음으로써 Main Controller는 제어하고자 하는 다이나믹셀만을 제어할 수 있습니다.

DYNAMIXEL Protocol

다이나믹셀은 8 bit, 1 Stop bit, None Parity의 Asynchronous Serial 통신을 합니다.

만약 같은 ID 를 가진 다이나믹셀이 연결되었을 경우 Packet 충돌이 일어나서 통신에 문제를 일으키게 됩니다. 그러므로 ID가 같은 다이나믹셀이 존재하지 않도록 ID설정을 해야 합니다. ID 설정을 위해서는, 다이나믹셀 위자드 2.0에서 컨트롤 테이블을 참고 하세요.

참고 : 다이나믹셀은 공장출하시, 초기 ID는 1번 입니다.

Half Duplex

Half Duplex란 TxD, RxD를 하나의 선으로 공유하는 통신 방식으로 다이나믹셀은 Half Duplex 방식을 사용하고 있습니다. 보통 하나의 BUS에 여러 개의 통신 장치를 연결할 경우에 사용합니다. 여러 개의 장치가 송신하는 동안 그 외의 다른 모든 장치들은 입력 상태이어야 하기 때문에 통신 방향을 제어하는 Direction Port가 필요합니다. 다이나믹셀을 제어하는 Main Controller는 통신 방향을 입력으로 설정해 놓고 있다가 Instructon Packet을 전송하는 동안만 통신 방향을 출력으로 설정해야 합니다.

Tx, Rx Direction

Half Duplex 통신 방식을 사용하기 위해 필요한 제어 방법입니다. RS485 UART 에서는 송신이 끝나는 Timing 을 잘 맞춰서 Direction 을 수신 Mode 로 바꾸어야 합니다. CPU 에서는 일반적으로 UART_STATUS 를 표시해주는 REGISTER 내에 다음과 같은 의미의 BIT 가 있습니다.

TXD_BUFFER_READY_BIT 의 경우는 Serial 통신에서 한 Byte 를 송신할 때 사용되며 그 예는 다음과 같습니다.

TxDByte(byte bData)
{
  while(!TXD_BUFFER_READY_BIT); //wait until data can be loaded.
  SerialTxDBuffer = bData; //data load to TxD buffer
}

Direction을 전환하는 시점에서는 TXD_SHIFT_REGISTER_EMPTY_BIT를 확인해야 합니다. 다음은 Instruction packet을 전송하는 예제 프로그램입니다.

1  DIRECTION_PORT = TX_DIRECTION;
2  TxDByte(0xff);
3  TxDByte(0xff);
4  TxDByte(0xfd);
5  TxDByte(0x00);
6  TxDByte(bID);
7  TxDByte(bLengthLow);
8  TxDByte(bLengthHigh);
9  TxDByte(bInstruction);
10  TxDByte(Parameter0); TxDByte(Parameter1); ...
11  TxDByte(bCrcLow);
12  DisableInterrupt(); // interrupt should be disable
13  TxDByte(bCrcHigh);  // last TxD
14  while(!TXD_SHIFT_REGISTER_EMPTY_BIT); // Wait till last data bit has been sent
15  DIRECTION_PORT = RX_DIRECTION; // Direction change to RXD
16  EnableInterrupt(); // enable interrupt again

주의: 주의할 부분은 LINE 12부터 LINE 16입니다. LINE 12이 필요한 이유는 그 시점에서 Interrupt 가 발생하여 Return Delay Time 보다 긴 시간 동안 Interrupt routine이 수행될 경우 Status Packet의 앞부분이 손상되기 때문입니다.

Byte to Byte Time

Instruction Packet을 전송할 때 Byte와 Byte사이의 Delay Time을 의미하는데, 이 시간이 1.5 msec가 넘을 경우 다이나믹셀은 전송 장애가 발생한 것으로 간주하고, 다시 Packet의 header(0xff 0xff 0xfd)를 기다립니다

Instruction Packet

Instruction Packet은 Main Controller가 장치(Device)로 보내는 명령 패킷.

Header 1 Header 2 Header 3 Reserved Packet ID Length 1 Length 2 Instruction Param Param Param CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 Packet ID Len_L Len_H Instruction Param 1 Param N CRC_L CRC_H

Packet의 시작을 나타내는 신호.

Reserved

0x00으로 사용하며(0XFD는 사용할수 없음) Header와 동일한 기능을 함.

예를 들어, 다이나믹셀 위자드 2.0패킷 상세 정보에서, Reserved는 Header에 포함되어 사용.

다이나믹셀 위자드 2.0 패킷 상세정보

Packet ID

Instruction Packet을 받아 처리해야 할 장치의 ID를 나타내는 필드.

  1. 범위 : 0 ~ 252 (0x00 ~ 0xFC) 까지 253 개 사용 가능
  2. Broadcast ID : 254 (0xFE), 연결된 모든 장치가 Instruction Packet 을 실행하도록 함.

주의: Broadcast ID(254 (0xFE))는 Ping, Sync ReadBulk Read 에만 Status Packet을 반환하며, 그 외 Instruction에는 Status Packet을 반환하지 않음.

Length

Packet의 길이를 나타냄.

  1. 하위 바이트와 상위 바이트를 Instruction Packet에서 나누어서 보냄.
  2. Length는 Instruction, Parameter, CRC 필드의 Byte Size를 나타내는 필드

Instruction

Packet의 용도를 정의하는 필드

명령 설명
0x01 Ping Packet ID와 동일한 ID를 가지는 장치에 Packet이 도달했는지 여부 확인을 위한 Instruction
0x02 Read 장치로부터 데이터를 읽어오기 위한 Instruction
0x03 Write 장치에 데이터를 쓰기 위한 Instruction
0x04 Reg Write Instruction Packet을 대기 상태로 등록하는 Instruction, Action 명령에 의해 실행됨
0x05 Action Reg Write 로 미리 등록한 Packet을 실행하는 Instruction
0x06 Factory Reset Control Table을 공장 출하 상태의 기본값으로 되돌리는 Instruction
0x08 Reboot 장치를 재부팅 시키는 Instruction
0x10 Clear 장치의 특정 상태를 해제하는 Instruction
0x20 Control Table Backup Control Table을 Backup 또는 복구하기 위한 Instruction
0x55 Status(Return) Instruction Packet에 대한 Return packet
0x82 Sync Read 다수의 장치에 대해서, 동일한 Address에서 동일한 길이의 데이터를 한 번에 읽기 위한 Instruction
0x83 Sync Write 다수의 장치에 대해서, 동일한 Address에 동일한 길이의 데이터를 한 번에 쓰기 위한 Instruction
0x8A Fast Sync Read 다수의 장치에 대해서, 동안한 Address에서 동인한 길이의 데이터를 한 번에 읽기 위한 Instruction
0x92 Bulk Read 다수의 장치에 대해서, 서로 다른 Address에서 서로 다른 길이의 데이터를 한 번에 읽기 위한 Instruction
0x93 Bulk Write 다수의 장치에 대해서, 서로 다른 Address에 서로 다른 길이의 데이터를 한번에 쓰기 위한 Instruction
0x9A Fast Bulk Read 다수의 장치에 대해서, 서로 다른 Address에서 서로 다른 길이의 데이터를 한 번에 읽기 위한 Instruction

Parameters

  1. Instruction의 보조 데이터 필드로써, Instruction 별로 용도가 다름.
  2. 음수 데이터의 표현 방법 : 제품별로 차이가 있으므로, 해당 제품의 e-Manual을 참고 할 것.

CRC

Packet이 통신 중에 파손되었는지를 점검하기 위한 필드 (16bit CRC)

  1. 하위 바이트와 상위 바이트를 Instruction Packet에서 나누어서 보냄.
  2. CRC 계산 범위: Instruction Packet의 Header (FF FF FD 00)를 포함하여, CRC 필드 이전까지.
  3. CRC 계산 방법 및 예제 : CRC Calculation

Status Packet

Status Packet은 장치(Device)가 Main Controller로 보내는 응답 패킷. ERROR 필드가 추가된 것 외에는 Instruction Packet과 구성이 동일

Header 1 Header 2 Header 3 Reserved Packet ID Length 1 Length 2 Instruction ERR PARAM PARAM PARAM CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 ID Len_L Len_H Instruction Error Param 1 Param N CRC_L CRC_H

Instruction

Status Packet의 Instruction은 0x55 (Status Instruction: 0x55) 로 고정

Error

Instruction Packet 의 처리 결과를 나타냄

Bit 7 Bit 6 ~ Bit 0
Alert Error Number
Error Number Error 설명
0x01 Result Fail 전송된 Instruction Packet 을 처리하는데 실패한 경우
0x02 Instruction Error 정의되지 않은 Instruction 을 사용한 경우
Reg Write 없이 Action 을 사용한 경우
0x03 CRC Error 전송된 Packet 의 CRC 값이 맞지 않는 경우
0x04 Data Range Error 해당 Address 에 쓰려는 Data 가 최소/최대값의 범위를 벗어난 경우
0x05 Data Length Error 해당 Address 의 데이터 길이보다 짧은 데이터를 적으려고 한 경우
(예: 4 byte로 정의된 항목의 2 byte 만 쓰려고 하는 경우)
0x06 Data Limit Error 해당 Address 에 쓰려는 Data 가 Limit 값을 벗어난 경우
0x07 Access Error Read Only 혹은 정의되지 않은 Address 에 값을 쓰려고 한 경우
Write Only 혹은 정의되지 않은 Address 에 값을 읽으려고 한 경우
Torque Enable(ROM Lock) 상태에서 ROM 영역에 값을 쓰려고 한 경우

Parameters

  1. Instruction의 보조 데이터 필드로써, Instruction 마다 용도가 다름.
  2. 음수 데이터의 표현 방법 : 제품별로 차이가 있으므로, 해당 제품의 e-Manual을 참고 할 것.

Response Policy

  1. Broadcast ID(254 (0xFE))는 Ping, Sync ReadBulk Read 에만 응답하며, 그 외 Instruction에는 응답하지 않음. 예를 들어 Sync WriteBulk Write Instruction에서는 응답 하지 않음.
  2. Control Table의 Status Return Level값에 따라 응답이 결정. 각 장치의 Status Return Level에서 설정가능한 값을 참고.

Packet 처리

전송 시 처리 순서

  1. Packet 기본 형태 생성 후, Byte Stuffing(0xFD)
    • 검사 범위 : Instruction 필드부터 Parameter 필드 전체(CRC 제외)
    • 처리 방법 : “0xFF 0xFF 0xFD” 패턴이 나타날 경우, Byte Stuffing (0xFD) 을 추가
      (“0xFF 0xFF 0xFD” 가 존재하면, 0xFD를 추가해서 “0xFF 0xFF 0xFD 0xFD”로 변경)
  2. Length : Byte Stuffing이 적용된 Length로 수정
  3. CRC : Byte Stuffing이 적용된 상태에서 CRC 계산

수신 시 처리 순서

  1. Header(0xFF 0xFF 0xFD) 검색 : Byte Stuffing(“0xFF 0xFF 0xFD 0xFD”)은 무시.
  2. Packet ID : Packet ID가 유효하면, Length 만큼 추가로 수신
  3. CRC : Byte Stuffing이 포함된 수신 Packet 상태에서 계산, CRC가 일치하면 Byte Stuffing을 제거

Instruction의 종류

설명의 편의를 위하여, 다음과 같은 약어를 사용.

Ping (0x01)

Packet Parameters

참고: Status Packet은 각 장치로부터 받음.

Status Packet 설명
Parameter 1 모델번호 LSB
Parameter 2 모델번호 MSB
Parameter 3 펌웨어 Version

예제 1

예제 설명

Ping Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x03 0x00 0x01 0x19 0x4E

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR P1 P2 P3 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x07 0x00 0x55 0x00 0x06 0x04 0x26 0x65 0x5D

예제 2

예제 설명

Ping Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0xFE 0x03 0x00 0x01 0x31 0x42

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR P1 P2 P3 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x07 0x00 0x55 0x00 0x06 0x04 0x26 0x65 0x5D

ID 2 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR P1 P2 P3 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x02 0x07 0x00 0x55 0x00 0x06 0x04 0x26 0x6F 0x6D

Read (0x02)

설명

참고: Control Table 범위를 초과하여 요청할 경우, Error 필드에 Access Error가 채워지고, Parameter가 없는 Status Packet을 응답

Packet Parameters

Instruction Packet 설명
Parameter 1 시작 주소의 하위 바이트
Parameter 2 시작 주소의 상위 바이트
Parameter 3 데이터 길이(X)의 하위 바이트
Parameter 4 데이터 길이(X)의 상위 바이트
Status Packet 설명
Parameter 1 첫 번째 바이트
Parameter 2 두 번째 바이트
Parameter X X 번째 바이트

예제

예제 설명

Read Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x07 0x00 0x02 0x84 0x00 0x04 0x00 0x1D 0x15

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR P1 P2 P3 P4 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x08 0x00 0x55 0x00 0xA6 0x00 0x00 0x00 0x8C 0xC0

Write (0x03)

설명

Packet Parameters

Instruction Packet 설명
Parameter 1 시작 주소의 하위 바이트
Parameter 2 시작 주소의 상위 바이트
Parameter 2+1 첫번째 바이트
Parameter 2+2 두번째 바이트
Parameter 2+X X번째 바이트

예제

예제 설명

Write Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 P6 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x09 0x00 0x03 0x74 0x00 0x00 0x02 0x00 0x00 0xCA 0x89

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

Reg Write (0x04)

설명

Packet Parameters

Instruction Packet 설명
Parameter 1 시작 주소의 하위 바이트
Parameter 2 시작 주소의 상위 바이트
Parameter 2+1 첫번째 바이트
Parameter 2+2 두번째 바이트
Parameter 2+X X번째 바이트

예제

Condition

Reg Write Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 P6 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x09 0x00 0x04 0x68 0x00 0xC8 0x00 0x00 0x00 0xAE 0x8E

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

Action (0x05)

설명

예제

Condition

Action Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x03 0x00 0x05 0x02 0xCE

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

Factory Reset (0x06)

설명

Parameters

Instruction Packet 설명
Parameter 1 0xFF : 모든 값 초기화
0x01 : ID를 제외한 모든 값 초기화
0x02 : ID와 통신속도를 제외한 모든 값 초기화

예제

예제 설명

Factory Reset Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x06 0x01 0xA1 0xE6

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

Reboot (0x08)

설명

예제

예제 설명

Reboot Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x03 0x00 0x08 0x2F 0x4E

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

Clear (0x10)

설명

Parameters

P1 P2 ~ P5 설명
0x01 고정값
(0x44 0x58 0x4C 0x22)
현재 위치(Present Position) 값을 1회전(0~4095) 이내의 절대위치 값으로 초기화.
정지된 상태에서만 Clear 가능.
구동중에 Clear Inst Packet을 전송할 경우, Status Packet의 Error 필드에 Result Fail(0x01) 발생.
0x02 - 사용하지 않음
- 사용하지 않음
0xFF - 사용하지 않음

예제

예제 설명

Clear Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x08 0x00 0x10 0x01 0x44 0x58 0x4C 0x22 0xB1 0xDC

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

Control Table Backup (0x20)

설명

참고

  • 다이나믹셀 위자드 2.0 백업 및 복구
  • RAM 영역의 데이터는 Control Table의 Startup Configuration(60) 설정으로 복구할 수 있음 (RAM 영역 복구 항목 참조)

Parameters

P1 P2 ~ P5 설명
0x01 고정값
(0x43 0x54 0x52 0x4C)
현재 상태의 Control Table 데이터를 Backup 영역에 저장
0x02 고정값
(0x43 0x54 0x52 0x4C)
Backup 영역에 저장된 Control Table 데이터 중에서 EEPROM 영역의 데이터를 복구
패킷 처리 후 자동으로 재부팅 합니다.
0x03 - 사용하지 않음
- 사용하지 않음
0xFF - 사용하지 않음

예제

예제 1 설명

Control Table Backup Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 CRC1 CRC2
0xFF 0xFF 0xFD 0x00 0x01 0x08 0x00 0x20 0x01 0x43 0x54 0x52 0x4C 0x16 0xF5

ID1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR CRC1 CRC2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

예제 2 설명

Control Table EEPROM Restoring Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 CRC1 CRC2
0xFF 0xFF 0xFD 0x00 0x01 0x08 0x00 0x20 0x02 0x43 0x54 0x52 0x4C 0x92 0xF5

ID1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR CRC1 CRC2
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

Sync Read (0x82)

설명

Parameters

Instruction Packet 설명
Parameter 1 시작 주소의 하위 바이트
Parameter 2 시작 주소의 상위 바이트
Parameter 3 데이터 길이(X)의 하위 바이트
Parameter 4 데이터 길이(X)의 상위 바이트
Parameter 4+1 첫번째 장치 ID
Parameter 4+2 두번째 장치 ID
Parameter 4+X X번째 장치의 ID

참고 : 각 장치는 Sync Read Instruction Packet에 대해 응답 시, Status Packet을 각각 반환. 아래 예제를 참고할 것.

Status Packet 설명
Parameter 1 Frist Byte
Parameter 2 Second Byte
Parameter X X번째 바이트

예제

예제 설명

Sync Read Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 P6 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0xFE 0x09 0x00 0x82 0x84 0x00 0x04 0x00 0x01 0x02 0xCE 0xFA

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR P1 P2 P3 P4 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x08 0x00 0x55 0x00 0xA6 0x00 0x00 0x00 0x8C 0xC0

ID 2 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR P1 P2 P3 P4 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x02 0x08 0x00 0x55 0x00 0x1F 0x08 0x00 0x00 0xBA 0xBE

Sync Write (0x83)

설명

Parameters

Instruction Packet 설명
Parameter 1 시작 주소의 하위 바이트
Parameter 2 시작 주소의 상위 바이트
Parameter 3 데이터 길이(X)의 하위 바이트
Parameter 4 데이터 길이(X)의 상위 바이트
Parameter 5 첫번째 장치 ID
Parameter 5+1 첫번째 장치 첫번째 바이트
Parameter 5+2 첫번째 장치 두번째 바이트
첫번째 장치
Parameter 5+X 첫번째 장치 X번째 바이트
Parameter 6 두번째 장치 ID
Parameter 6+1 두번째 장치 첫번째 바이트
Parameter 6+2 두번째 장치 두번째 바이트
두번째 장치
Parameter 6+X 두번째 장치 X번째 바이트

예제

예제 설명

Sync Write Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4
0xFF 0xFF 0xFD 0x00 0xFE 0x11 0x00 0x83 0x74 0x00 0x04 0x00
P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 CRC 1 CRC 2
0x01 0x96 0x00 0x00 0x00 0x02 0xAA 0x00 0x00 0x00 0x82 0x87

Fast Sync Read (0x8A)

설명

참고: DYNAMIXEL Tips | Use Fast Sync and Fast Bulk Read Instruction for Speedy Communication

Parameter

Instruction Packet 설명
Parameter 1 시작 주소의 하위 바이트
Parameter 2 시작 주소의 상위 바이트
Parameter 3 데이터 길이(X)의 하위 바이트
Parameter 4 데이터 길이(X)의 상위 바이트
Parameter 4+1 첫번째 장치 ID
Parameter 4+2 두번째 장치 ID
Parameter 4+n n번째 장치 ID
Status Packet 설명
Parameter 1 첫번째 장치 ID
Parameter 2 첫번째 장치 First Byte
Parameter 3 첫번째 장치 Second Byte
Parameter X 첫번째 장치 X번째 바이트
Parameter X+1 첫번째 장치 CRC 하위 바이트
Parameter X+2 첫번째 장치 CRC 상위 바이트
Parameter X+3 두번째 장치 Error
Parameter X+4 두번째 장치 ID
Parameter X+4+1 두번째 장치 First Byte
Parameter X+4+2 두번째 장치 Second Byte
Parameter 2X+4 두번째 장치 X번째 바이트
Parameter 2X+4+1 두번째 장치 CRC 하위 바이트
Parameter 2X+4+2 두번째 장치 CRC 상위 바이트
Parameter nX+4 n번째 장치 X번째 바이트

참고: 각 장치의 CRC 값은 다이나믹셀 간의 패킷 무결성 확인을 위하여 다이나믹셀 내부 연산에 이용되며, Main Controller는 Status Packet 마지막의 CRC만 확인하여도 무방함.

참고: 각 장치는 Fast Sync Read Instruction Packet에 대해 응답 시, Status Packet 하나의 부분을 각각 반환. 아래 예제를 참고할 것.

참고: Fast Sync Read Status Packet은 Byte Stuffing(0xFD) 처리를 하지 않음.

예제

예제 설명

Fast Sync Read Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 P6 P7 CRC1 CRC2
0xFF 0xFF 0xFD 0x00 0xFE 0x0A 0x00 0x8A 0x84 0x00 0x04 0x00 0x03 0x07 0x04 0x20 0xF2

ID 3 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR ID1 D1 D2 D3 D4 CRC1 CRC2
0xFF 0xFF 0xFD 0x00 0xFE 0x19 0x00 0x55 0x00 0x03 0xA6 0x00 0x00 0x00 0x84 0x08

ID 7 Status Packet

ERR ID2 D1 D2 D3 D4 CRC1 CRC2
0x00 0x07 0x1F 0x08 0x00 0x00 0x16 0xCA

ID 4 Status Packet

ERR ID3 D1 D2 D3 D4 CRC1 CRC2
0x00 0x04 0xFF 0x03 0x00 0x00 0xD1 0x9E

Bulk Read (0x92)

설명

Parameters

Instruction Packet 설명
Parameter 1 첫번째 장치 ID
Parameter 2 첫번째 장치 시작 주소 하위 바이트
Parameter 3 첫번째 장치 시작 주소 상위 바이트
Parameter 4 첫번째 장치 데이터 길이 하위 바이트
Parameter 5 첫번째 장치 데이터 길이 상위 바이트
Parameter 6 두번째 장치 ID
Parameter 7 두번째 장치 시작 주소 하위 바이트
Parameter 8 두번째 장치 시작 주소 상위 바이트
Parameter 9 두번째 장치 데이터 길이 하위 바이트
Parameter 10 두번째 장치 데이터 길이 상위 바이트
Status Packet 설명
Parameter 1 첫번째 바이트
Parameter 2 두번째 바이트
Parameter X X번째 바이트

참고 : 각 장치는 Bulk Read Instruction Packet에 대해 Status Packet을 각각 반환. 아래 예제를 참고할 것.

예제

Condition

Bulk Read Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5
0xFF 0xFF 0xFD 0x00 0xFE 0x0D 0x00 0x92 0x01 0x90 0x00 0x02 0x00
P6 P7 P8 P9 P10 CRC 1 CRC 2
0x02 0x92 0x00 0x01 0x00 0x1A 0x05

ID 1 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR P1 P2 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x01 0x06 0x00 0x55 0x00 0x77 0x00 0xC3 0x69

ID 2 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR P1 CRC 1 CRC 2
0xFF 0xFF 0xFD 0x00 0x02 0x05 0x00 0x55 0x00 0x24 0x8B 0xA9

Bulk Write (0x93)

설명

Parameters

Instruction Packet 설명
Parameter 1 첫번째 장치 ID
Parameter 2 첫번째 장치 시작 주소 하위 바이트
Parameter 3 첫번째 장치 시작 주소 상위 바이트
Parameter 4 첫번째 장치 데이터 길이 하위 바이트
Parameter 5 첫번째 장치 데이터 길이 상위 바이트
Parameter 5+1 첫번째 장치 첫번째 바이트
Parameter 5+2 첫번째 장치 두번째 바이트
Parameter 5+X 첫번째 장치 X번째 바이트
Parameter 6+X 두번째 장치 ID
Parameter 7+X 두번째 장치 시작 주소 하위 바이트
Parameter 8+X 두번째 장치 시작 주소 상위 바이트
Parameter 9+X 두번째 장치 데이터 길이 하위 바이트
Parameter 10+X 두번째 장치 데이터 길이 상위 바이트
Parameter 10+X+1 두번째 장치 첫번째 바이트
Parameter 10+X+2 두번째 장치 두번째 바이트
Parameter 10+X+Y 두번째 장치 Y번째 바이트

예제

Condition

Bulk Write Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 P6 P7
0xFF 0xFF 0xFD 0x00 0xFE 0x10 0x00 0x93 0x01 0x20 0x00 0x02 0x00 0xA0 0x00
P8 P9 P10 P11 P12 P13 CRC 1 CRC 2
0x02 0x1F 0x00 0x01 0x00 0x50 0xB7 0x68

Fast Bulk Read (0x9A)

설명

참고: DYNAMIXEL Tips | Use Fast Sync and Fast Bulk Read Instruction for Speedy Communication

Parameters

Instruction Packet 설명
Parameter 1 첫번째 장치 ID
Parameter 2 첫번째 장치 시작 주소 하위 바이트
Parameter 3 첫번째 장치 시작 주소 상위 바이트
Parameter 4 첫번째 장치 데이터 길이(X1)의 하위 바이트
Parameter 5 첫번째 장치 데이터 길이(X1)의 상위 바이트
Parameter 6 두번째 장치 ID
Parameter 7 두번째 장치 시작 주소 하위 바이트
Parameter 8 두번째 장치 시작 주소 상위 바이트
Parameter 9 두번째 장치 데이터 길이(X2)의 하위 바이트
Parameter 10 두번째 장치 데이터 길이(X2)의 상위 바이트
Status Packet 설명
Parameter 1 첫번째 장치 ID
Parameter 2 첫번째 장치 First Byte
Parameter 3 첫번째 장치 Second Byte
Parameter X1 첫번째 장치 X1번째 바이트
Parameter X1+1 첫번째 장치 CRC 하위 바이트
Parameter X1+2 첫번째 장치 CRC 상위 바이트
Parameter X1+3 두번째 장치 Error
Parameter X1+4 두번째 장치 ID
Parameter X1+4+1 두번째 장치 First Byte
Parameter X1+4+2 두번째 장치 Second Byte
Parameter X1+4+X2 두번째 장치 X2번째 바이트
Parameter X1+4+X2+1 두번째 장치 CRC 하위 바이트
Parameter X1+4+X2+2 두번째 장치 CRC 상위 바이트
Parameter X1+4+X2+
⋯ 4+Xn
n번째 장치 Xn번째 바이트

참고 : 각 장치의 CRC 값은 다이나믹셀 간의 패킷 무결성 확인을 위하여 다이나믹셀 내부 연산에 이용되며, Main Controller는 Status Packet 마지막의 CRC만 확인하여도 무방함.

참고 : 각 장치는 Fast Bulk Read Instruction Packet에 대해 응답 시, Status Packet 하나의 부분을 각각 반환. 아래 예제를 참고할 것.

참고 : Fast Bulk Read Status Packet은 Byte Stuffing(0xFD) 처리를 하지 않음.

예제

예제 설명

Fast Bulk Read Instruction Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST P1 P2 P3 P4 P5 P6 P7 P8
0xFF 0xFF 0xFD 0x00 0xFE 0x12 0x00 0x9A 0x03 0x84 0x00 0x04 0x00 0x07 0x7C 0x00
P9 P10 P11 P12 P13 P14 P15 CRC1 CRC2
0x02 0x00 0x04 0x92 0x00 0x01 0x00 0x20 0xF2

ID 3 Status Packet

H1 H2 H3 RSRV Packet ID LEN1 LEN2 INST ERR ID1 D1 D2 D3 D4 CRC1 CRC2
0xFF 0xFF 0xFD 0x00 0xFE 0x14 0x00 0x55 0x00 0x03 0xA6 0x00 0x00 0x00 0x67 0xA4

ID 7 Status Packet

ERR ID2 D1 D2 CRC1 CRC2
0x00 0x07 0xA5 0x01 0x24 0x74

ID 4 Status Packet

ERR ID2 D1 CRC1 CRC2
0x00 0x04 0x1F 0xD9 0xC1