www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uart Bootloader für AVR über ZMODEM


Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte gerne einen Bootloader für die AVRs schreiben. Und zwar einen
der über ein Terminal Programm wie TerTerm oder HyperTerminal
seine Daten empfängt. Dabei würde ich gerne das ZMODEM benutzen.
Es soll direkt das HEX Übertragen werden.
Jetzt mein Fragen

1. Gibt es sowas schon? Ich glaube nein oder. Ich habe jetzt schon alles 
abgegrast. Aber alle Bootloader die über serielle Schnittstelle gehen
nutzen nicht HyperTerminal oder TerTerm sondern ein eigens Programmierte 
Windows Applikation. Wenn sowas gibt dann mit Quellen und in C.
Ich werde aufjedenfall wenn ich erfolgreich gewesen bin diesen 
Bootloader uploaden

2. Kennt jemand eine gute Seite wo die Steuerbefehle des ZMODEM 
Standards erlautert sind?

Gruß

micro1

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn Du keine speziellen Grund für ZModem hast, nimm das gut alte 
XModem.
Einfach, simple und geschmacklos. ;)

Kaum Protokoll-Overhead, 128 Byte Blockgröße usw.
Habe ich mit AVR schon öfter benutzt, noch nie ein Problem damit gehabt.

Die Vorteile von ZModem wie Übertragung des Dateinamens und bessere 
Prüfsummenbildung helfen da ja nur sehr bedingt.

Gruß aus Berlin
Michael

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael

Kennst du gute Seiten die das Xmodem beschreiben?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

für XModem reicht sogar die Wikipedia...
http://de.wikipedia.org/wiki/XModem

Sollte eigentlich so gehen:
Terminalprogramm starten, XMODEM-senden auswählen und HEX auswählen.
Jetzt wartet das Terminalprogramm auf ein NAK vom EMpfänger.
Also AVR in den Bootloader starten, dort sendet er ein NAK.
Am einfachsten wäre jetzt vermutlich;

XModem-Blocknummer lesen und in Register merken,
invertierte Blocknummer lesen und in Register merken,
Prüfsummenregister auf 0 setzen
Ab jetzt 128 Daten Byte in Buffer lesen und gleichzeitig zur Prüfsumme 
addieren.
Nach den 128 Byte das nächste Byte mit der berechneten Prüfsumme 
vergleichen -> wenn falsch NAK senden und neu empfangen
-> wenn ok Blocknummer mit invertierter Blocknummer vergleichen
-> wenn falsch NAK senden und neu empfangen
Blocknumemr mit erwarteter Blocknummer vergleichen
-> wenn falsch NAK senden und neu empfangen

Wenn ok sind jetzt 128 Byte Daten im Buffer.

Ist erstmal nur Beispiel.

Ich würde vermutlich das HEX-> BIN gleich beim Empfang erledigen, spart 
Ram-Platz.

Gruß aus Berlin
Michael

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael

Ja Danke. XModem Protokoll läuft auf dem AVR.
Flash Routinen auch. Jetzt  komme ih daan das HEX File zu interpretiern.
Ih wollte direkt das Hex File senden. Aber das bin file sende wie geht 
das?
Wenn ih mit avr obj copy bins erzeuge sendet dfas Terminal nur Quatsch.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn Du direkt das Hex-File sendest, hast Du den Vorteil, daß da nochmal 
Prüfsummen drin sind.
Allerdings musst Du dann wohl einen Ringbuffer bauen, der größer ist als 
die Flashpage. Wenn Du zur Laufzeit dekodierst, kannst DU zwar als Bytes 
gleich in den Buffer schreiben, es endet aber ja nicht unbedingt 
zusammenhängend an einer 128Byte-Grenze vom XModem und auch nicht an 
einer Grenze des Buffers für die Flash-Page.
Irgendwo hatte ich sowas schonaml für was anderes gebastelt, weiß jetzt 
aber nicht, wo...

Allerdings sollte es auch binär keine Probleme geben, der Dateninhalt 
der 128Byte wird normalerweise ja nirgends vom XModem angefasst.
Ich schicke z.B. Wave-Daten zum AVR, die der in ein SPI-Flash schiebt.
Macht auch bei 1MB Dateigröße keinerlei Probleme.

Gruß aus Berlin
Michael

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.