Witam
Mam problem z bootloaderem, mianowicie bootloader działa prawidłowo.
Sprawdza sumę kontolną FLASH'a, jeśli jest nieprawidłowa przechodzi do programowania z UART w formacie HEX.
I sprawa jest następująca:
- co jakiś czas po przyłożeniu zasilania mikroprocesor stwierdza błąd FLASH'a i przechodzi do trybu programowania. I nie wiem co się dzieje, gdyż nie kasuję FLASH'a celowo.
W chwili obecnej ustawiłem FUSE-BITY, aby najpierw uruchamiał się bootloader.
Bootloader sprawdza FLASH'a i podejmuje decyzję: czy wykonać skok pod 0x0000, czy przejść do pobierania kodu HEX.
Hipotezę mam taką, że po podaniu napięcia zasilania mikroprocesor najpierw wykonuje przypadkowy kod, następnie po przekroczeniu 3,0V następuje jego reset i wówczas wykonuje się prawidłowy kod.
Soft wydaje się być prawidłowy, dlatego nie podaję go tu, gdyż nie widzę sensu.
Nawet celowo dodałem opóźnienie _delay_ms(4000) ale nie pomaga.
Gdy bootloader czeka na pobranie softu z UART, odczytałem z ciekawości cały FLASH i okazało się, że jest skasowana jedna strona, całe 512 bajtów, ale różnie, czasami zerowa, a przed chwilą była to nawet piąta strona.
-Edit:
Dodałem teraz funkcję sprawdzania rozmiaru to co przychodzi z UART, brakło niestety miejsca na sprawdzenie sumy kontrolnej wiersza HEX. Nieco pomogło, ale nie przeciwdziała wykonaniu przypadkowego kodu.
Jak mogę zaobserwować po komunikatach, kasowanie strony raczej następuje po wyłączeniu zasilania, niż jak sądziłem dotychczas w momencie załączenia.
ROZWIĄZANIE:
- Ustawione FUSE-BITY:
BODPD = CONTINUOUS
SUT = 64MS
BODACT = CONTINUOUS
BODLVL = 3V0
Nie wiem jak to się stało, przeoczyłem BODPD, BODACT - były ustawione DISABLED
Teraz się już prawidłowo ładuje, sprawdzę jeszcze 100x i zobaczymy co z tego wyniknie.
Jak do tej pory już się nie kasuje
Zatem uważam za problem rozwiązany.
Mam problem z bootloaderem, mianowicie bootloader działa prawidłowo.
Sprawdza sumę kontolną FLASH'a, jeśli jest nieprawidłowa przechodzi do programowania z UART w formacie HEX.
I sprawa jest następująca:
- co jakiś czas po przyłożeniu zasilania mikroprocesor stwierdza błąd FLASH'a i przechodzi do trybu programowania. I nie wiem co się dzieje, gdyż nie kasuję FLASH'a celowo.
W chwili obecnej ustawiłem FUSE-BITY, aby najpierw uruchamiał się bootloader.
Bootloader sprawdza FLASH'a i podejmuje decyzję: czy wykonać skok pod 0x0000, czy przejść do pobierania kodu HEX.
Hipotezę mam taką, że po podaniu napięcia zasilania mikroprocesor najpierw wykonuje przypadkowy kod, następnie po przekroczeniu 3,0V następuje jego reset i wówczas wykonuje się prawidłowy kod.
Soft wydaje się być prawidłowy, dlatego nie podaję go tu, gdyż nie widzę sensu.
Nawet celowo dodałem opóźnienie _delay_ms(4000) ale nie pomaga.
Gdy bootloader czeka na pobranie softu z UART, odczytałem z ciekawości cały FLASH i okazało się, że jest skasowana jedna strona, całe 512 bajtów, ale różnie, czasami zerowa, a przed chwilą była to nawet piąta strona.
-Edit:
Dodałem teraz funkcję sprawdzania rozmiaru to co przychodzi z UART, brakło niestety miejsca na sprawdzenie sumy kontrolnej wiersza HEX. Nieco pomogło, ale nie przeciwdziała wykonaniu przypadkowego kodu.
Jak mogę zaobserwować po komunikatach, kasowanie strony raczej następuje po wyłączeniu zasilania, niż jak sądziłem dotychczas w momencie załączenia.
ROZWIĄZANIE:
- Ustawione FUSE-BITY:
BODPD = CONTINUOUS
SUT = 64MS
BODACT = CONTINUOUS
BODLVL = 3V0
Nie wiem jak to się stało, przeoczyłem BODPD, BODACT - były ustawione DISABLED
Teraz się już prawidłowo ładuje, sprawdzę jeszcze 100x i zobaczymy co z tego wyniknie.
Jak do tej pory już się nie kasuje
Zatem uważam za problem rozwiązany.