Hallo Rolf,
Bei mir schlägt calcFlashCheck_S (kompletter Check über das ganze Flash)
nach einem FlashDownload mit FlashDownloader fehl.
Vermutung Problemursache:
Der FlashDownloader überspringt Pages mit "leerem Inhalt".
Dies wäre aber nur erlaubt, wenn das Flash zuvor leer war.
Im Fall Atmega wird nur die letzte Page vor dem Bootloader garantiert gelöscht. Alle anderen Pages werden nur bei "Bedarf gelöscht", so dass Codemüll im Flash bestehen bleibt und ein calcFlalshCheck dies als korrupten Inhalt erkennt.
Gruß Thomas
Codeauszug FlashDownloader
procedure TMainForm.DownLdBtnClick(Sender: TObject);
[...]
begin
[...]
// erase last flash block below loader which may contain bootcheck bytes
[...]
repeat
SendIt:= false;
FillChar(bArr, sizeOf(bArr), $FF);
for idy:= 0 to BlockSize -1 do begin
bb:= FlashArr[idx+idy];
if bb <> $ff then SendIt:= true;
bArr[idy]:= bb;
end;
if Sendit then begin
Bei mir schlägt calcFlashCheck_S (kompletter Check über das ganze Flash)
nach einem FlashDownload mit FlashDownloader fehl.
Vermutung Problemursache:
Der FlashDownloader überspringt Pages mit "leerem Inhalt".
Dies wäre aber nur erlaubt, wenn das Flash zuvor leer war.
Im Fall Atmega wird nur die letzte Page vor dem Bootloader garantiert gelöscht. Alle anderen Pages werden nur bei "Bedarf gelöscht", so dass Codemüll im Flash bestehen bleibt und ein calcFlalshCheck dies als korrupten Inhalt erkennt.
Gruß Thomas
Codeauszug FlashDownloader
Code
procedure TMainForm.DownLdBtnClick(Sender: TObject);
[...]
begin
[...]
// erase last flash block below loader which may contain bootcheck bytes
[...]
repeat
SendIt:= false;
FillChar(bArr, sizeOf(bArr), $FF);
for idy:= 0 to BlockSize -1 do begin
bb:= FlashArr[idx+idy];
if bb <> $ff then SendIt:= true;
bArr[idy]:= bb;
end;
if Sendit then begin