STM32F04 in DFU mode recognized only when powered from battery (Win10)

3.4k views Asked by At

I made a STM32F042k6, battery powered device, that I would to flash vi DFU protocol.

In order to do so I disconnect the battery, I pull BOOT0 to VCC, and then plug the device in USB3 port of PC (no USB2 available). The device is not recognized and showed VID:0000 PID:0002 (case I)

However, when I first connect battery, and then connect the device to PC it is recognized without a fuss (case II).

The problem I face is that I would like to initiate jump to bootloader program by command in software - but then I reach exactly the same condition as in case I.

Could you help me to identify what conditions for proper boot I am violating?

EDIT: The way I have discovered the problem was when I implemented software jump to bootloader. It seemed not to work at all (VCP device dissapeared, and erroreous <> device appeard in system PID:0002 VID:0000). I wanted to enter bootloader by pulling up BOOT0 pin, but I could see that I sucseed only when battery-power cycled. USB power cyccle resulted in the same "failed descriptor" device.

I suspect that when powered on via USB, the booloader has som ecommunication problems and cannot establish proper PID and VID. When powered via battery - this problem is not existing.

2

There are 2 answers

5
Hugo Bevilacqua On

Do you have a discovery board?

I read in the STM32F042x4/x6 Reference Manual (DocID025832 Rev 5):

The STM32F042x4/x6 embeds a full-speed USB device peripheral compliant with the USB specification version 2.0.

(part 3.19, p.27).

In the AN2606 (Rev 33), a table shows the USB configuration which is used by the DFU Bottolader in USB FS (Full-speed):

enter image description here

I assume that the USB in the bootloader is the 2.0, but USB 3.0 must be USB 2.0 compliant. So it is possible to use an USB 3.0 port.

I suggest you use the DfUSe Demo from ST. Its interface consists of a tab where the DFU devices available are displayed when detected. I try it on another STM32x by following these steps:

  • Open DfuSe Demo software.
  • Plug BOOT0 to Vdd to put the micro on DFU mode.
  • Plug the USER USB to your computer port.
  • The name of your device should appear in “Available DFU Devices” field.

You could try to use directly PA11 and PA12 as well (according to Table 12) instead of the USB port of your board.

EDIT:
Another solution to upgrade your firmware without driving boot0 is to jump directly into the DFU bootloader of ST inside your firmware. Else you could design your own IAP bootloader (In-Application Programming).

I hope that helps.

0
ZECTBynmo On

I faced this same issue with the STM32 Mini F401 and dug into it for several days. Unlike the OP I was unable to find any electrical conditions which reliably got the bootloader to do the right thing. I was able to program my board maybe once every 20 tries, which was really slowing down my process.

In the end I discovered that I can go to the Windows device manager, show hidden devices, and there will be an entry in Universal Serial Bus Devices called STM32 BOOTLOADER. When the issue is happening the board is connected in dfu mode but that device is not marked active in the device manager.

To resolve the issue consistently, you can manually delete the hidden STM32 BOOTLOADER entry, uninstalling the device (no need to delete the driver, just uninstall the device). Then reboot your board in DFU mode and it should connect as expected every time. Unfortunately I need to do this process every time I want to program, but that's far better than the inconsistent/intermittent failures before.

Edit: My issue was also related to a bad USB cable causing inconsistent/corrupted signals. If you're reading this, try a different USB cable if you can, it's worth a shot.