USB
Note
This page documents the low level USB configuration. If you’re looking for a higher level protocol documentation checkout ASCII Protocol. If you’re looking for usage or examples, please refer to odrivetool, the Python Package Example, or the web GUI <https://gui.odriverobotics.com/dashboard>.
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:
- Interface Association: Communication Device Class (CDC)
- Interface 0:
Endpoint 0x82: CDC commands
- Interface 1:
Endpoint 0x01: CDC data OUT
Endpoint 0x81: CDC data IN
- Interface Association: Vendor Specific Device Class
- Interface 2:
Endpoint 0x03: data OUT
Endpoint 0x83: data IN
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 packet based native protocol.
The two interfaces can not (yet) be used simultaneously.