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 <>.

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.

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.