Witam.
Ćwiczę sobie podstawy boodloadera (selfprograming) na mikrokontrolerze ATmega644P.
Dla jasności:
ATmega644P to:
256 stron pamięci po 128 dwu bajtowych słów maszynowych na każdej (czyli 64KB flash).
R0 - składowanie pierwszej połówki słowa maszynowego
R1 - składowanie drugiej połówki słowa maszynowego
R30 - składowanie numeru słowa na stronie (pamiętamy o przesunięciu o jedną pozycję w lewo)
R31 - składowanie numeru strony
Popełniłem sobie taki kod:
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zasada działania jest prosta:
1. Migaj sobie diodą na porcie B1
2. Jeśli na pinie B0 pojawi się stan niski olej diodę i zaprogramuj komórki pamięci flash numerem strony, na której leży dana komórka.
Prawie działa.
Po zainicjowaniu selfprogramingu (podanie na B0 na chwilę stanu "0", potem znów "1") sczytuję pamięć flash, i co widzę?
Początek jest niezły. Widać, że kolejne strony zostają zapisywane kolejnymi numerami stron (począwszy od wartości 0).
Poniżej widzimy dwie strony i kawałek trzeciej:
![Obrazek](https://obrazkiforum.atnel.pl/thumb/7975/d0f2dc9a9260fb21a2cd9d18743067b6.png)
Z jakiegoś powodu zapisuje się 17 stron, a później widać niezaprogramowane komórki (255 dec, czyli FF hex):
![Obrazek](https://obrazkiforum.atnel.pl/thumb/7975/4d727e9b8564155b7652ef9db914eb40.png)
Gdzieś musi być bug, którego nie potrafię wyłapać.
Pomogą?
![Szczęśliwy :-)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)