I modified the CAN firmware (razoredge branch) so that error, axis state, current, and position is continuously streamed in the heartbeat message (since the position in our application we are using won’t be larger than the int16 max and min values).
I managed to flash the firmware successfully, and have confirmed that it works by looking at the CAN messages being sent.
However, when I tried to reflash it with our ST-link I got an error message “STm device protected”.
I then put our Odrive (v3.6) in DFU mode by flipping the DIP switch, and tried flash it over USB with the command “sudo dfu-util -a 0 -s 0x08000000 -D path/to/bin/file”, but it gave me the error message:
dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 11
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08000000, size = 174460
Download [ ] 0% 0 bytesdfu-util: ERASE_PAGE not correctly executed
I also tried using the command “odrivetool dfu path/to/firmware/file.hex” but that gave me the following error:
ODrive control utility v0.4.11
Waiting for ODrive...
Found ODrive 2075387E304E (v3.6-56V) with firmware v0.4.11-dev
Warning: you are about to flash firmware [unknown version] which is older than the firmware on the device (v0.4.11-dev).
Do you want to flash this firmware anyway? [y/N] y
Saving configuration to /tmp/odrive-config-2075387E304E.json...
Configuration saved.
Putting device 2075387E304E into DFU mode...
Traceback (most recent call last):
File "/usr/local/bin/odrivetool", line 142, in <module>
odrive.dfu.launch_dfu(args, logger, app_shutdown_token)
File "/usr/local/lib/python3.5/dist-packages/odrive/dfu.py", line 454, in launch_dfu
update_device(device, firmware, logger, cancellation_token)
File "/usr/local/lib/python3.5/dist-packages/odrive/dfu.py", line 351, in update_device
stm_device = find_device_in_dfu_mode(serial_number, cancellation_token)
File "/usr/local/lib/python3.5/dist-packages/odrive/dfu.py", line 241, in find_device_in_dfu_mode
stm_device = usb.core.find(idVendor=0x0483, idProduct=0xdf11, **params)
File "/usr/local/lib/python3.5/dist-packages/usb/core.py", line 1269, in find
return _interop._next(device_iter(**args))
File "/usr/local/lib/python3.5/dist-packages/usb/_interop.py", line 66, in _next
return next(iter)
File "/usr/local/lib/python3.5/dist-packages/usb/core.py", line 1249, in device_iter
if _interop._all(tests) and (custom_match is None or custom_match(d)):
File "/usr/local/lib/python3.5/dist-packages/usb/core.py", line 1248, in <genexpr>
tests = (val == getattr(d, key) for key, val in kwargs.items())
File "/usr/local/lib/python3.5/dist-packages/usb/core.py", line 830, in serial_number
self._serial_number = util.get_string(self, self.iSerialNumber)
File "/usr/local/lib/python3.5/dist-packages/usb/util.py", line 314, in get_string
raise ValueError("The device has no langid")
ValueError: The device has no langid
Here is the error log when running “make flash”:
make flash
openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c init \
-c 'reset halt' \
-c 'flash write_image erase build/ODriveFirmware.elf' \
-c 'reset run' \
-c exit
Open On-Chip Debugger 0.9.0 (2018-01-24-01:05)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
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
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.277108
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
auto erase enabled
Info : device id = 0x10076413
Warn : STM32 flash size failed, probe inaccurate - assuming 1024k flash
Info : flash size = 1024kbytes
Error: stm32x device protected
Error: failed erasing sectors 0 to 5
Makefile:17: recipe for target 'flash' failed
make: *** [flash] Error 1
Is this a common issue, and does someone have info how to solve this?
I have repeated this on 3-4 odrive’s. First flash of firmware have always been successful (make flash), but then reflash it doesn’t seem to work?