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:

Z jakiegoś powodu zapisuje się 17 stron, a później widać niezaprogramowane komórki (255 dec, czyli FF hex):

Gdzieś musi być bug, którego nie potrafię wyłapać.
Pomogą?
