Forum: Mikrocontroller und Digitale Elektronik Bootloader für ATXMEGA schreiben


von Martin (Gast)


Lesenswert?

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?

von NurEinGast (Gast)


Lesenswert?


von Martin (Gast)


Lesenswert?

Ist es im I08HEX, I16HEX oder I32HEX abgespeichert?

von Detlev T. (detlevt)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

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

von NurEinGast (Gast)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

@ 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 :-)

von Glubsch (Gast)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

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?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von lustloser (Gast)


Lesenswert?

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 :-)))

von Sebastian (Gast)


Lesenswert?

Gibt es denn einen für nen XMEGA der gut ist?

von Timmo H. (masterfx)


Lesenswert?

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
Noch kein Account? Hier anmelden.