Odrivetool dfu No Backend error

I’m trying to flash my odrive s1 with the latest firmware, using odrivetool dfu, the DFU switch is in the correct position. However I keep getting a NoBackEnd error. Any help would be greatly appreciated, Thanks!

ODrive control utility v0.6.7
Waiting for ODrive...
---------------------------------------------------------------------------
NoBackendError                            Traceback (most recent call last)
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scripts\odrivetool:172
    169     elif sum([bool(args.file), bool(args.channel), bool(args.version)]) == 0:
    170         args.channel = 'master'
--> 172     asyncio.run(odrive.dfu.launch_dfu(
    173         serial_number=args.serial_number,
    174         path=args.file,
    175         channel=args.channel,
    176         version=args.version,
    177         erase_all=not args.no_erase_all,
    178         logger=logger))
    179 except odrive.dfu.DfuError as ex:
    180     logger.error(str(ex))

File C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1264.0_x64__qbz5n2kfra8p0\Lib\asyncio\runners.py:190, in run(main, debug)
    186     raise RuntimeError(
    187         "asyncio.run() cannot be called from a running event loop")
    189 with Runner(debug=debug) as runner:
--> 190     return runner.run(main)

File C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1264.0_x64__qbz5n2kfra8p0\Lib\asyncio\runners.py:118, in Runner.run(self, coro, context)
    116 self._interrupt_count = 0
    117 try:
--> 118     return self._loop.run_until_complete(task)
    119 except exceptions.CancelledError:
    120     if self._interrupt_count > 0:

File C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1264.0_x64__qbz5n2kfra8p0\Lib\asyncio\base_events.py:653, in BaseEventLoop.run_until_complete(self, future)
    650 if not future.done():
    651     raise RuntimeError('Event loop stopped before Future completed.')
--> 653 return future.result()

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\odrive\dfu.py:305, in launch_dfu(serial_number, path, channel, version, erase_all, logger, force)
    303     except asyncio.CancelledError:
    304         pass
--> 305 device = (await asyncio.gather(*done))[0]
    307 found_in_dfu = isinstance(device, ODriveInDfuMode)
    309 if not found_in_dfu:

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\odrive\dfu.py:118, in DfuDeviceDiscovery.discover(self, serial_number)
    116 async def discover(self, serial_number: str):
    117     while True:
--> 118         devices = await asyncio.get_running_loop().run_in_executor(self._executor, self._get_devices)
    120         if serial_number is None and len(devices) > 0:
    121             return next(iter(devices.values()))

File C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1264.0_x64__qbz5n2kfra8p0\Lib\concurrent\futures\thread.py:58, in _WorkItem.run(self)
     55     return
     57 try:
---> 58     result = self.fn(*self.args, **self.kwargs)
     59 except BaseException as exc:
     60     self.future.set_exception(exc)

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\odrive\dfu.py:100, in DfuDeviceDiscovery._get_devices(self)
     98 with self._usb_lock:
     99     all_devices = {}
--> 100     for dev in usb.core.find(idVendor=0x0483, idProduct=0xdf11, find_all=True):
    101         try:
    102             serial_number = dev.serial_number

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\usb\core.py:1309, in find(find_all, backend, custom_match, **args)
   1307             break
   1308     else:
-> 1309         raise NoBackendError('No backend available')
   1311 if find_all:
   1312     return device_iter(**args)

NoBackendError: No backend available

Its possible the dfu device driver is not correct, Windows does not always choose the right one.
We’ve recently updated this section in the docs to include clearer instructions for changing the driver with Zadig. Can please try this and report back if you are still experiencing this issue?

thanks using zadig helped solve this

1 Like