avr - bootloader czytajacy flash czyta co innego po zaprogramowaniu

Nov 21, 2010 2 Replies

Witam.



Piszę sobie specyficzny bootloader.



Bootloader potrafi policzyć sume kontrolną flash w podanym zakresie.



Jesli policzę sume kontrolną *przed* zapisaniem jakiejkolwiek strony za pomoca pgm_read_byte - wynosi ona X.



Jesli teraz zaprogramuje dowolną stronę flash w bootloaderze (boot_page_erase + boot_page_fill + boot_page_write ) i ponownie policzę sumę kontrolną wynosi ona Y.



Jesli wyłacze zasilanie i włacze ponownie - wynosi X.



X jest poprawnie, Y nie.



Czy pgm_read_byte ma jakis problem po uruchmieniu procedury zapisu pamięci flash?



Na razie nie analizowalem precyzyjnie problemu, ale jestem na 100% że nie mam błędu w programie. Pytam, może ktoś wie od razu gdzie jest przyczyna innego dzialania pgm_read_byte.



Pamięc programuje się poprawnie z poziomu bootoadera.


A próbowałeś odczytać zawartość pamięci i policzyć sumy kontrolne "na zewnątrz", zrobić diff?

Można by się wtedy zorientować, czy to błędne dane są czytane, czy np w obliczeniach jest jakiś błąd z powodu zmodyfikowanych rejestrów/zmiennych statycznych?

Owszem, jeden z "sektorów" wykazuje zawartość samych 0xff. Ostatnio zapisywany.

Znalazłem problem. Po wykonaniu zapisu do sektora Flash nie wolno go czytać od razu. Należy wczesnie wywołać boot_rww_enable(). Zmyliło mnie to ze ta funkcja jest zawsze opisywana w kontekście skoku do wgranego programu a tymczasem ona zezwala na odczyt flash. Dokumentacja jest jednak w tym miejscu mocno zawiła i juz nie mam ochoty na analizę, dodanie boot_rww_enable przed liczeniem sumy kontrolnej pomaga.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required