Windows 7 + dfu-util + USB 3

Hi guys,
tried to flash the firmware using dfu-util but 2 issues occured:

  1. Device not available
    After putting the core into DFU-mode (press+hold mode button, reset unit, release mode after RGB LED flashes yellow) I changed the driver by using zadig to WinUSB successfully. dfu-util didn’t show it up, I tried to reinstall, checked if I made everything according the manuals.
    Solution: There seems to be an issue if the spark core is connected to a USB 3.0 port. Change to a USB 2.0 port resolved the issue immediately!

  2. dfu-util quits with error message "Error: Last page at 0x08004fff is not writeable"
    This (might) be a typo or whatever.

regards

1 Like

Were you able to flash firmware using that address? That seems strange, what do you think @zachary ?

Hi Dave,

seems to work, at least the core reboots. As I’m still struggling building my own firmware (see other topic) I’m still unsure if the flash succeeds.

E:\SparkCore\src\core-firmware\build>dfu-util -d 1d50:607f -a 0 -s 0x0800A000:le
ave -D core-firmware.bin
dfu-util 0.7

Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2012 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to dfu-util@lists.gnumonks.org

Filter on vendor = 0x1d50 product = 0x607f
Opening DFU capable USB device... ID 1d50:607f
Run-time device DFU version 011a
Found DFU: [1d50:607f] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash  /0
x08000000/20*001Ka,108*001Kg"
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 1024
File too short for DFU suffix
Warning: File has no DFU suffix
DfuSe interface name: "Internal Flash  "
Downloading to address = 0x0800a000, size = 0

File downloaded successfully
Transitioning to dfuMANIFEST state
Error during download get_status

Hi @joky,

I think you should make sure you’re flashing to the right address to load your own firmware:

dfu-util -d 1d50:607f -a 0 -s 0x08005000:leave -D core-firmware.bin

since that’s where the bootloader is expecting to find your code. – How big is the application you’re trying to flash? It looks like dfu-util said size 0?

Flashing to 0x0800A000 will NOT work. Your Core may seem to work because it will start running the beginning of the previous firmware which is still installed at 0x08005000. Definitely always flash to 0x08005000.

Removing :leave did work for me while patching the cc3000 because WiFi was not connecting. The core won’t restart, you will have to reset it yourself after flashing.

I did encounter this error at one point while trying to set up the local build enviroment. It was indeed a compiling issue, the firmware was left empty for some reason and is easy to miss. I remember it was a one quirk that may happen if you try to use Windows command prompt to run "make." Try opening Git Bash in build direction and run "make clean" and the "make" from that.

1 Like

Thank you @zachary, @Dave & @weakset , seems that the “make” fails to build a valid firmware. As “make” exit without any error I didn’t noticed this issue.

I just tried to compile using bash without any errors (just some warnings),…

@weakset: do you remember what was wrong?

In meantime I’ll setup a linux-env,… developing on windows seems to be odd :wink:

1 Like

Hi guys,
thank you for your support.
The “make” command failed to create the firmware correctly (values below “text” and “data” was zero). I did a git clone again and did everything again - now with success (text: 25240, data: 2904).

Thanks again!!

2 Likes

I'm not sure if that is success... I think whole firmware.bin should be ~60K and yours seems to be only half of that.

Just that Windows isn't UNIX/GNU based and that always causes problems with compiling and stuff. Git Bash has MinGW (Minimalist GNU for Windows) on background so it works like intended.