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.