Forum: Mikrocontroller und Digitale Elektronik AT90CAN: Grundlagen Bootloader über CAN


von Andreas (Gast)


Lesenswert?

Hallo,

ich programmiere gerade einen AT90CAN - Baustein und möchte für die 
Zukunft einen Bootloader integrieren, damit ich zukünftige updates über 
die CAN-Schnittstelle machen kann. An die JTAG/ISP-Schnittstelle komme 
ich nicht mehr heran, da die Platine vergossen wird.
Ich habe das ATmelStudio6 und keinen IAR-Compiler o.ä.
Da ich bis jetzt weder mit CAN auf Atmel, noch mit Bootloader Erfahrung 
habe, muss mir das mal jemand prinzipiell erklären - ich blicke da nicht 
durch.
Hier im Forum habe ich schon geschaut und einiges mitbekommen, aber 
leider sind diese Informationen nicht für meinen Wissensstand.

Was ich heraus gefunden habe:
Auf dem AT90CAN ist kein Bootloader intgriert und ich muss ihn 
aufspielen, das geht wohl auch über ISP.
Aber jetzt habe ich schon eine Frage:
Wie spiele ich einen Bootloader auf? Woher weiß der Controller dass das 
ein Bootloader ist uns kein Programmcode?
Woher bekomme ich einen Bootloader, von Atmel gibt es wohl einen, der 
ist aber für IAR-Compiler und den habe ich nicht.

Jetzt zu den Fragen, die später einmal auftreten:
Falls der Bootloader aufgespielt ist, muss ich die CAN-Schnittstelle 
programmieren? (habe ich bisher auch noch nicht gemacht) Aber wenn der 
Bootloader läuft, wird der Programmcode ja gar nicht ausgeführt, d.h. 
ich brauche den CAN-Bus eigentlich nicht programmieren (es sei denn ich 
benötige im Programm einen CAN-Bus, was vorerst nicht der Fall ist).

Ich habe folgende Hardware zur Verfügung:
JTAGICE3, PEAK PCAN-USB Adapter, Ein Oszilloskop mit CAN-Bus Auswertung

So eine Erklärung für Dummies wäre wohl cool

Schöne Grüße

von Frank K. (fchk)


Lesenswert?

Andreas schrieb:

> ich programmiere gerade einen AT90CAN - Baustein und möchte für die
> Zukunft einen Bootloader integrieren, damit ich zukünftige updates über
> die CAN-Schnittstelle machen kann. An die JTAG/ISP-Schnittstelle komme
> ich nicht mehr heran, da die Platine vergossen wird.

Das ist sehr unklug und sollte geändert werden.

> Auf dem AT90CAN ist kein Bootloader intgriert und ich muss ihn
> aufspielen, das geht wohl auch über ISP.

ISP und JTAG, genau wie der Programmcode

> Aber jetzt habe ich schon eine Frage:
> Wie spiele ich einen Bootloader auf? Woher weiß der Controller dass das
> ein Bootloader ist uns kein Programmcode?

Die Applikation sitzt im Flash ganz unten, für einen eventuellen 
Bootloader kannst Du mit den Fuses die obersten 512/1024/2048/4096 Word 
(das Flash ist ja 16-bittig) reservieren. Heißt also: Dein Bootloader 
darf maximal 8192 Bytes groß sein, kein Byte größer.

> Woher bekomme ich einen Bootloader, von Atmel gibt es wohl einen, der
> ist aber für IAR-Compiler und den habe ich nicht.

selber schreiben

> Jetzt zu den Fragen, die später einmal auftreten:
> Falls der Bootloader aufgespielt ist, muss ich die CAN-Schnittstelle
> programmieren? (habe ich bisher auch noch nicht gemacht) Aber wenn der
> Bootloader läuft, wird der Programmcode ja gar nicht ausgeführt, d.h.
> ich brauche den CAN-Bus eigentlich nicht programmieren (es sei denn ich
> benötige im Programm einen CAN-Bus, was vorerst nicht der Fall ist).

Über ein Bit in den Fuses kannst Du einstellen, dass nach einem Reset 
der Bootloader gestartet wird und nicht die Applikation selber. Der 
Bootloader muss irgendwie feststellen, ob neuer Code übertragen werden 
soll oder nicht, entweder per Schalter oder indem eine bestimmte Zeit 
auf ein bestimmtes Paket auf dem Bus gewartet wird. Entweder startet er 
dann des Codetransfer mit anschließendem Reset, oder er startet die 
Applikation.

Wie Du den Code überträgst (CAN, seriell,...) ist Dein Bier.

von Andreas (Gast)


Lesenswert?

Frank K. schrieb:
>> Aber jetzt habe ich schon eine Frage:
>> Wie spiele ich einen Bootloader auf? Woher weiß der Controller dass das
>> ein Bootloader ist uns kein Programmcode?
>
> Die Applikation sitzt im Flash ganz unten, für einen eventuellen
> Bootloader kannst Du mit den Fuses die obersten 512/1024/2048/4096 Word
> (das Flash ist ja 16-bittig) reservieren. Heißt also: Dein Bootloader
> darf maximal 8192 Bytes groß sein, kein Byte größer.

Danke Frank für die Erklärung.
Wenn ich das richtig verstanden habe, gehe ich wie folgt vor:
Bootloader programmieren: Fuses (Reservierung) rausnehmen, damit der 
Bootloader Code ganz unten programmiert wird,
Dann die Fuses wieder auf Reservierung einstellen und den normalen 
Programmcode programmieren bzw. den Programmcode bereits jetzt schon mit 
Hilfe des Bootloaders programmieren.

Aber die Fuses muss ich nach der Programmierung des Bootloaders 
unbedingt wieder auf z.B. 4096 Word setzen, damit der Bootloader Bereich 
geschützt ist bzw. bleibt.

Korrekt?

von Frank K. (fchk)


Lesenswert?

Falsch.

Fuses einstellen
Bootloader an die vorgesehene stelle per isp schreiben
Reset
Applikation mit dem Bootloader programmieren

Den Bootloader musst Du mit anderen Linkereinstellungen compilieren, 
damit es eben ein Loader wird und keine Applikation.

fchk

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.