ODrive Documentation

High performance motor control

View the Project on GitHub odriverobotics/ODrive

Help improve these docs: submit edits using the link in the top right.

If you need help, please search or ask the ODrive Community.


This page documents the low level USB configuration. If you’re looking for a higher level protocol documentation see Native Protocol and ASCII Protocol.

This page assumes that you are familiar with the general USB architecture, in particular with terms like “configuration”, “interface” and “endpoint”.

On USB the ODrive provides a single configuration which is a composite device consisting of a CDC device (virtual COM port) and a vendor specific device.

What is a composite device?

A composite device is a device where interfaces are grouped by interface association descriptors. For such devices, the host OS loads an intermediate driver, so that each of the interface groups can be treated like a separate device and have its own host-side driver attached.

The following interface groups are present:

The CDC interface (endpoint pair 0x01, 0x81) runs the ASCII Protocol by default (see odrv0.config.enable_ascii_protocol_on_usb). The vendor specific interface (endpoint pair 0x03, 0x83) runs the Native Protocol (the packet based variant).

The two interfaces can not (yet) be used simultaneously.