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
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
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
@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.
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
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.