mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90USB Bootloader schützen


Autor: Dirk T. (dirk_t)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ?? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sollte ein bootloader protect bit geben. Schau die die fuses an.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk T. (dirk_t)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bootloader nicht mehr Starten.

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

Autor: Dirk T. (dirk_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das weiß ich ;) und das habe ich auch gemacht.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja das weiß ich ;) und das habe ich auch gemacht.

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

Autor: Dirk T. (dirk_t)
Datum:

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

Autor: Stefan Salewski (Gast)
Datum:

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

Autor: Dirk T. (dirk_t)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dirk T. (dirk_t)
Datum:

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

Autor: Dirk T. (dirk_t)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk T. (dirk_t)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk T. (dirk_t)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk T. (dirk_t)
Datum:

Bewertung
0 lesenswert
nicht 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)();
  }
    }

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Stefan Salewski (Gast)
Datum:

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

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

Vielleicht besser.

Autor: Dirk T. (dirk_t)
Datum:

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

Autor: Dirk T. (dirk_t)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.)

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.