ODrive S1 USB-CAN Adapter in DFU Mode – Invalid endpoint address 0x81 on Windows

Title: ODrive S1 USB-CAN Adapter in DFU Mode – Invalid endpoint address 0x81 on Windows

Setup

  • Operating system: Windows
  • Communication: CAN via USB-CAN adapter

Problem

When accessing the CAN adapter through Python, the following error occurs:

usb.core.USBError: [Errno None] libusb0-dll:err [control_msg] sending control message failed
ValueError: Invalid endpoint address 0x81

USB device description

The USB dump shows the following device:

Manufacturer: ODrive Robotics
Product: USB to CAN Adapter firmware upgrade interface

Notably, no endpoints are present .

Analysis

The USB-CAN adapter appears to start in firmware upgrade / DFU mode instead of the normal gs_usb mode.

Questions

  • How can the USB-CAN adapter be reliably brought out of DFU mode?
  • Is there a recommended method to reflash the USB-CAN firmware?
  • Is this behavior known?

btw: GUI is working

It should show up as a composite interface – with both DFU interface and normal gs_usb. What does it show in device manager? Are you able to double-check on a Linux or Mac OS computer?

Hello,
sorry for the long delay. I first had to get a Raspberry Pi and find some time to test everything.

On the Raspberry Pi with Ubuntu there are no issues – everything works as expected.

However, I really wanted to use it on my PC, and that’s where I’m stuck.

As mentioned before: On the PC, connecting through ODrive-UI via USB works without any problems. But programmatically in Python I cannot access the device.

The online documentation unfortunately did not help me so far.

Does anyone have an idea or experienced something similar?

We now have native USB-CAN adapter support in ODrivetool/libodrive. So you can just run in python e.g.:

import odrive
odrv0 = odrive.find_sync()

And that’ll discover and connect to your ODrive over CAN, from Python.

Just to check, does the GUI work over the CAN adapter?