www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Bootloader Checksummen-Berechnung


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
// Liest den Flash aus und generiert eine Checksumme
unsigned int GetFlashChksSum()
{
  unsigned int iChk = 0x0001; // 1 hinzuzählen, damit in jedem Fall nicht 0xFFFF / 0x0000 raus kommt
  unsigned long iAdr;
  boot_rww_enable();
  for (iAdr = 0; iAdr < 0x1E000; iAdr += 2)
     iChk ^= pgm_read_word_far(iAdr);
  return iChk;
}

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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du Deine Variable für die Prüfsumme erstmalig initialisiert? Das 
RWW-Enable-Funktion ist notwendig, um die Applikations-Sektion im Flash 
nach einem PageWrite / PageErase-SPM-Befehl wieder zu entriegeln. Siehe 
Datenblatt des AVR.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, natürlich, das ist doch diese Zeile:

unsigned int iChk = 0x0001;

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C ist nicht meins. War ja auch nur ´ne Frage. Vielleicht bügelst Du Dir 
ja noch woanders ´was über.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.