Hallo Leute, ich verwende momentan einen ATXMEGA32A4U Mikrocontroller. Für den µC möchte ich einen Bootloader schreiben. Die Daten soll über eine USART Schnittstelle in den µC geschrieben werden. Die Antsuerung einer USART stellt kein Problem da. Nun zu meiner Frage. Ich habe ein test.hex Datei. Diese möchte ich jetzt uploaden. Kann ich das HEX-File einfach öffnen und immer 1Byte auslesen diesen an den Mikrocontroller übertragen und dann ab Adresse 0x0000 schreiben? Anschließend den Adresszähler erhöhen und schließlich das nächste Byte schreiben? Oder ist die Datei codiert?
Neben der Codierung kommt hinzu, dass die Daten nicht in der aufsteigender Reihenfolge in der Datei vorliegen müssen. Deshalb sollte man die Datei erst einmal komplett einlesen und dann erst die Programmierung starten.
Wie setzt man dies dann am besten um? Öffnet man die Datei und liest den 1. Datensatz aus (vom Startzeichen bis zum Endzeichen) und überträgt diesen dann per RS232 an den µC Anschließend den nächsten Datensatz auslesen und übertragen
Vielleicht magst Du mal http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung hier schauen. Das ist das Problem und eine Lösung gut beschrieben.
@ Detlev T. mit aufsteigender Reihenfolge meist Du das die Adressen nicht aufsteigend sind? Das ist ja blöd. Ich dachte ich muss nur die Nutzdaten übertragen und kann die Adressen weglassen, damit das Flashen nicht so lange dauert. Das kann dann aber leicht in die Hose gehen :-)
Das Wichtigste ist erst mal das Datenblatt in diesem Bezug zu lesen. Dann sollte man sich ueberlegen, wieviel man aufs Mal programmieren muss, zB eine Page. Dann sollte man sich ueberlegen wie man was uebertraegt. Ich wuerde die Verbindung zB sichern, mit einem CRC oder so. Man kann Binaer, Hex, oder sonstwas uebertragen. Und dann sollte man die Groesse des RAM Buffers auf der Controllerseite im Auge behalten. Wie schnell will man uebertragen, mit oder ohne Handshake, usw
Da du ja den xmega mit USB hast, warum nimmst du nicht einfach den DFU Bootloader (gibts ja fertig bei Atmel) und machst die Programmierung dann via USB über die FLIP Software? Oder Schau dir mal die Appnote AVR2054 von Atmel an. Ist ein Serieller Bootloader mit Srecord Unterstützung.
USB habe ich nicht nach Außen geführt. Geht daher schon mal nicht. Aber ich werde dies mal im Kopf behalten. Der Artikel über den Bootloader hat mir schon mal sehr geholfen. Ich wollte eine CRC-16 Checksummer für die Datenübertragung verwenden. Das Parsen der Datei wollte ich dann auf dem PC übernehmen. Warum steht in der HEX-Datei nach dem ersten Startzeichen eine 04 und bei den anderen Paketen immer eine 10? Demnach werden das erste mal 8 Bytes an Nutzdaten übertragen und danach immer 32Bytes. Warum macht man das?
Martin schrieb: > Warum steht in der HEX-Datei nach dem ersten Startzeichen eine 04 und > bei den anderen Paketen immer eine 10? Demnach werden das erste mal 8 > Bytes an Nutzdaten übertragen und danach immer 32Bytes. Warum macht man > das? Das ist nicht zwangsweise so, aber in deinem Fall werden vermutlich erstmal einige Vektoren wie Reset oder IRQs an eine andere Adresse übertragen und dann beginnt die Übertragung der Daten des Programmes. Intel Hex liefert übrigens im letzten Byte jeder Datenzeile eine Prüfsumme mit.
Martin schrieb: > Für den µC möchte ich einen Bootloader schreiben. Wieder einer, der Lust daran hat, das Rad neu zu erfinden. Es wäre ja zu einfach, einen zu nehmen, der schon funktioniert :-)))
Atmel hat genug davon. Man kann sich natürlich auch die Arbeit machen andere auf den xmega zu konvertieren, aber das würde ich nicht machen. Der Serial Bootloader von Atmel klappt eigentlich ganz gut.
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.