Witam,
Mam problem z biblioteką USB-FS od STM32. Jako punkt wyjścia wybrałem sobie ich przykład z biblioteki dla Device Firmware Upgrade (wcześniej bezproblemowo pracowałem z USB HID). Przerobiłem ich projekt pod swoją płytkę (korzystam z ZL31ARM + własna płytka przyłączeniowa z obsługą USB). Wszystko się już ładnie kompiluje, sprzęt jest wykrywany jako urządzenie DFU i program DfuSe też go poprawnie widzi.
Teraz chciałem wgrać firmware przy pomocy DfuSe. Przygotowałem sobie plik *.dfu, ustawiłem wektor przerwań i początku pamięci flash w linkerze z odpowiednim offsetem (0x3800), problem jest taki: przy próbie upgrade łączy się, ale od razu staje na 0% podczas czyszczenia wewnętrznego flasha, tj "Erase Phase (0%)" i dalej już się nic nie dzieje. Program ląduje w HardFault_Handler(void).
1. pytanie chyba dość głupie, ale zapytam - czy pamięć na płytce ewaluacyjnej może być zabezpieczona że jej nie chce wyczyścić, czy to raczej wina źle napisanego bootloadera (korzystam z Atollica lite i on bez problemu programuje flasha st-linkiem, ale może ustawia jakieś bity zabezpieczające za sobą? to własnie z poziomu TrueStudio kompiluje i wgrywam bootloadera DFU)
2. czy ma znaczenie co wgrywamy (firmware w postaci pliku .dfu) na tym etapie, czy nie ma to absolutnie żadnego znaczenia, a czyszczenie i tak powinien przejść (chodzi mi o to, czy nie popełniłem jakieś błędu związanego z ustawianiem offsetów na adresach i czy to by mogło mieć wpływ) - wydaje mi się że nie powinno to mieć wpływu, a czyszczenie i tak powinien przejść...
No i ostatnie pytanie, bardziej ogólne - czy ktoś miał podobny problem? Trochę się już z tym męczę i skończyły mi się pomysły.
Będę wdzięczny za wszelką pomoc i sugestie. Kodów programów chyba nie ma sensu wklejać - są to przykłady z biblioteki. Szkoda, że nie mam zestawu ewaluacyjnego od ST, może nie wszystko przerobiłem tak jak trzeba pod swoją płytkę...
Mam problem z biblioteką USB-FS od STM32. Jako punkt wyjścia wybrałem sobie ich przykład z biblioteki dla Device Firmware Upgrade (wcześniej bezproblemowo pracowałem z USB HID). Przerobiłem ich projekt pod swoją płytkę (korzystam z ZL31ARM + własna płytka przyłączeniowa z obsługą USB). Wszystko się już ładnie kompiluje, sprzęt jest wykrywany jako urządzenie DFU i program DfuSe też go poprawnie widzi.
Teraz chciałem wgrać firmware przy pomocy DfuSe. Przygotowałem sobie plik *.dfu, ustawiłem wektor przerwań i początku pamięci flash w linkerze z odpowiednim offsetem (0x3800), problem jest taki: przy próbie upgrade łączy się, ale od razu staje na 0% podczas czyszczenia wewnętrznego flasha, tj "Erase Phase (0%)" i dalej już się nic nie dzieje. Program ląduje w HardFault_Handler(void).
1. pytanie chyba dość głupie, ale zapytam - czy pamięć na płytce ewaluacyjnej może być zabezpieczona że jej nie chce wyczyścić, czy to raczej wina źle napisanego bootloadera (korzystam z Atollica lite i on bez problemu programuje flasha st-linkiem, ale może ustawia jakieś bity zabezpieczające za sobą? to własnie z poziomu TrueStudio kompiluje i wgrywam bootloadera DFU)
2. czy ma znaczenie co wgrywamy (firmware w postaci pliku .dfu) na tym etapie, czy nie ma to absolutnie żadnego znaczenia, a czyszczenie i tak powinien przejść (chodzi mi o to, czy nie popełniłem jakieś błędu związanego z ustawianiem offsetów na adresach i czy to by mogło mieć wpływ) - wydaje mi się że nie powinno to mieć wpływu, a czyszczenie i tak powinien przejść...
No i ostatnie pytanie, bardziej ogólne - czy ktoś miał podobny problem? Trochę się już z tym męczę i skończyły mi się pomysły.
Będę wdzięczny za wszelką pomoc i sugestie. Kodów programów chyba nie ma sensu wklejać - są to przykłady z biblioteki. Szkoda, że nie mam zestawu ewaluacyjnego od ST, może nie wszystko przerobiłem tak jak trzeba pod swoją płytkę...