Hallo,
Ich möchte einen Bootloader auf Basis des xnutboot (Original siehe
Anhang) für meinen ATMega 1281 entwickeln. Der Bootloader verwendet für
die Übertragung der Daten das XMODEM-Protokoll (Standard: 128Bytes
Datenrahmen, 1Byte Prüfsumme).Bei vielen Zwischenschritten konntet Ihr
mir durch Eure Antworten hier im Forum bereits helfen. Dafür nochmal an
die beteiligten vielen, vielen Dank.
Der Originalquelltext ist für den ATMega128 geschrieben also habe ich
Ihn für meinen 1281 angepasst:
Baudratenfaktor 25 (laut Datenblatt,19200KBaud,8Bits,1StopBit,
k.Parität)
Umbenennung der Flags UDR; UDRE; TXC; RXC in UDR0; UDRE0; TXC0; RXC0.
Möchte ich nun eine Applikation (z.B siehe Anhang 16Bit_Counter, soll
LEDs zum Blinken bringen) zum µC hin von einem Terminal aus übertragen,
scheint es zeitliche Übertragungsprobleme zu geben. Bei der Verwendung
von Minicom (Linux) und TeraTerm (Windows) habe ich festgestellt, dass
die Applikation nicht vollständig übertragen wird. Setze ich mich jedoch
an den Debugger und debugge das ganze Prozedere von Hand durch,
übertragen beide Applikationen die Datei korrekt. Der Algorithmus
scheint also zu stimmen, aber irgendwo gibt es ein zeitliches Problem.
Um diesen Verdacht zu bestätigen, habe ich vor dem Aufruf der
Flash-Funktion künstliche Pausen eingebaut(1 Sekunde) mittels delay.h.
Verwende ich hingegen HyperTerminal (Windows), dann klappt die
Übertragung auf Anhieb. Hier entsteht nur bei manchen Applikationen der
Effekt, dass das Statusfenster für die Übertragung nicht geschlossen
wird, das Programm jedoch korrekt übertragen wurde.
Also, nochmal knackig zusammengefasst, die auftretenden Effekte:
Teraterm:
Übertragung ohne Debugging bleibt bei ca. 96 % stehen.
Übertragung mit Debugging klappt.
Übertragung ohne Debugging mit künstlichen 1s-Pausen klappt.
Minicom:
Übertragung ohne Debugging klappt nicht. (Fehlermeldung:
"Wiederholungsversuch 0: Sektor nicht bestätigt
Wiederholungsversuch 0: Maximale Wiederholungsanzahl überschritten
Übertragung nicht abgeschlossen")
Übertragung mit Debugging klappt.
Übertragung ohne Debugging mit künstlichen 1s-Pausen klappt hier leider
nicht, auch nicht, wenn ich die Zeit höher schraube.
Hyperterminal: läuft.
Ich weiß nicht so recht, in welche Richtung ich nun am besten testen
sollte. Es stellen sich mir folgende Fragen:
Wo können bei diesem Algorithmus Zeitprobleme auftreten, die die
XMODEM-Übertragung stören? Kann es sein, dass der Code bei meinem 1281
so nicht richtig funktionieren kann, weil ich einen
Architekturunterschied zwischen dem 128 und dem 1281 übersehen habe?
Gibt es jemanden unter Euch, der unter Zuhilfenahme der angehängten
Dateien den Fehler bei sich reproduzieren oder mir seine abweichenden
Erkenntnisse schilden kann?
Ich würde mich über Eure Unterstützung und Vorschläge freuen,
vG Stephan.
----------------
AVR-Studio: 4.17 Build 666
WINARV: Version 20090313