This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
product:usb2ax:advanced_instructions [2013/04/02 05:41] xevel |
product:usb2ax:advanced_instructions [2014/02/10 20:10] xevel |
||
---|---|---|---|
Line 59: | Line 59: | ||
**How does it actually work?**\\ | **How does it actually work?**\\ | ||
- | SYNC_READ is a command only the controller can understand (using this command without such a controller will either not have any effect or, if a servo with ID 0xFD is present on the bus, might return an error 0x20).\\ | + | SYNC_READ is a command only the controller can understand: using this command without such a controller will either not have any effect or, if a servo with ID 0xFD is present on the bus, might return an error 0x20.\\ |
The controller converts SYNC_READ into multiple separate READ commands to get data from each servo, then sends back to the computer a single big packet containing all the data.\\ | The controller converts SYNC_READ into multiple separate READ commands to get data from each servo, then sends back to the computer a single big packet containing all the data.\\ | ||
This significantly decreases the effect of USB latency. | This significantly decreases the effect of USB latency. | ||
- | Limitations | + | **Limitations**\\ |
- | + | A SYNC_READ command reads the same registers in each servo.\\ | |
- | You can use this instruction only when you want to read the same bytes in each servo.\\ | + | |
The USB2AX limits the maximum number of servos to read from (N) to 32, and the maximum data length (L) to 6 bytes. | The USB2AX limits the maximum number of servos to read from (N) to 32, and the maximum data length (L) to 6 bytes. | ||
- | **Instruction Packet** | + | **Instruction Packet**\\ |
<0xFF><0xFF><ID><Length><Instruction><Param 1><Param 2><Param 3> ... <Param N+2><Checksum> | <0xFF><0xFF><ID><Length><Instruction><Param 1><Param 2><Param 3> ... <Param N+2><Checksum> | ||
Line 84: | Line 82: | ||
- | **Status Packet (Return Packet)** | + | **WARNING** Some choices of implementation of the Dynamixel SDK make it impossible to simply send this packet and expect a valid response. A modified version of the SDK will be availalbe to fix this problem. |
+ | |||
+ | |||
+ | **Status Packet (Return Packet)**\\ | ||
<0xFF><0xFF><ID><Length><Error><Param 1> ... <Param L><Param L+1> ... <Param L*N><Checksum> | <0xFF><0xFF><ID><Length><Error><Param 1> ... <Param L><Param L+1> ... <Param L*N><Checksum> | ||
Line 100: | Line 101: | ||
- | == Example == | + | ** Example **\\ |
Reading the Present Position and Present Speed for 4 Dynamixel actuators with IDs of **0**, //1//, __2__, ''7''. | Reading the Present Position and Present Speed for 4 Dynamixel actuators with IDs of **0**, //1//, __2__, ''7''. | ||
- | **Instruction Packet**\\ | + | Instruction Packet\\ |
0XFF 0XFF 0XFD 0X08 0X84 0X24 0X04 **0X00** //0X01// __0X02__ ''0X07'' 0X44\\ | 0XFF 0XFF 0XFD 0X08 0X84 0X24 0X04 **0X00** //0X01// __0X02__ ''0X07'' 0X44\\ | ||
- | **Response Packet**\\ | + | Status Packet\\ |
0XFF 0XFF 0XFD 0X12 0X00 **0X50 0X01 0XFF 0X01** //0X20 0X00 0X00 0X02// __0X10 0X00 0X10 0X02__ ''0X00 0X00 0XFE 0X01'' 0X5C | 0XFF 0XFF 0XFD 0X12 0X00 **0X50 0X01 0XFF 0X01** //0X20 0X00 0X00 0X02// __0X10 0X00 0X10 0X02__ ''0X00 0X00 0XFE 0X01'' 0X5C | ||