ODrive 3.5 48v dfu USB error

I’m sure I’m missing something simple here, but I’m trying to flash my ODrive with the latest firmware and I’m receiving the error referenced below. does anybody have some insight on how to resolve this?

“USBError: [Errno None] b’libusb0-dll:err [submit_async] submitting request failed, win error: The device does not recognize the command.\r\n’”

I’m a bit of a green horn so any help is greatly appreciated, thanks!

full log below:

(base) C:\Users\david>odrivetool dfu
ODrive control utility v0.4.1
Waiting for ODrive...
Found ODrive 206E36923548 (v3.5-48V) with firmware v0.4.1-dev
Checking online for newest firmware... found v0.4.2
Downloading firmware v0.4.2...
Saving configuration to C:\Users\david\AppData\Local\Temp\odrive-config-206E36923548.json...
The file C:\Users\david\AppData\Local\Temp\odrive-config-206E36923548.json already exists. Do you want to override it? [Y/n] y
Configuration saved.
Putting device 206E36923548 into DFU mode...
---------------------------------------------------------------------------
USBError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\fibre\usbbulk_transport.py in process_packet(self, usbBuffer)
     96     try:
---> 97       ret = self.epw.write(usbBuffer, 0)
     98       if self._was_damaged:

~\Anaconda3\lib\site-packages\usb\core.py in write(self, data, timeout)
    386         """
--> 387         return self.device.write(self, data, timeout)
    388

~\Anaconda3\lib\site-packages\usb\core.py in write(self, endpoint, data, timeout)
    947                 _interop.as_array(data),
--> 948                 self.__get_timeout(timeout)
    949             )

~\Anaconda3\lib\site-packages\usb\backend\libusb0.py in bulk_write(self, dev_handle, ep, intf, data, timeout)
    532                             intf,
--> 533                             data, timeout)
    534

~\Anaconda3\lib\site-packages\usb\backend\libusb0.py in __write(self, fn, dev_handle, ep, intf, data, timeout)
    615                         length,
--> 616                         timeout
    617                     )))

~\Anaconda3\lib\site-packages\usb\backend\libusb0.py in _check(ret)
    430             return ret
--> 431     raise USBError(errmsg, ret)
    432

USBError: [Errno None] b'libusb0-dll:err [submit_async] submitting request failed, win error: The device does not recognize the command.\r\n'

During handling of the above exception, another exception occurred:

TimeoutError                              Traceback (most recent call last)
~\Anaconda3\Scripts\odrivetool in <module>()
    140         print_version()
    141         import odrive.dfu
--> 142         odrive.dfu.launch_dfu(args, logger, app_shutdown_token)
    143
    144     elif args.command == 'liveplotter':

~\Anaconda3\lib\site-packages\odrive\dfu.py in launch_dfu(args, logger, cancellation_token)
    448     firmware = FirmwareFromFile(args.file) if args.file else None
    449
--> 450     update_device(device, firmware, logger, cancellation_token)
    451
    452

~\Anaconda3\lib\site-packages\odrive\dfu.py in update_device(device, firmware, logger, cancellation_token)
    347     if dfudev is None:
    348         find_odrive_cancellation_token = Event(cancellation_token)
--> 349         put_into_dfu_mode(device, find_odrive_cancellation_token)
    350         stm_device = find_device_in_dfu_mode(serial_number, cancellation_token)
    351         find_odrive_cancellation_token.set()

~\Anaconda3\lib\site-packages\odrive\dfu.py in put_into_dfu_mode(device, cancellation_token)
    224     print("Putting device {} into DFU mode...".format(device.__channel__.usb_device.serial_number))
    225     try:
--> 226         device.enter_dfu_mode()
    227     except fibre.ChannelBrokenException:
    228         pass # this is expected because the device reboots

~\Anaconda3\lib\site-packages\fibre\remote_object.py in __call__(self, *args)
    122         for i in range(len(args)):
    123             self._inputs[i].set_value(args[i])
--> 124         self._parent.__channel__.remote_endpoint_operation(self._trigger_id, None, True, 0)
    125         if len(self._outputs) > 0:
    126             return self._outputs[0].get_value()

~\Anaconda3\lib\site-packages\fibre\protocol.py in remote_endpoint_operation(self, endpoint_id, input, expect_ack, output_length)
    294                     self._my_lock.acquire()
    295                     try:
--> 296                         self._output.process_packet(packet)
    297                     except ChannelDamagedException:
    298                         attempt += 1

~\Anaconda3\lib\site-packages\fibre\usbbulk_transport.py in process_packet(self, usbBuffer)
    104         raise fibre.protocol.ChannelBrokenException()
    105       elif ex.errno is None or ex.errno == 60 or ex.errno == 110: # timeout
--> 106         raise TimeoutError()
    107       else:
    108         self._logger.debug("error in usbbulk_transport.py, process_packet")

TimeoutError:

(base) C:\Users\david>

Thanks for your report. I looked into it and it seems that the ODrive didn’t respond properly, or there was some other unknown communication issue. I came up with this edit to tell it to try again automatically: the edit on github.

Until that gets released, can you simply just try again?

I am getting the same error. I am trying to update odrive 3.5 24v on windows. I have tried 3 times now, with the same result:

(base) C:\Users\andersen>odrivetool dfu
ODrive control utility v0.4.1
Waiting for ODrive...
Found ODrive 366133683037 (v3.5-24V) with firmware v0.4.1-dev
Checking online for newest firmware... found v0.4.2
Downloading firmware v0.4.2...
Putting device 366133683037 into DFU mode...
---------------------------------------------------------------------------
USBError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\fibre\usbbulk_transport.py in process_packet(self, usbBuffer)
     96     try:
---> 97       ret = self.epw.write(usbBuffer, 0)
     98       if self._was_damaged:

~\Anaconda3\lib\site-packages\usb\core.py in write(self, data, timeout)
    386         """
--> 387         return self.device.write(self, data, timeout)
    388

~\Anaconda3\lib\site-packages\usb\core.py in write(self, endpoint, data, timeout)
    947                 _interop.as_array(data),
--> 948                 self.__get_timeout(timeout)
    949             )

We found a different tool that can flash the ODrive in DFU mode. It’s not as sleek and automated as the dfu command in odrivetool, but hopefully it can help if you are getting errors.

Instructions here

@madcowswe Thank you for a quick turn around and getting us up and running again, that worked perfectly! You’ve cultivated a great community of users here and it’s no surprise why.

2 Likes

Thanks @madcowswe, the alternative DFU method also allowed me to update.

1 Like