wgrywanie bootloadera za pomocą pliku .bin i dfu-suffix.exe poprzez usb
.bin
należy najpierw „opakować” w kontener DFU (dodać nagłówek i sufiks) – np. narzędziami DfuFileMgr.exe
lub dfu-convert
, a dopiero potem użyć dfu-suffix.exe
, aby dopisać VID/PID. dfu-util -l
) i wgrywasz przygotowany plik (dfu-util -a 0 -s 0x08000000:leave -D plik.dfu
). Kluczowe punkty
• .bin
→ .dfu
(nagłówek + dane) → dfu-suffix.exe
(sufiks VID/PID)
• STM32 VID: 0x0483, PID: 0xDF11 (fabryczny USB-DFU)
• Programowanie przez dfu-util
lub STM32CubeProgrammer (GUI/CLI)
1.1 Plik .bin
– czysty ciąg bajtów bez informacji o adresie, identyfikacji czy wielkości.
1.2 Format .dfu
– zawiera:
• nagłówek (adres docelowy, długość, alt-setting)
• sekcję danych
• sufiks (VID, PID, DFU version, CRC-32)
1.3 dfu-suffix.exe
– DOPISUJE wyłącznie 16-bajtową stopkę (VID, PID, DFU-ver, CRC). Nie konwertuje .bin
do .dfu
.
1.4 Konwersję wykonuje:
• DfuFileMgr.exe (część pakietu STSW-STM32080/DfuSe) – GUI, Windows
• dfu-convert
(skrypt Pythona dfu-util) – CLI, cross-platform
• STM32CubeProgrammer (GUI/CLI) – potrafi wgrać surowy .bin
, omijając etap konwersji.
Katalog roboczy: C:\DFU
KROK 0 – wymagane pakiety
• dfu-util-0.11-win64 (w tym dfu-suffix.exe
)
• STSW-STM32080 (DfuSe) lub STM32CubeProgrammer ≥2.15
• Zadig (sterownik WinUSB)
KROK 1 – przygotowanie pliku .dfu
# zakładamy, że bootloader.bin jest skompilowany pod adres 0x08000000
DfuFileMgr.exe
[I want to generate DFU from BIN] → BootAddr: 0x08000000
wynik: bootloader.dfu
lub w konsoli (python):
dfu-convert -O 0x08000000 -o bootloader.dfu bootloader.bin
KROK 2 – dodanie sufiksu DFU
dfu-suffix.exe -v 0483 -p DF11 -a bootloader.dfu
(-a = append). Narzędzie automatycznie przelicza CRC.
KROK 3 – wejście w tryb DFU
BOOT0 → 3V3, BOOT1/GND → 0V
RESET lub Power-On
Windows wyświetli ‘STM32 BOOTLOADER’. Jeśli system nie ma sterownika:
Zadig → List All Devices → STM32 BOOTLOADER → WinUSB → Install.
KROK 4 – weryfikacja połączenia
dfu-util -l
Found DFU: [0483:df11] ...
KROK 5 – wgranie bootloadera
dfu-util -a 0 -s 0x08000000:leave -D bootloader.dfu
leave
powoduje wyjście z DFU po zapisie. Pasek postępu 100 %.
KROK 6 – uruchomienie aplikacji
BOOT0 = 0 → RESET. Bootloader startuje z flash pod 0x08000000.
.bin
?STM32CubeProgrammer (GUI lub CLI) akceptuje surowy .bin
, dlatego alternatywny, prostszy scenariusz to:
STM32_Programmer_CLI.exe -c port=USB1 -el
STM32_Programmer_CLI.exe -c port=USB1 -d bootloader.bin 0x08000000 --verify
Konwersja do .dfu
nie jest wtedy potrzebna.
Flash w większości STM32 F / L zaczyna się od 0x08000000 i jest podzielony na strony (1–2 kB). Fabryczny ROM-bootloader USB mieszka w adresach 0x1FFF xxxx. Użytkownik nadpisuje wyłącznie Flash.
Warunek poprawnego startu: w wektorze reset (pierwsze 8 B flash) musi znajdować się:
\[
\text{SP}{\text{init}} = \text{addr}{\text{RAM}}(top) ,\quad
\text{ResetHandler} = \text{main()}
\]
• STMicroelectronics od 2023 r. promuje STM32CubeProgrammer jako jedyne oficjalne narzędzie – pakiet DfuSe przestał być aktualizowany.
• dfu-util 0.11 dodaje obsługę USB 3.2 oraz poprawia transfery >1 MiB.
• ROS-DFU, TinyUSB i MCUboot integrują DFU z protokołami „over-air” (BLE, Wi-Fi, USB-C).
• Coraz więcej projektów wykorzystuje bezpieczne bootloadery (SB-signed) – sam plik .dfu
bywa podpisywany SHA-256 + ECDSA.
• dfu-suffix.exe -c plik.dfu
– weryfikuje CRC i wyświetla VID/PID.
• Alternative interfaces (-a
) widoczne w dfu-util -l
mogą wskazywać OTP/OB/Feature; do Flash używamy alt 0.
• Jeśli Flash jest chroniony (ROP Level 1), dfu-util -s :unprotect
lub CubeProgrammer → OptionBytes → RDP=AA.
• VID 0x0483 jest własnością ST – używaj go wyłącznie do komunikacji z fabrycznym bootloaderem; do własnych urządzeń wymagany jest osobisty VID (USB-IF) lub sublicencja.
• Zwróć uwagę na licencje GPL (dfu-util) i ST-EULA (CubeProgrammer).
• Bezpieczeństwo: niepublikowany bootloader → ryzyko reverse-engineeringu; rozważ szyfrowanie i bezpieczny update (SBW).
• Dodaj regułę Makefile:
%.dfu: %.bin
dfu-convert -O 0x08000000 -o $@ $<
dfu-suffix -v 0483 -p DF11 -a $@
• Dla produkcji stosuj --softreset
zamiast leave
, aby wymusić restart.
• Test integralności po flashu: dfu-util -a 0 -U verify.bin
+ porównanie CRC32.
• dfu-suffix.exe
nie działa na plikach >4 GiB (32-bit CRC).
• Na STM32F7/H7 domyślny bootloader USB jest wolniejszy (Full-Speed) – rozważ HS-USB z własnym BL.
• DfuSe (GUI) nie jest wspierane na Windows 11 – czasem wymaga trybu zgodności.
• Integracja z MCUboot + TinyUSB (USB-DFU-class) – umożliwia podpisywanie obrazów.
• Aktualizacja w polu (FOTA + DFU over BLE) – Nordic/Zephyr.
• Analiza AN2606 (Bootloader AN) dla konkretnego wariantu STM32 – dokładne mapy alt-setting.
Aby wgrać bootloader .bin
przez USB DFU: konwertujesz plik do formatu .dfu
, dopisujesz sufiks VID/PID (dfu-suffix.exe
), uruchamiasz STM32 w trybie bootloadera (BOOT0 = 1), sprawdzasz połączenie (dfu-util -l
) i flashujesz (dfu-util -a0 -s0x08000000:leave -D plik.dfu
). Alternatywnie użyj STM32CubeProgrammer, który przyjmie surowy .bin
. Kluczowe są poprawny adres flash, sterowniki WinUSB oraz weryfikacja CRC sufiksu DFU.