Forum: Mikrocontroller und Digitale Elektronik AT90USB Bootloader schützen


von Dirk T. (dirk_t)


Lesenswert?

Hallo
ich fange gerade erst an mich etwas näher mit dem AT90USB zu 
beschäfftigen, hab früher viel mit PIC's gearbeitet :)
Jetzt blicke ich gerade nicht ganz durch wie ich es hin bekomme den USB 
Bootloader (Flip) von Atmel so zu schützen das ich Ihn nicht mit meinem 
in AVR Studio generierten Programm beim Flashen über USB überschreibe.
Kann mir vieleicht einer sagen ob und welche Fuses ich dafür setzen muss 
oder ob es im AVR Studio eine Möglichkeit gibt beim Linken den Bereich 
es Bootloader frei zu lassen ?

Danke schon mal für eure Hilfe

von ?? (Gast)


Lesenswert?

Es sollte ein bootloader protect bit geben. Schau die die fuses an.

von Stefan Salewski (Gast)


Lesenswert?

>in AVR Studio generierten Programm beim Flashen über USB überschreibe.

Wenn du keinen separaten Programmer benutzt, also dein Programm per 
Flip, dfu-programmer oder ähnlichem überträgst, sollte der 
USB-Bootloader erhalten bleiben. Die Leute, die Probleme hatten, haben 
in der Regel mit einem Programmiergerät wie Atmels ISP-Programmer ein 
kleines Testprogramm aufspielen wollen und dabei den Bootloader 
überschrieben. Dann kann man Atmels Bootloader aber von deren Homepage 
herunterladen und mit dem Programmiergerät zurückschreiben.

von Peter D. (peda)


Lesenswert?

Ein Bootloader sollte schon so minimal clever geschrieben sein, daß er 
nicht seinen eigenen Code zerstört.

Ein Schützen gegen externe Programmer ist nicht möglich, die können nur 
ein komplettes Erase des ganzen Flash.


Peter

von Dirk T. (dirk_t)


Lesenswert?

Hallo erstmal vielen Dank für die schnellen Antworten
Ich habe es gerade noch einmal getestet habe mit AVR Studio ein Projekt 
mur mit der while(1) in der Main erstellt also ohne wirklichen Sinn ;)
aber nachdem ich es per Flip eingespielt hatte kann ich den USB 
Bootloader nicht mehr Starten.

von Stefan Salewski (Gast)


Lesenswert?

>Bootloader nicht mehr Starten.

Du weißt schon, dass Du den HWB gedrückt halten musst, um den Bootloader 
(erneut) zu aktivieren?

von Dirk T. (dirk_t)


Lesenswert?

Ja das weiß ich ;) und das habe ich auch gemacht.

von Stefan Salewski (Gast)


Lesenswert?

>Ja das weiß ich ;) und das habe ich auch gemacht.

Das ist seltsam. Allerdings sind deine Beschreibungen ungenügend.

von Dirk T. (dirk_t)


Lesenswert?

Hallo welche Information sind den notwendig um mehr Licht in's Dunkle zu 
bringen ?

von Stefan Salewski (Gast)


Lesenswert?

Denk mal nach.
(Wie sieht deine Hardware aus (selbstgebaut), wie gehst Du genau vor, 
was ist die Fehlermeldung...)

von Dirk T. (dirk_t)


Lesenswert?

Ok also die Hardware ist zum Großteil nach deinem Beispiel :)
(Experimentierplatine für den AT90USB (1287)) dabei mal ein Dickes Lob 
ist ein sehr schönes Projekt.
Verwendet habe ich einen AT90USB1287.
Also ich kann über meinen ISP anschluss ohne Probleme ein Programm 
aufspielen (benutze das STK500) habe natürlich vorzugsweiße den 
Bootloader wieder aufgespielt :) Danach wurde meine Platine auch im 
Gerätemanager angezeigt und ich konnte mich mit dem Flip Programm 
verbinden.
Wenn ich aber wie erwähnt mein kleines Testprogramm aufspiele (über 
Flip) und starte ist er natürlich erstmal als Device weg. Aber leider 
kann ich Ihn auch dann nicht mehr mit gedrücktem HWB wieder dazu bewegen 
in den Bootloadermodus zu gehen, erst wenn ich den Botloader wieder per 
ISP einspiele gehts wieder.
Oder muss ich wie erwähnt dem AVR Studio irgendwie sagen das der Bereich 
des Bootloaders nicht verwendet werden darf ?
Danke.

von Stefan Salewski (Gast)


Lesenswert?

>kann ich Ihn auch dann nicht mehr mit gedrücktem HWB

Wenn der Bootloader wieder aktiv werden soll, muss der Pin HWB WÄHREND 
des Resets auf Masse gelegt werden. Hast Du vielleicht den Reset 
vergessen?

von Dirk T. (dirk_t)


Lesenswert?

Hab den Controller von der Versorgungsspannung getrennt und dann beim 
wiedereinschalten den HWB gedrückt.

von Dirk T. (dirk_t)


Angehängte Dateien:

Lesenswert?

Ich hab mal mein Test File angehängt vieleicht können Sie das Problem ja 
so nachvollziehen.
Gruß

Edit:
Quelltext der Hex

#include <avr/io.h>

int main (void) {

    while (1)
    {

    }
   return 0;
}

von Stefan Salewski (Gast)


Lesenswert?

>Wenn ich aber wie erwähnt mein kleines Testprogramm aufspiele (über
>Flip) und starte ist er natürlich erstmal als Device weg.

Du bist sicher, dass Du es wirklich über Flip, also den USB-Port, 
übertragen hast? Oder war der ISP-Programmer angesteckt?

Wie bereits gesagt, Programmierung per Flip über den USB-Port sollte den 
Bootloader nicht überschreiben. Das genaue Vorgehen wäre: Reset Pin auf 
Masse legen, HWB Pin auf Masse legen, Reset Pin freigeben, HWB 
freigeben. Dann sollte der Bootloader wieder aktiv werden. Wenn nicht 
hast Du evtl. ein Hardwareproblem. Wobei: Wenn ich diese Aktivierung 
unter Linux viele Dutzend mal gemacht hatte gab es auch irgendwann 
Probleme, bis ich den Rechner neu gestartet hatte. Ich habe das nicht 
näher untersucht, das war wohl ein bekanntes Linux-Problem vor langer 
Zeit...

von Stefan Salewski (Gast)


Lesenswert?

>Hab den Controller von der Versorgungsspannung getrennt und dann beim
>wiedereinschalten den HWB gedrückt.

???

Ich habe bisher nur meine Bus-Powered Platine benutzt, da kann man die 
Versorgungsspannung ja nicht abschalten. Natürlich USB-Stecker ziehen, 
aber das ist etwas anderes. Ich denke HWB auf Masse legen während man 
das Gerät ansteckt sollte auch funktionieren, aber probiere mal mit 
Reset.

Was für ein Programm Du aufspielst sollte egal sein, er sollte stets 
wieder in den USB-Bootloader springen können.

von Dirk T. (dirk_t)


Lesenswert?

So hab mir ebend ein Taster zum Reset-Taster umgelötet und das ganze 
noch mal getestet leider ohne erfolg.
Wie sieht das eigendlich mit den Fuses HWBE und BOOTRST aus? die sind 
beim mir im AVR Studio zur Zeit ohne Haken, wobei ich mir beim AVR 
Studio nie ganz sicher bin ob das jetzt aktiviert oder nicht heisst 
daher hier die Fuses:
Extended: 0xFB
High: 0x99
Low: 0x5E

von Dirk T. (dirk_t)


Lesenswert?

Hab gerade noch etwas mit den Fuses rum gespielet scheint daran gelegen 
zu haben das ich kein Haken bei BOOTRST gehabt habe.
Zur Zeit geht es bei mir.
Aber noch mal vielen Dank für deine Hilfe!
schönen Abend wünsche ich dir noch.
Gruß

Edit:
zu früh gefreut jetzt startet er nicht mehr mein Anwenderprogramm :(

von Stefan Salewski (Gast)


Lesenswert?

>Hab gerade noch etwas mit den Fuses rum gespielet scheint daran gelegen
>zu haben das ich kein Haken bei BOOTRST gehabt habe.
>Zur Zeit geht es bei mir.

Interessant -- die meisten Leute melden sich ja nicht wieder sobald es 
funktioniert.

Fuses HWBE und BOOTRST sagt mir jetzt nichts, ich nutze ja Linux und 
daher auch nicht das AVR-Studio. Ich musste bei meinen Chips keine Fuses 
umstellen, aber die hatte ich vor gut 2 Jahren gekauft. Vielleicht hat 
sich da etwas geändert, oder Dein AVR-Studio hat sie umgestellt.

Auf jeden Fall gut zu wissen, das werde ich mir mal merken und bei 
Gelegenheit nachlesen.

von Stefan Salewski (Gast)


Lesenswert?

>Edit:
>zu früh gefreut jetzt startet er nicht mehr mein Anwenderprogramm :(

Schade...

Das ist schon seltsam. Mit dem AT90USB1287 hatten mit selbst gebauten 
Platinen ja einige Leute seltsame Probleme, der Grund konnte meist nicht 
geklärt werden, weil die sich nicht wieder gemeldet haben. Mit gekauften 
Platinen, USBKEY, hatten die Leute keine Probleme. Irgendwie ist der 
AT90USB1287 wohl etwas empfindlicher. Das einzige Problem, das ich 
anfangs hatte, war mit einem 5 m langen USB-Kabel. Da gab es 
Übertragungsfehler. Ich habe dann einen 1uF Kondensator zur 
Stabilisierung von VBUS auf die Platinen gesetzt, dann war alles OK. 
Aber das hat mit deinem Problem wohl nichts zu tun. Mir fällt sonst 
momentan nichts mehr ein. Wir sollten vielleicht mal über die FUSES 
nachlesen, ich werde mir mal ein aktuelles Datenblatt herunterladen...

von Stefan Salewski (Gast)


Lesenswert?

Vielleicht stimmt wirklich etwas mit den FUSES nicht -- es gibt ja auch 
noch BOOTSZ 0 und 1. Wäre möglich, dass der Bootloader überschrieben 
wird wenn die falsch eingestellt sind. Versuch mal alles auf die 
Default-Werte nach Datenblatt zu stellen.

von Dirk T. (dirk_t)


Lesenswert?

Noch ein kleiner Hinweiß das Starten des Bootloaders mit dem HWB Pin 
scheint nicht so gut zu Funktionieren bei einem Power on Reset klappt 
wirklich besser in verbindung mit dem Reset Pin.
aber ich habe hier noch eine schöne Möglichkeit gefunden den Bootloader 
aus der Applikation zu starten.

#define Disable_timer_int() ( TIMSK0 = 0x00,\
                              TIMSK1 = 0x00,\
                              TIMSK2 = 0x00 )

void (*start_bootloader) (void)=(void (*)(void))0xf000; // Definition

    while (1)
    {
  if ( !(PINA & (1<<PINA6)) ) {
     cli();
    Disable_timer_int();
    _delay_ms(10);
    (*start_bootloader)();
  }
    }

von Stefan Salewski (Gast)


Lesenswert?

>noch eine schöne Möglichkeit gefunden den Bootloader
>aus der Applikation zu starten.


Dazu passt dann wohl dieser Thread:

Beitrag "WinAVR, AT90USB1287, Bootloader aus App anspringen"

von Stefan Salewski (Gast)


Lesenswert?

Und übrigens: Von dem LUFA-Mensch gibt es jetzt wohl auch einen 
Bootloader:

http://www.fourwalledcubicle.com/LUFA.php

Vielleicht besser.

von Dirk T. (dirk_t)


Lesenswert?

Hätte ich mir Denken können das der Beitrag bekannt ist :) aber danke 
für den weiteren Hinweis.

von Dirk T. (dirk_t)


Lesenswert?

Hi
@ Stefan:
hast du zufällig den LUFA DFU Bootloader ausprobiert ? hab ihn mal 
getestet aber bekomme leider beim flashen mit FLIP eine Fehlermeldung.

Gruß

von Stefan Salewski (Gast)


Lesenswert?

>@ Stefan:
>hast du zufällig den LUFA DFU Bootloader ausprobiert ? hab ihn mal
>getestet aber bekomme leider beim flashen mit FLIP eine Fehlermeldung.

Nein, ich bin bisher nicht dazu gekommen mir die LUFA-Sachen anzusehen. 
Da fragst Du wohl am besten den LUFA-Autor direkt, er scheint recht nett 
zu sein. (Statt Flip kann man unter Linux auch den dfu-programmer 
benutzen.)

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.