ODrive V3.5 not available any more after failed device firmware update


I tried to update my V3.5 motor controller with
odrivetool dfu
in anaconda/Windows.
During the update, the new device “STM32 BOOTLOADER” appeared.
Therefore I opened the Zadig utility and set the driver for “STM32 BOOTLOADER” to libusb-win32.
After that the odrivetool dfu finished with an error.

Now the odrivetool does not detect the motor controller anymore.
I am also not able to reproduce that dfu error anymore.
The motor controller is not listed as device in Zadig anymore.

Did I break the firmware or is that a usb driver issue?


  1. try to reflash

  2. change USB driver again


odrivetool dfu did not find the controller so I put it in dfu mode swiching the dip switch. odrive dfu then gives this error:

odrivetool dfu
ODrive control utility v0.4.9
Waiting for ODrive…
Found ODrive 385B37563437 (v3.5-48V) with firmware [unknown version] in DFU mode
Checking online for newest firmware… found v0.4.10
Downloading firmware v0.4.10…
The configuration cannot be backed up because the device is already in DFU mode. The configuration may be lost after updating. Do you want to continue anyway? [Y/n] Y
Erasing… done
Flashing… (sector 1/6)

RuntimeError Traceback (most recent call last)
C:\ProgramData\Anaconda3\Scripts\odrivetool in
140 print_version()
141 import odrive.dfu
–> 142 odrive.dfu.launch_dfu(args, logger, app_shutdown_token)
144 elif args.command == ‘liveplotter’:

C:\ProgramData\Anaconda3\lib\site-packages\odrive\dfu.py in launch_dfu(args, logger, cancellation_token)
452 firmware = FirmwareFromFile(args.file) if args.file else None
–> 454 update_device(device, firmware, logger, cancellation_token)

C:\ProgramData\Anaconda3\lib\site-packages\odrive\dfu.py in update_device(device, firmware, logger, cancellation_token)
380 for i, (sector, data) in enumerate(touched_sectors):
381 print(“Flashing… (sector {}/{}) \r”.format(i, len(touched_sectors)), end=’’, flush=True)
–> 382 dfudev.write_sector(sector, data)
383 print(‘Flashing… done \r’, end=’’, flush=True)
384 finally:

C:\ProgramData\Anaconda3\lib\site-packages\odrive\dfuse\DfuDevice.py in write_sector(self, sector, data)
185 status = self.wait_while_state(DfuState.DFU_DOWNLOAD_BUSY)
186 if status[1] != DfuState.DFU_DOWNLOAD_IDLE:
–> 187 raise RuntimeError(“An error occured. Device Status: {!r}”.format(status))
189 def read_sector(self, sector):

RuntimeError: An error occured. Device Status: (0, 2, 0, 0)

Had this kind of errors on slow computer.

After the controller was not detected anymore I tried to flash it with the st-link programmer. How do I adjust the clock speed?

$ openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c init -c “reset halt” -c “flash write_image erase ODriveFirmware_v3.5-48V.elf” -c “reset run” -c exit
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
Info : auto-selecting first available session transport “hla_swd”. To override use 'transport select '.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : clock speed 1800 kHz
Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
Error: open failed
in procedure ‘init’
in procedure ‘ocd_bouncer’

I solved the problem by flashing the firmware using Linux Mint at my computer.

1 Like