Forum: Mikrocontroller und Digitale Elektronik Mega32U2 bootloader gekillt?


von Kaktus (Gast)


Lesenswert?

Ich hab ein Board mit einem Mega32U2 aufgebaut. Als ersten Test 
folgendes Programm geschrieben:
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
  DDRB = 0xff;
6
  for(;;)
7
    PORTB++;
8
}

Atmel Flip gestartet, Controller wurde anstandslos programmiert. Auf 
"Start Application" geklickt, Programm tut was es soll. Soweit so gut.

Nur: jetzt meldet sich der Controller nicht mehr am USB. Flip sagt 
"Could not open USB device". Hab ich den Bootloader überschrieben? Kann 
sich der Bootloader überhaupt selber überschreiben.

von Kaktus (Gast)


Lesenswert?

Nur zur Info: ich hab das obige Programm in AVR Studio kompiliert und 
dann in Flip das Hexfile geladen.

von Franz Joseph (Gast)


Lesenswert?

Fuse settings?

von Kaktus (Gast)


Lesenswert?

In Flip kann man keine Fuses einstellen. Nur ein Hexfile laden, 
programmieren und das Flash löschen.

Laut Datenblatt wird der Bootloader gestartet, wenn PD7 auf low ist, 
aber nur wenn die HWBE Fuse gesetzt ist. Weiss jemand ob die HWBE Fuse 
per default gesetzt ist? Ich hab PD7 mit GND verbunden aber es tut sich 
nix.

Das ist das Hexfile das ich programmiert hab:
1
:100000000C944C000C9456000C9456000C94560022
2
:100010000C9456000C9456000C9456000C94560008
3
:100020000C9456000C9456000C9456000C945600F8
4
:100030000C9456000C9456000C9456000C945600E8
5
:100040000C9456000C9456000C9456000C945600D8
6
:100050000C9456000C9456000C9456000C945600C8
7
:100060000C9456000C9456000C9456000C945600B8
8
:100070000C9456000C9456000C9456000C945600A8
9
:100080000C9456000C9456000C9456000C94560098
10
:100090000C9456000C94560011241FBECFEFD4E0F0
11
:1000A000DEBFCDBF0E9458000C945E000C9400008F
12
:1000B0008FEF84B985B18F5F85B9FCCFF894FFCFFE
13
:00000001FF

Das sollte ja dem Bootloader nix tun, da er viel weiter hinten sitzt.

von Franz Joseph (Gast)


Lesenswert?

Kaktus schrieb:
> Das sollte ja dem Bootloader nix tun, da er viel weiter hinten sitzt.

Ja richtig. Du hast aber verm. den JMP dorthin gekilled.

von Kaktus (Gast)


Lesenswert?

Logisch, sonst könnte ich ja kaum mein eigenes Program draufladen.

Die Frage ist, ob man IN SEINEM EIGENEN PROGRAMM zwingend zum Bootloader 
springen muss.

Ich denke nicht, da wie schon erwähnt die HWBE Fuse existiert. Wenn die 
gesetzt ist, dann wird automatisch der Bootloader aktiviert wenn beim 
Reset PD7 low ist. Was bei mir der Fall ist.

Die Frage ist, ist die HWBE Fuse per default gesetzt? Falls nicht wäre 
das ziemlich dämlich, da man ja den Controller nicht mehr programmieren 
könnte falls man die Option zum Bootloader aktivieren vergisst oder 
diese durch einen Bug nicht mehr funktioniert.

von Kaktus (Gast)


Lesenswert?

So, laut dieser Seite ist HWBE per default enabled:

http://www.engbedded.com/fusecalc

PD7 ist bei mir low, trotzdem startet der Bootloader nicht ... es kommt 
in Windows auch kein Sound beim an- oder abstecken des USB Kabels.

von Kaktus (Gast)


Lesenswert?

OK, Rätsel gelöst: man muss manuell einen Reset auslösen, ein Powercycle 
(ab- und anstecken) löst keinen Reset aus!

Also: PD7 auf low legen und dann Pin 24 (/Reset) kurz auf GND, dann 
machts badonk und der Bootloader startet.

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.