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
Was ist den die Taktquelle welche du nutzt? Verwendest du Hardware/Software Handshaking?
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.