AVR Bootloader Checksummen-Berechnung

Gast #1083149
Lesenswert?

Hallo,

Ich habe einen CAN-Bootloader geschrieben, der brennt auch alle Bytes 
richtig in das Flash (mit Auslesen und Hex-Datei vergleichen bestätigt).

Nun zum Problem:
ca. 300ms nach dem alle Bytes gebrannt sind wird die Checksumme über den 
gesammten Flash (ohne Bootloader) errechnet und der zeigt die falsche 
Zahl. Wenn ich zum zweiten mal diese Funktion starte, dann wird die 
richtige Zahl gezeigt.

Der Code:
1
// Liest den Flash aus und generiert eine Checksumme
2
unsigned int GetFlashChksSum()
3
{
4
  unsigned int iChk = 0x0001; // 1 hinzuzählen, damit in jedem Fall nicht 0xFFFF / 0x0000 raus kommt
5
  unsigned long iAdr;
6
  boot_rww_enable();
7
  for (iAdr = 0; iAdr < 0x1E000; iAdr += 2)
8
     iChk ^= pgm_read_word_far(iAdr);
9
  return iChk;
10
}

AT90CAN128 / GNU GCC 4.3.1 / AVRStudio

Und, was hat es mit dem "boot_rww_enable();" auf sich, ich hab es nicht 
ganz verstanden, nur so viel, dass es den braucht wenn der Bootloader 
die Applikation starten soll.

Vielen Dank für eure Unterstützung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren