avr - bootloader czytajacy flash czyta co innego po zaprogramowaniu

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.

Reply to
Sebastian Biały
Loading thread data ...

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?

Reply to
Michoo

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.

Reply to
Sebastian Biały

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.