mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATXMEga Bootloader


Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich bin auf der Suche nach einem Bootloader für den AtXMega128A1.

Die AppNote von Atmel (AVR1316: XMEGA Self-programming) kenne ich; das 
alles funktioniert aus der Application Section heraus auch wunderbar mit 
Flash lesen/schreiben.
Interrupts habe ich ebenfalls aus dem 8k Bootflash zum Laufen bekommen - 
auch wenn ich den Bootloaderbereich anspringe. (LDFLAGS += 
W1,-section-start=.text=0x20000)
Es gibt ein paar Hinweise im Forum, dass die Xmegas nicht den 
Bootbereich anspringen. (Errata Rev. G  Bootflash is nonfunctional...)
Ich verwende die Rev. H des Chips, die lt. Atmel das Problem behoben 
hat.

Was der Chip macht / nicht macht: via SPI fülle ich den Puffer (funzt 
alles), dann rufe ich die Funktion WriteApplicationPage auf; allerdings 
ist der Flash nach der vermeintlichen Schreibaktion leer.

Hat schon jemand Erfahrungen gemacht mit den XMegas bzw. Bootloader?

Gruß
Helmut

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab leider nur ChipRev.G - sorry.

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gutes neues Jahr!

Jetzt läuft der dumme Bootloader.
Ist eine mühselige Angelegehheit gewesen - das STK600 hat meiner Meinung 
nach noch ein paar (SW)Schwächen - das hat mich fast wahnsinnig gemacht, 
dass Aref1 und Aref2 immer wieder auf 0V stehen, obwohl sie programmiert 
sind/waren. Dann läuft der XMega nicht mehr, geschweige von Debuggen 
über JTAG. (rote Led blinkt)
Aus den Atmel AppNotes und viel lesen/lesen/lesen/probieren/schimpfen 
hats jetzt geklappt. (naja, Alltag für unsereins)

Euch (ebenfalls) viel Kraft, Geduld; aber auch Freude an Eurem 
Hobby/Beruf!
Grüßle von
Helmut

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schön, freut mich. Letztendlich geht alles so, wie die Datenblätter 
schreiben?

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, in etwa... :-)
Tja, peinlich; ich hatte SP_LoadFlashWord(..) aus der der 
LoadAppTableWord(..) Funktion ohne die Pause herauskopiert. ==> NVM 
Controller kam anscheinend nicht nach. Ansonsten sehe ich keinen 
weiteren Unterschied bzw. ExamDiffPro sieht keine weiteren Änderungen.
Da ich meinen SPI-Stream zu Wörtern geklebt habe und die Fkt. kopiert - 
ist mir die Pause entgangen.

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag für alle die ebenfalls einen Bootloader zusammenbauen:
die Flash Schreibroutine aus der Datei sp_driver.s geht nur bis 64k.
Ich habe die Funktion SP_LoadFlashPage ein bisschen aufgebohrt; wenn 
RAMPZ (Bits 16..24) ebenfalls adressiert wird ist die zweite Hälfte vom 
Flash auch beschreibbar.

Gruß
Helmut

Autor: Severin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du vielleicht ein Beispiel zu deinem Bootloader? Ich würde gerne 
selber einen dazuschreiben, allerdings habe ich bisher keine Angaben 
gefunden, wie ich die Boot-Section schreiben kann?! bzw. mit welchem 
Programm.
Wie hast du das gemacht?

Vielen Dank, und Gruss
Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
Du findest eine ganze Menge in den Atmel AppNotes.
AVR1316: XMEGA Self-programming ist für das Bootflash.
Ich habe keine PC Software, sondern bekomme von einem anderen Gerät das 
HexFile via SPI durchgereicht ==> habe Routinen für Check etc des SPI 
Verkehrs.
Ich denke wenn Du den PC benutzt und z.B. über RS232 kommunizierst, so 
dürfte es PC-seitig vom ATTiny bis zum ATMega genügend SW geben.
Schreiben der Bootsection siehe Appnote. Du musst die BL-SW in den 
Speicherbereich ab 0x20000 schieben + ein Handling haben was Du gerade 
anspringst (Bootloader, Applikation)

Viel Erfolg,

Gruß
Helmut

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Ich würde eben gerne einen Bootloader für mein Board 
(http://tuneX.aoh.ch)
schreiben, der sollte über USB oder RS232 (UART) mit dem PC 
kommunizieren können, und somit das Programm downloaden.
Aber leider habe ich keine Erfahrung mit Bootloadern.
Hättest du denn irgendeinen Ansatz, wie und wo ich am besten beginne?
Das Datenblatt habe ich schon durchgelesen, aber leider nicht 
herausgefunden, wie ich den Bootloader hineinlade.

Vielen Dank und Gruss

Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

Anhaltspunkte die ich Dir geben kann:
wenn Du auf den Seiten z.B. eines AtMega128 nach Bootloader guckst; da 
ist das ganze Procedere beschrieben.
(Da ist auch der Code beschrieben, lauffähige Funktionen)
Der größte Unterschied (das X im Namen) ist u.a. der NVM Controller des 
XMEGA. Den musst Du Ansprechen für Eeprom und Flash -Zugriffe --- aber 
das ist in den Appnotes von Atmel beschrieben.
Sehr gute Adresse für Bootloader (für AVR AT-iiiiii - ohne X):
Peter Dannegger,
Benedikt Sauter
etc etc bzw. Forumssuche Bootloader.

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Helmut

Vielen Dank für deine Antwort!

Aber es ist ja schwierig ein geeignetes Programm zu finden um den 
Bootloader zu downloaden, oder?
Bisher stiess ich auf PonyProg, aber das funktioniert nicht, da es noch 
nicht für X-Mega ausgelegt ist. Hast du da eine spezielle Software 
verwendet?

Gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo sdz55,

hmmm....
Wenn Ponyprog nicht die Signature Bytes ausliest, dann wäre es 
eigentlich möglich  einen XMega-Code zu laden, indem Du den Programmer 
auf ATMEga128 stellst.
Ponyprog wird das HExfile weiterleiten - Du brauchst aber noch eine SW 
im Bootbereich, die Dir das ganze entgegennimmt....
Ich denke aber eher, dass eine Mail an den Autor hilfreich ist. Dieser 
muss nicht soviel mehr neu schreiben (die Routinen bleiben gleich - nur 
hat der XMega andere Signature Bytes und hat noch weitere (geniale) 
Fusebytes, die andere AVRs nicht haben)
Also ich habe ein STK600 und einen JTAG Ice MkII. Damit kann ich derzeit 
alles ändern was notwendig ist - später geht das dann auch über PC RS232 
und PDI.
Gruß
Helmut

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Helmut Ru wrote:
> Hallo sdz55,
>
> hmmm....
> Wenn Ponyprog nicht die Signature Bytes ausliest, dann wäre es
> eigentlich möglich  einen XMega-Code zu laden, indem Du den Programmer
> auf ATMEga128 stellst.

Das würde mich aber wundern. Immerhin benutzt der XMega ein völlig 
anderes Programmierinterface, sodass nicht nur eine neue Software fällig 
wird, sondern auch neue Hardware.

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie soll das denn gehen? Ich muss das JTAGmkII zuerst mit PonyProg 
erkennen können (funktioniert nicht!).
Danach sollte ich die Device erkennen (kann ich nicht)?!

Helmut Ru wrote:
>Ponyprog wird das HExfile weiterleiten - Du brauchst aber noch eine SW
>im Bootbereich, die Dir das ganze entgegennimmt....

Ich spreche ja auch vom Bootloader, nicht von der Applikation!
Das heisst ich suche ein Programm mit welchem ich meinen Bootloader in 
den Boot-Bereich brennen kann!

Danke & Gruss

Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

jetzt haben wir aneinander vorbeigeredet...
Gegenfrage: wie programmierst Du den XMEga bis jetzt? Hast Du Zugriff 
auf den Flash Bereich?

Gruß Helmut

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich programmiere ihn bis jetzt über JTAG mit dem JTAG-ICEmkII, verfüge 
aber auch über ein STK600 ^^

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, über JTAG ist es leicht möglich, ein Programm in den Bootbereich des 
Controllers zu laden. Die Fuse auf Boot Loader Reset und fertig.
Was anderes kenne ich (bis jetzt) auch nicht.

Gruß
Helmut

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber wenn ich die Fuse doch auf Bootloader-Reset setze, schreibt mir 
avr-Studio trotzdem in den App-Bereich.

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe oben in Thread:

(LDFLAGS += W1,-section-start=.text=0x20000)

im Makefile und Du bist im Bootbereich

Gruß
Helmut

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist denn 0x20000 die Boot-Adresse?
Vielen Dank!

Und damit wird der Bootloader also hineingeladen?

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Severin Z. wrote:
> Ist denn 0x20000 die Boot-Adresse?
> Vielen Dank!

Ah, ok diese Frage habe ich mir selber beantwortet.
Aber konkret, von welchem Bootloader gehst du denn aus?
Welche URL?

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
Du findest für den AVR Tiny .., Mega genügend Bootloader in Assembler 
und C hier in diesem Forum -- Suchfkt. 'Bootloader'; sogar ein eigener 
Artikel.
http://www.mikrocontroller.net/articles/Bootloader
Das was Du selber machen musst - die Codeschnipsel des XMega nehmen und 
einen kompletten BL von irgendeinem AVR ..Mega umschreiben.
Diese Arbeit kann Dir keiner abnehmen - ich selber hab ja ebenfalls 
gesucht (siehe Thread erster Eintrag) - inzwischen bin ich ein Stück 
weiter. Der (fast) einzigen Unterschied Mega/XMega:
Loadflashpage muss anders ausfallen.
Mein uBL nterscheidet sich von vielen, da ich über SPI Daten bekomme 
(die vom PC über einige Geräte durchgereicht werden).

Wenn Du die Direktverbindung zum PC willst, kannst Du z.B. über RS232 
Dein Hex schicken; kleines C# Programm o.ä. bzw. vorhandene PC-SW 
anpassen.
Den BL programmieren geht über JTAG ICE mkII. (oder PDI) Das muss 
einmalig sein.

Ich hoffe ich konnte Dir weiterhelfen. Bei weiteren Fragen melde Dich 
einfach

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Danke für deine Antwort!
Ich werde mich nächstes Wochenende mal dahinter setzen und programmieren 
^^
Dann gebe ich dir Bescheid sobald ich fertig bin.

gruss Severin

Autor: Frager (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hab leider nur ChipRev.G

Wie bekommt man denn heraus welche Revision man hat ?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht drauf. Die Revision G erhielt zusätzlich den Vermerk "ES" wie 
'Evaluation Sample'.

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich bins nochmal! ^^

Ich habe ein Problem wenn ich die AppNote von Atmel nehme und versuche 
zu Flashen, gibt er mir immer ca. 13 Fehler, undefined reference to 
'SP_ReadByte'
oder undefined reference to 'SP_WaitForSPM'
Er kann die Funktionen nicht finden! Wo bekomme ich die SPM funktionen 
her? Kann mir schnell jemand helfen?

Vielen Dank & Gruss

Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

Deine Headerdatei muss richtig eingebunden sein, klingt seehr danach 
dass diese nicht richtig eingebunden wurde.
Nächster (kleiner) Fallstrick:
Im Makefile musst Du die .s Datei mitcompiliren/linken

Viel Spass

Gruss
Helmut

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anmerkung an Travel Rec:

Es heisst IMHO "Engineering Sample".
Aber das sind Spitzfindigkeiten.

Eine Neuigkeit habe ich:
Ab Chiprev. Version H geht der Bootloader in der TQFP und BGA Variante.

Leider hat Atmel keine Zuordnung Errata <---> Chipmarking.
Welche Version ist was? Vielleicht habe ich es auf der Homepage nicht 
gefunden und es ist da? Über Hinweise freue ich mich.

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach doch, jetzt gings fast, nur noch 1 Fehler:

Cannot find sp_driver ??? Was kann ich da tun? ich habe auch schon
versucht dieses File einzubinden, aber leider ohne erfolg

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, auch dieses Problem habe ich nun behoben.
Irgendwie meldet der jetzt so an die hundert Fehler:

Error constant value required ?
Was hat das zu bedeuten? oder was kann ich dagegen tun?

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir niemand helfen?

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

poste mal bitte Deinen Code, denn ich weiss net was bei Dir 
schiefgelaufen ist. Die (in anderen Posts) vielerwähnte Kristallkugel 
dient bei mir nur als Briefbeschwerer; ansonsten ist das Glas etwas 
trübe... ;-)

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code ist der von Atmel Application Note 1316 oder so einfach die 
self programming.
Danke

Autor: Helmut Ru (heru01)
Datum:
Angehängte Dateien:
  • sp.zip (47,4 KB, 450 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
was auch immer bei Dir passiert ist; keine Ahnung. Ohne Code (oder 
extrakte davon) und genaue Beschreibung können die anderen Dir nicht 
helfen.
Deswegen also anbei der compilierte Code von App 1316.

Du solltest Deine Versionen kontrollieren:
AVR Studio: 4.15 Build 623
AVR GCC: 4.3.2

Wenn Du mit der Ice Dir nach Ablauf den Flash ansiehst, müssen mehrere 
Einträge vorhanden sein, u.a. "This is the user signature row." als 
ASCII Abbildung.

Viel Spass, ich hoffe es hilft Dir soweit mal weiter.

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Helmut

Ich habe gerade gesehen, dass ich die falschen Versionen des AVR-Studios 
verwende. Ich werde mal schauen ob ich die neue Version bekomme.

Danke & Gruss

Severin

PS: Der Code ist das example der app-note self-programming

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich habe jetzt mal dein Code-Example genommen und es hat tatsächlich 
funktioniert. Nur wie kannst du eine andere Flashpage schreiben als Page 
0?
Egal welchen wert ich für writeapptablepage() eingebe es wird immer page 
0 geschrieben.

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
Du musst erst EraseAppTable(n) aufrufen, dann den Puffer beschreiben, 
den Du dann ins Flash schreibst.

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi helmut
leider funktioniert es immer noch nicht. Ebenfalls wird das Programm gar 
nicht an stelle 0x20000 geschrieben.
Woran könnte das liegen?

gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

ich war leider krank (knock knock - no response...)
Also erstmal:
schade, dass der Code immer noch nicht geht. Aus dem Sample Code kannst 
Du eigentlich die grundlegende Funktion entnehmen.

Nun die Frage: ich verstehe, wenn Du nicht Deinen ganzen Code posten 
willst. Kannst Du aber das makefile und das Gerüst doch als Zip packen 
und mir persönlich mailen oder ins Forum stellen? Dann kann ich Dir auch 
eher helfen.
Warum z. B. nicht an Stelle 0x20000 lokatiert wird kann ich nur raten...

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Es geht mir nicht darum, meinen Code zu schützen. Aber es  ergibt keinen 
Sinn, wenn ich dir den Code schicke, welchen du eh schon hast ^^
Ich habe bloss die Zeilen

EraseAppTablePage(0) und WriteAppTablePage(0) in EraseAppTablePage(1) 
und WriteAppTablePage(1)geändert.

Aber bei mir schreibt er immer noch nicht an die richtige Stelle.
Wäre es denn nicht möglich, dass du mir deinen Bootloader zusendest, 
denn ich werde ihn nicht veröffentlichen, sondern nur an meine 
Bedürfnisse anpassen.

Vielen Dank.

Gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
mir geht es aber darum meinen Code zu schützen... Ich verwende den Code 
nicht persönlich, sondern beruflich. ==> Ich kann Dir nicht das 
komplette Projekt zusenden; aber immer funktionierende und getestete 
Codeschnipsel.

Die Funktionen rundherum sind Kinderfasching (Timeouts, entgegennehmen 
von Daten, etc) - das bekommst Du selber hin - der Knackpunkt ist aber 
die Funktion der Flashprogrammierung, dass Daten auch wirklich ins Flash 
geschrieben werden.

Das was Du nicht geschrieben hast: an welche Stelle des Flash schreibt 
er denn die Daten? Welche Daten schickst Du?

Wichtig(ste) Frage: welche Version des AtXMegas hast Du?
Letzte Zeile des Chipmarkings: 35953 X ES
Das X verrät Dir die Version.

Bin gespannt auf Deine Antwort....

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut!

Danke für deine Antwort!
Ach so, na dann haben wir die Grauzone mal geklärt ;-)

Bei mir wird immer nur die AppTableSection geschrieben, aber das ist ja 
nicht das was man erreichen sollte oder?
Irgendwie eigenartig, bei meinem Chip steht:
ATXMEGA128A1
AU 0832

Kannst du damit etwas anfangen?

Ja genau das ist der Knackpunkt.
Ich habe eigentlich schon alles darauf vorbereitet. Die einzige Funktion 
die ich noch brauche wäre das mit dem Flashen.
Ich würde nämlich gerne einen Bootloader zur UART-Übertragung nutzen.
Ich arbeite übrigens halb-privat/halb-geschäftlich daran.
-->Es ist ein Lehrlingsprojekt.

Gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

Lehrlingsprojekt? Respekt. Du hast Dir eine ziemliche Kanone als Chip 
herausgesucht.
Also: bei Dir wird die AppTableSection geschrieben. Grund einen 
Luftsprung zu machen? Ja. Dann funktionierts doch!
Du scheinst das Funktionsprinzip noch nicht ganz verstanden zu haben.
Also, ich probiers mal:
In der 8k Bootloader Section ist nur der Code, der Dir dafür sorgt, dass 
Daten entgegengenommen werden (z.B. über RS232) und mit einer CRC 
überprüft werden; dann werden diese Daten ab Flash Adresse 0x000000 
geschrieben und ein Neustart durchgezogen. Der Controller springt wieder 
den Bootloader bereich ab 0x20000 (das ist mit den Fuses fest 
eingestellt) an und Du brauchst eine Logik, die ausliest, ob das OS 
schon geschrieben wurde, wenn ja, soll er die IntVects umbiegen und von 
der AppTableSection beginnen (->das User Programm läuft)
Im User Programm brauchst Du eine Kennung über RS232, die ihn wieder in 
den Bootloader springen lässt- zum Entgegennehmen eines anderen OS.
==> Du schreibst zwei Programme. Das eine ist der Bootloader - der Code, 
der ab 0x20000 residiert und ein OS, das beginnt ab 0x000000.

Schau Dir bitte die fertigen Codes für einen ATmega-irgendwas an! Das 
hat mir (damals) auch weitergeholfen.

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut!

Danke für deine Antwort.
Ich glaub ich weiss was du jetzt denkst: "oh nicht doch, ein kleiner 
Junge der sich an einer Diplomarbeit versucht". Ich kann dich von daher 
beruhigen. Ich bin im 2ten Lehrjahr und wollte etwas neues machen. Dabei 
suchte ich mir eine interessante Arbeit aus und stiess auf den XMEGA.

Ich habe schon etliche Programmier- wie auch Hardwareerfahrung, wie z.B. 
Timer, Schnittstellen, ADC, DAC usw.
Leider habe ich bisher noch gar nichts mit Flash oder Speicher gemacht. 
Und ersuche dich daher um Hilfe ^^.

Ehm das mit der AppTableSection ist eben ein Problem, denn ich habe ja 
noch nicht mein Programm hinein geladen sondern nur den Beispiel-Buffer 
wie in der AppNote und dabei habe ich nichts getan ausser dem File 
compiliert und geflasht.

Aber wie funktioniert den das genau? sry wenn ich nicht ganz mitkomme 
;-)
Ist es denn beim Xmega nicht so wie z.B. bei einem ATMega32, wo der 
Bootloader nach einem Chip-Reset zuerst startet?

Meine Anwendung:
Mir geht es eigentlich darum, dass ich einen Bootloader habe, der nach 
dem Reset (wie schon erwähnt) startet, ein Zeichen über USB sendet und 
während 200ms wartet, ob irgendein Zeichen zurückkommt, welches bedeutet 
dass er neue Software erhält, diese Flasht und danach das Programm 
ausführt. Oder sobald der Timeout erreicht ist soll er das Programm 
ausführen.

Kannst du mir dazu evtl. die Programmteile beschreiben, welche ich 
brauche und was beim XMega gegenüber eines ATMegas anders ist, erklären?

Bereits vorhandene Software:
USART Kommunikation (USB), delays, etc.

Vielen Dank & Gruss Severin

Autor: Helmut Ru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Severin,
>Ich glaub ich weiss was du jetzt denkst: "oh nicht doch, ein kleiner
>Junge der sich an einer Diplomarbeit versucht". Ich kann dich von daher
>beruhigen. Ich bin im 2ten Lehrjahr und wollte etwas neues machen. Dabei
>suchte ich mir eine interessante Arbeit aus und stiess auf den XMEGA.

ich glaube Du glaubst ganz falsch....
Auch ich habe eine Ausbildung gemacht bevor ich weiterstudiert habe.
Dabei hab ich eines gelernt: nicht hochnäsig auf andere zu gucken.
Wenn das bei Dir falsch rübergekommen ist: tut mir leid. Manche Dinge 
bereiten mir beim XMega auch einiges Kopfzerbrechen; z.B. gerade der 
ADC, warum der nicht 8 Kanäle ohne große Umstellerei samplen kann; etc 
etc.

Das Thema Bootloader ist alles mögliche; aber nicht trivial; Deine 
Aufgabe - egal ob in Assembler oder C oder C++ oder was auch immer:

Du brauchst drei Teile:

* Du brauchst ein Programm auf dem PC- egal in welcher Sprache, das Dir 
die .hex File Deines OS häppchenweise über RS232 an den Mikrocontroller 
reicht. Dazu kommt evtl. eine Kommunikation mit Timeouts auf beiden 
Seiten; CRC Checks ob alles richtig übertragen wurde;

* Dein OS beinhaltet z.B. in der Main-Loop einen Teil, in der es den 
Bootloader über Reset anspringen kann. Ansonsten ist das gute am OS, das 
es wachsen und wachsen kann - der Bootloader schaufelt das an die 
richtige Stelle.

* Dein Bootloader: der sitzt in dem Speicherbereich, der nach dem Reset 
des µCs immer angesprungen wird. Du brauchst eine Kennung im µC, dass 
der BL ein leeres System oder ein Bl + OS auf dem Controller ist. Diese 
Kennung kannst Du z.B. ins EEProm schreiben. Oder wie Dein Vorschlag: 
Timer wartet auf Eingang des neuen Os, ansonsten kommt ein Reset (auch 
wieder mit Merker) auf  den alten OS-Bereich.

Ein Unterschied (von einigen) zwischen Mega und XMega ist der 
unterschiedliche Zugriff auf Flash und EEProm. Du hast einen NVM 
Controller, über den Du das Handling des Speichers laufen lassen musst.

Deine Aufgaben sind nur in einzelnen Schritten zu bewältigen: Du 
brauchst das PC Programm, das Dir erst mal ohne Checks auf Zeit und 
Richtigkeit Zeichen liefert, die Du über RS232 im µC entgegennimmst und 
dann ab 0x000000 in den Flash schreibst. Wenn Du das hast - dann hast Du 
eine ganze Menge... Danach brauchst Du wie oben beschrieben ein System, 
bei dem Du weisst wo Du bist: Bootloader ohne OS, BL mit gechrashtem OS, 
BL mit funktionierendem OS. Klingt blöd, hilft viel: zeichne mal die 
Situationen auf bevor Du loslegst. Dann folgt der Code auch einfacher 
nach. Als nächstes kommt die Absicherung mit Timeouts, CRC, Wiederholung 
von Blöcken etc.
Du hast nun ohne das PC Programm schon einige Blöcke für den µC; jetzt 
bist Du dran weiterzumachen.

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Vielen Dank.
Das mit der Datenübertragung (häppchenweise), würde das mit dem 
H-Terminal hinhauen? (http://der-hammer.info/) Ich habe leider noch 
nicht viele Informationen darüber gefunden.
Vielleicht kennst du die Software und weisst gerade darüber Bescheid, 
ansonsten frage ich den Entwickler mal an.

Gruss Severin

PS: Das "Blockschaltbild" habe ich nun gezeichnet.

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
Du musst selber dafür sorgen, dass Deine Datei Os.hex (oder wie immer Du 
sie nennst) übertragen wird. Dabei wirst Du CRC und Timing benötigen.
Ob das ein fertiges Programm fertigbringt, Dir eine Datei zu lesen in 
128 Byte Happen glaube ich fast nicht. ==> Do it yourself.
Dazu kommt noch ein bisschen die Auseinandersetzung mit dem Intel 
HexFile Format...


Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Ich blicke einfach noch nicht durch ^^
Was bedeuten die einzelnen Bereiche des Speichers genau?
Im Datenblatt steht unter AppTableFlashSection, this is a section where 
data can be stored. heisst das diese Sektion wird gar nicht wirklich 
gebraucht?
Und dann die AppFlashSection=AppTableSection? Das ist doch der Block in 
dem mein UserProgramm läuft, oder?
Hingegen die BootloaderSection ist mir wieder klar.

Und werden die Daten, welche per UART ankommen direkt ins Flash 
(AppFlashSection) geschrieben?

Danke und Gruss

Severin

Autor: Helmut Ru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
der AppTablebereich ist wie ich es verstanden habe der gleiche Bereich 
wie der AppFlashsection.
Du kannst in den Tablebereich eben wie der Name sagt Tabellen 
hinterlegen - also erst mal uninteressant.
>Und werden die Daten, welche per UART ankommen direkt ins Flash
>(AppFlashSection) geschrieben?
genau.

Eine Idee für das Protokoll ist z.B. ATMEL Application Note 350.
Das kannst Du auf PC Seite und µC Seite realisieren.

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Danke für deine Antwort. Ich werde mir das Beispiel Morgen mal 
anschauen.

Gruss Severin

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, jetzt habe ich noch mal mit dem Flashen nachgesehen.
Leider wird immer noch nur AppTable 0 geschrieben, und zwar nur mit 255 
Bytes.

Kann ich das irgendwie umstellen, oder was könnte falsch sein?

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
EDIT:

Ich habe herausgefunden was welcher Bereich ist und wozu man ihn 
brauchen kann.

AppTableFlashSection:
Variablenspeicher für Globale Variablen und Arrays

AppFlashSection:
Programmspeicher ab 0x000000

Das Problem war, dass ich zu Beginn die APPTABLE_SECTION_START Adresse 
auf 0x000000 hatte, deshalb hat er mir immer Page 0 überschrieben, 
welche im Minimum 255 Bytes sein muss.

Ich werde nun noch ein wenig herumexperimentieren.

Noch eine Frage:
Wie biege ich die Startvektoren um?

Danke im voraus!

Gruss Severin

Autor: Helmut Ru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

Vektoren knicken: dazu gibts zwei Funktionen, die Du zum Thema brauchst.
AppNote 1305 verrät Dir mehr...

Das ist wie beim Geocachen / Multi: Du musst über viele Stationen zum 
Ziel...
;-)

Gruß
Helmut

Autor: 1234 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interrupts im bootloader ... machen den Prozess viel komplizierter als 
noetig. Ich wuerd mal ohne beginnen.
Was du benoetigst : Buffer fuer die empfangenen Bytes, denn das 
Limitierende wird das Schreiben des Flash sein.

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs denn mit Assembler? jmp:0x000000;

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi all,

Ich bins mal wieder...
Ich habe da noch eine Frage zum AVR Studio:

Und zwar habe ich noch einmal die Daten von Helmut geöffnet und danach 
geflasht. Nur schreibt der mir, das der Programm-Counter immer im 
Bereich von 0x100 - 0x200 ist. das heisst die vermeintliche Bootloader 
software wird an Adresse 0x100 geschrieben (entspricht App-Section)
Was mache ich falsch, oder besser wo sollte sich der Bootloader 
befinden, denn 0x20000 befindet sich nicht im internen SRAM, besser 
Flash.
Wo kann ich überprüfen ob der Bootloader drinn ist, und wo finde ich 
eine Beschreibung zu den einzelnen Speicher-Sections?
Habe jetzt neue XMegas und wäre daher sehr froh über eine schnelle 
antwort!

Danke & gruss

Severin

Autor: hmm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Datenblatt ?

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja super!!! danke hat mir jetzt echt weitergeholfen...
Solche Antworten kann man sich auch sparen.
Wenn es im Datenblatt stehen würde hätte ich es schon längst gefunden!

Autor: HelmutRu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

Gruesse aus England. Kann gerade nicht recht antworten - hole ich nach.

~Gruesse von Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi helmut

warst du das vorhin? Wenn ja sorry! dachte es wäre irgendso ein 
Foren-Spammer.
Habe im Datenblatt nachgeschaut aber werde immer noch nicht schlau 
daraus.

gruss Severin

Autor: Helmut Ru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin, nein, ich bin das wirklich.
Habe gerade wieder 3 Min Netzugang< helfe Dir wenn ich wieder in 
Deutschland bin. Verbringe gerade Urlaub in SuedWestEngland.
Mehr von mir in 5 Tagen
Gruss Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK! Danke
Noch eine schöne Zeit!

Gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
so, jetzt bin ich wohlbehalten zurück.
Also:
Der BootloaderBereich ist ab 0x20000 im Flash.
Der Flashbereich der Applikation beginnt ab 0x00000.

Du kannst überprüfen, wo was im Flash steht wenn Du den kompletten Flash 
ausliest. Hast Du eine JTAG-ICE mk II? Wenn ja, kannst Du den kompletten 
Chip betrachten - das hilft schon mal viel für den Bootloader.

Du hast zwei Programme:

Das Bootloader-Programm für den AVR ist im Bereich ab 0x20000 im Flash. 
DAs Verschieben des Programms dahin mit: (LDFLAGS +=
W1,-section-start=.text=0x20000) Wenn Du Interrupts benutzt, musst Du 
die Intvecs umbiegen.

Das OS-Programm beginnt ab Flash 0x00000. Dieses Makefile musst Du nicht 
mit .text = ... verschieben.

MitHilfe des Bootloaders, den Du per PDI oder JTAG einspielst, kannst Du 
dann später das OS- Programm über eine Schnittstelle in den XMEga 
senden. Das OS (also die .HEX Datei) versendest Du über ein 
selbergeschriebenes Programm des PCs, z.B. über RS232.

Wenn das OS geschrieben ist benötigst Du eine Routine (bzw. Funktion) 
die (z.B. aus dem EEprom) ein Flag setzt, dass ein gültiges OS 
geschrieben wurde.
Wenn das OS gültig ist, kannst Du ein SW-Reset durchführen.
Das OS wird ausgeführt, benötigt aber eine Funktion zur Erkennung, ob 
ein neueres OS geschrieben werden will.

Hoffe ich konnte Dir weiterhelfen. Die Fragen, die Du gestellt hast sind 
für mich nicht ganz klar wo es jetzt hakt. Kannst Du das bitte 
Umformulieren oder anders/ genauer beschreiben was Du gemacht hast, wo 
und warum. (Will net aneinander vorbeireden)

Die Flashbeschreibung findest Du im Datenblatt (das 444 Seiten Pdf Rev 
F0209, S. 19)

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Danke für deine Antwort!
Mein Problem ist, dass ich mit dem neuen uC dein Programm (welches du 
mir als zip zur Verfügung gestellt hast) nicht korrekt ausführen kann.
Er springt bei mir immer gleich in die endlosschlaufe "fail".
Aber ich habe keine Ahnung warum.

Und dann habe ich vor kurzem mal nachgesehen wo, dass das programm sich 
wirklich drinn befindet. Dazu habe ich ein kleines Programm geschrieben 
das irgendwelche Ports initialisiert etc. und dabei sah ich, dass der 
ProgrammCounter erst bei 0x100 beginnt, heisst das, der Programmbereich 
beginnt erst da?

Und dann noch etwas: Ist es möglich den Bootloaderbereich zu debuggen?
Ich habe ihn schon im Speicher gesucht aber nirgends gefunden.
Denn mein Speicher geht bis max. 0x10000 oder so.

Danke Gruss

Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

kannst Du mir Dein Programm als .zip senden? So kann ich keine Aussage 
treffen, weil ich nicht weiss was Du programmiert hast.
Hast Du KDiff3? So wäre es möglich, dass ich Dir evtl. den Code ändere 
und zusende und Du den Unterschied der Versionen gleich siehst? (sofern 
ich den Fehler finde)

Zu den Fragen:
Den Bootloader zu debuggen geht: wenn Du an den Portpins wackelst und 
Dir das mit einem geeigneten Werkzeug betrachtest. So habe ich die 
logische Abfolge des Bootloaders mit dem Oszi (16 Kanal digital) 
betrachtet und wusste, dass die Reihenfolge der Abarbeitung stimmt. Für 
das OS hatte ich zum BL verschiedene Ports, so dass ich wusste wo sich 
der µC gerade befindet.
Die Abfolge muss sich mit dem decken, was Du Dir als  Struktogramm o.ä. 
vorher überlegt hast.
Was geht: mit der JTAG ICE kannst Du den BL debuggen (Du siehst alles 
als C Code, wunderbar; aber nach dem SW-Reset und dem Sprung ins OS 
siehst Du im Disassembler Asm-Code. Das kann dann kein C mehr sein, da 
der Debugger da nicht mitkommt den aufgelösten Code anzuzeigen. Wenn Du 
jedoch in Asm fit bist, siehst Du was sich tut. Für mich war lediglich 
wichtig, die Einsprungadresse zu kontrollieren.

0x100 ist der SRam Bereich. Wenn Du von Speicher schreibst, schreibe 
bitte immer welcher gemeint ist. Du hast die Wahl zwischen SRAM, EEPROM, 
FLash...

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Ich sende dir zuerst noch ein Bild, damit du weisst was ich meine.
Du siehst da eine ComboBox wo "Data" ausgewählt ist.
Beim Xmega gibts ja folgende auswählbare:
- EEPROM
- FLASH
- Extended EEPROM (bin ich nicht sicher)
- Extended SRAM
- SRAM
- Data

Wenn ich diese Bereiche durchchecke, dann sehe ich, dass das FLASH nur 
von 0x00000 bis 0x10000 geht, da ist gar kein Platz für einen 
Bootloader. Das heisst, wo finde ich den Bootloader-Speicherplatz?
Im Data gibts den ja auch nicht, ebensowenig wie im EEPROM oder SRAM.
Im extended SRAM ist der vorhanden (allerdings leer, da ich gar keinen 
externen Speicher angeschlossen habe), aber sonst nirgendwo.
Ich meine, kann man diesen Bereich überhaupt im Speicher finden und so 
anzeigen, oder gibts den nicht?

Nun noch zum Xmega, kann es sein das Rev H kein Bootloader unterstützt 
oder was mache ich falsch?

Gruss Severin

Autor: sdz55 (Gast)
Datum:
Angehängte Dateien:
  • sp.zip (47,4 KB, 162 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hier sende ich dir noch meine ProgrammDaten, sollten dir sehr bekannt 
vorkommen da du mir sie geschickt hast.

Gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
das Prg. hättest Du mir nicht senden brauchen - ich habe es bereits. Ich 
dachte Du sendest ein auf Deine belange angepasstes Programm.

Das Memory Fenster ist ein bisschen unhandlich; ich habe zum Auslesen 
immer
direkt das Flash ausgelesen mit dem JTag Programmer in der AVR Studio 
Umgebung.

Ich weiss nicht was Du geändert hast. Hab ich Dich recht verstanden: 
geänderte HW und der µC ist in der Fail Schleife?
Du kannst Deinen Code senden, gerne auch privat bzw. deren Teile die 
nicht funktionieren.

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Ja ich habe nur das Programm geladen.
Dabei springt er dauernd in die false schleife.

wie liest du denn das flash aus?
einfach über "Connect to Target"?

gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
ja, connect to target schreibt nicht nur die Speicherbereiche, sondern 
liest sie auch. Einfach auf "Read gehen" und den Bereich als .hex 
speichern und mit einem Texteditor oder Hexeditor (z.B. Hex Workshop) 
betrachten.
Üblicherweise lese ich EEPROM und Flash Daten auf diese Weise aus.

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Vielen Dank! Werd ich gleich mal ausprobieren!
Ich dachte du liest das ganze Zeug immer per MemoryView aus ^^
Das hat mir sehr geholfen.

Aber mit der Rev H müsste es schon funktionieren oder?

Gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja klar, Rev. H läuft bei mir.

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut!

Endlich hat es funktioniert. Nun kann ich die Pages von 0 bis 15 
schreiben. Allerdings noch nicht von 0x000 + Offset.
Weisst du, wie ich das machen muss?

Ich komme da einfach noch nicht draus?! ^^

Was ich jetzt begriffen habe ist, dass das OS dann immer von unten 
(BootloaderStartAdresse - PageSize * PageToWrite) geschrieben wird.

Beim compilen steht da immer Data 100% Full (8192 Bytes) ist das richtig 
so, oder schreibt der jetzt gar nicht in den Programmbereich sondern 
füllt bloss den Datenbereich?

Danke und Gruss

Severin

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt gemerkt, wie du oben sagtest, dass da nur 64k beschreibbar 
sind. Kannst du mir erklären wie ich die oberen 64k schreibe?

Vielen Dank

Gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

ich habe mal bei Atmel 'whats changed' nachgelesen:
inzwischen haben die den Bootloader samt Doku nochmals refurbished 
(neudeutsch für: den alten Kram aufgewärmt)
Hatte noch keine Zeit so richtig drüberzugucken - für Dich könnte das 
Ding aber interessant sein.

Gruß
Helmut

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Helmut

Das sind ja mal gute Neuigkeiten!!
Schaue mir das mal an.

Danke und Gruss

Severin

Autor: Dirk Tostmann (tostmann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier gibts einen seriellen Bootloader basierend auf den ANs, gleich nach 
gcc geportet und von mir für avrdude angepaßt:
http://www.avrfreaks.net/index.php?name=PNphpBB2&f...

Gruß!

Autor: sdz55 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Link.. Kann den Bootloader aber nicht finden.

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1 Thread, Button Download

Autor: Dirk Tostmann (tostmann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man muß angemeldet sein um dort files aus dem Forum laden zu können.
Hier meine Version mit kleinen Patches bzgl. avrdude: 
http://busware.de/tiki-download_file.php?fileId=22

Autor: Ssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Hat irgendjemand schonmal einen bootloader bei nem xmega64 benutzt ?
Ich hab rev H und wenn ich den Bootloader ins flash ab  0x10000 kopiere 
und fuse2 auf 0xBF (bootloader reset) aktiviere startet der bootloader 
nicht.
Weiss jetzt aber nicht ob es an meinen linkersettings etc liegt oder an 
meinem gehackten avrdude um den bootbereich zu flashen:
avrdude mit -U boot:w:main.hex
gelinkt ab 0x10000
testweise in der avrdude.conf bootsize auf 0x1FFFF gesetzt (ich glaub in 
der stk500v2.c müsste der offset für den bootbereich anders gesetzt 
werden)
programm landet  in 0x10000-X
(mit -U flash:w:main.hex kann man nur 0x00000-0x0FFF beschreiben, mit -U 
boot:w:main.hex den bootbereich)

Ich glaub ich muss mir Dienstag mal nen Windows PC und debugger 
schnappen...
Bin da ratlos...
Oder ist der xmega64a1 evtl buggy im bootbereich ? Ist zwar Rev H aber 
im Datasheet is nur ne Errata für den 128er :(

Gruss

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi alle!

So, nun läuft mein erster Bootloader doch noch...
Ich danke euch vielmals für euren tollen Support!
Und vor allem dir, Helmut, möchte ich danken, da du nicht an mir 
verzweifelt bist! =)

Gruss Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,
da freu ich mich mit. Warum sollte ich an Dir verzweifeln?
Ich finde cool, dass DU
* nicht aufgegeben hast
* das hingebracht hast
* Dich da reingebissen hast (das brauchst Du immer wieder)

Das Forum ist ja dazu da, sich gegenseitig zu Helfen; die Nöler, Gröler 
und Besserwisser und Trolls einfach nicht beachten... :-)

mit sonnigen Grüßen aus dem Muschterländle,
Helmut

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Helmut

Jetzt noch eine kurze Frage..
Kennst du gerade, oder sonst wer, ein geeignetes Tutorial für C++ wo man 
ein eigenes Terminal schreiben kann. Oder besser eine Erlkärung der 
Kommandos/Befehle für die Serial Ports?

Ich würde nämlich noch gerne ein Terminal für meinen Bootloader haben.

Danke und Gruss

Severin

Autor: Helmut Ru (heru01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Severin,

das ist das große Kapitel "PC Programmierung"...
Aber auch kein Problem - das kriegst Du auch hin:
z.B.
Beitrag "Frischling braucht Hilfe mit C#/Serielle Schnittstelle"
für C# oder
Beitrag "Visual Studio C++ COM-Port / Seriell: 8Bit in einem Byte direkt übertragen"
für C++.
Hängt sehr davon ab welche Hochsprache Du mit welchen Libs nutzen 
willst.
(.NET ?) oder oder oder

Beispiele/Tutorials gibts zuhauf im Netz, mit Google bekommst Du jede 
Menge Treffer.

Gruß
Helmut

Autor: Thomas K. (muetze1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Severin Z. (Firma: Roche) (sdz55)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da sage ich nur: Danke Schön!
Und werde mich mal hinter diese Bespiele setzen und schauen was ich 
davon brauchen kann.

Danke und Gruss

Severin

Autor: Markus Burrer (Firma: Embedit Mikrocontrollertechnik) (_mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich versuche gerade, den Bootloader hier zum Laufen zu bekommen, 
aber es rührt sich nichts. Hab keine Ahnung, wieso.

Ich habe den Eindruck, dass der Xmega gar nicht in den Bootbereich 
springt, weil ein normales Programm an $0000 angesprungen wird, obwohl 
ich die Fuse auf Boot Loader Reset umgestellt hab. Muss man noch mehr 
umstellen?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche ChipRevision hast Du? Alle unter H hatten ein Problem mit der 
Bootsektion. Ansonsten muß natürlich der Bootloader auch bei 0x020000 
stehen. Umgestellt werden muß lediglich die Boot-Reset-Fuse. Falls Du 
Interrupts benuzt, muß die Vektorentabelle ebenfalls im oberen Flash 
vorhanden sein und die CPU darauf hin verschoben werden.

Autor: Markus Burrer (Firma: Embedit Mikrocontrollertechnik) (_mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inzwischen funktioniert der Bootloader ... fast.

Ich kann mit avrdude zwar ein Programm an den Controller schicken, aber 
dann kommt ein Verify Error und ich lande wieder im Bootloader

Was mich verwirrt ist: wenn ich den Bootloader programmiert habe 
funktioniert er. Wenn ich im AVR Studio Erase Boot Section auswähle wird 
er nicht gelöscht. Wohl aber, wenn ich Erase Application auswähle.

Also liegt der Bootloader wohl nicht in der Boot Section sondern ab 
Adresse $0000. Da funktioniert logischerweise Self Programming nicht.

Ich vermute, dass dem AVR Studio die Information fehlt, das Programm 
nicht ab $0000 zu compilieren sondern ab der Adresse der Bootloader 
Section. nur wo und wie muss ich die angeben? Und muss nicht auch im 
Code irgendwo die Page angegeben werden? Ich arbeite mit der AppNote von 
Atmel. Da fehlt das leider alles

Autor: Markus Burrer (Firma: Embedit Mikrocontrollertechnik) (_mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Travel Rec. schrieb:
> Welche ChipRevision hast Du? Alle unter H hatten ein Problem mit der
> Bootsektion.
Kann man die Controller Revision irgendwie abfragen? Ich bin mir 
eigentlich sicher, dass es Rev H ist, weil alle anderen auch H sind. 
Aber ich kann natürlich nicht mehr schauen, weil er eingelötet ist.

> Ansonsten muß natürlich der Bootloader auch bei 0x020000
> stehen.

Ich habe jetzt in den Memory Settings im AVR Studio folgendes 
eingetragen:
Memory Type: Flash - Name: .text - Address: 0x10000

Beim compilieren erzeugt er folgendes
avr-gcc -mmcu=atxmega128a1 -Wl,-Map=xmmbl.map -Wl,-section-start=.text=0x20000 sp_driver.o eeprom_driver.o main.o usart_driver.o     -o xmmbl.elf

Jetzt habe ich aber das Problem, dass sich er Bootloader nicht mehr 
rührt. BOOTRST steht definitiv auf Boot Loader Reset. Wenn ich eine 
normale Application ins Flash lade wird diese gestartet.

Entweder wird trotz gesetztem Fusebit an Adresse $0000 gesprungen oder 
er springt in den Bootloader, hängt sich da irgendwie auf und soringt an 
$0000. Ich vermute ersteres.

Das Hex File fängt mit
:020000022000DC
an. Sollte also alles stimmen

Was läuft da nur falsch? Inzwischen bin ich mit meiner Weisheit am Ende

Autor: Markus Burrer (Firma: Embedit Mikrocontrollertechnik) (_mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry das ich spamme. Ich hab jetzt mal auf blöd statt dem *.hex File 
das *.elf File hochgeladen. Damit funktioniert es plötzlich.

Kann mir jemand erklären, warum?

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.