Zeitproblem beim AVR-Flashen via XMODEM

OP #1593168
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
Angehängte Dateien:
OP
Hallo Läubi,

ich verwende die interne Taktquelle vom 1281 (8MHz). Ich verwende weder 
Hardware noch Software Handshaking, sofern du damit die Flusskontrolle 
meinst. Aber natürlich verwendet XMODEM selbst ein Handshaking für die 
Rahmenübertragung.

vG Stephan
Stephan W. schrieb:
> ich verwende die interne Taktquelle vom 1281 (8MHz)

Das ist zumindest grenzwertig.
Es kann sein, daß wenn die Bytes hintereinander kommen, zwar das Byte 
selber noch richtig erkannt wird, aber das nächste Startbit nicht 
rechtzeitig.

Für die UART sollte man immer einen Quarz oder Resonator verwenden, wenn 
man auf Zuverlässigkeit Wert legt oder es ein kommerzielles Produkt 
werden soll und man nicht in Reklamationen sein Geld versenken will.


Peter
OP
Hallo Peter,

danke für Deine Antwort. Wenn ich heute abend meinen µC wieder zur 
Verfügung habe, dann werde ich mal andere interne Oszilatoren verwenden 
(z.B. mit 128 KHz). Andere Schwingquarze oder Resonatoren (kannte ich 
bisher noch nicht) stehen mir leider nicht zur Verfügung.

Vielleicht muss ich auch doch noch eine Flussteureung wie XON/XOFF 
implementieren, sofern das vom Terminal unterstützt werden, vielleicht 
liegt da der Hund ja begraben, denn Das Terminal sendet nach meinem 
Empfinden pausenlos, sodass wenn ich meine "Flashpause" einlege 
eventuell Daten verloren gehen könnten... eigenartig.

vlG Stephan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.