Forum: Mikrocontroller und Digitale Elektronik Bootloader *.hex auf ATmega8 brennen


von Andre D. (lumpi23)


Lesenswert?

Hallo zusammen,

für den Controller eines HID-Konformen USB Gamecontrollers möchte ich 
einen vorhandenen Bootloader in Form einer *.hex File auf einen ATmega8 
brennen. Der Bootloader ist auch extra für diesen Controller erstellt 
worden. Neben dieser Datei habe ich auch die Fuse-Bit einstellungen 
erhalten.

Nachdem ich in den letzten Tagen einige ATmegas unereichbar gemacht und 
entsorgt habe, sowie nach intensiver Recherche bzgl. der allgemeinen 
Vorgehensweise beim Brennen eines Bootloaders wende ich mich an dieses 
Forum.

Zunächst möchte ich ein paar Details nennen, die ich aus den Fuse-Bit 
Einstellungen entnehme (während meine Frage sich dann auf das Hochladen 
der *.hex bezieht):

BOOTRST wird gesetzt. BOOTSZ0 und BOOTSZ1 bleiben gesetzt (default). 
Daraus ergibt sich nach meinen Recherchen die Wortgröße des Bootloaders 
und damit die Speicheradresse, die nach dem Reset angesprungen wird. 
Richtig?

Außerdem wird noch die Clock von 1MHz internal auf High Freq external 
16CK+0 gesetzt. In der Schaltung des Controllers ist ein 12MHz Oszilator 
eingebaut. Übrigens; macht es bzgl. der Fusebit-Clock-Einstellungen 
einen Unterschied, ob ich einen 2-Pin Quarz an XTAL1/2 oder einen 4-Pin 
Quarzoszillator an XTAL1 betreibe? Ich habe zwar rausgefunden, dass das 
durchaus möglich ist, aber nicht, ob man dann etwas an den CLK-Bits 
ändern muss.

Soviel zu den Fusebits. Aus dem Datenblatt des ATmega8 entnehme ich, 
dass die Lockbits auf Werkseinstellungen keinerlei Einschränkungen zum 
Beschreiben des Bootloaders vornehmen. Trifft das zu?
Wenn ja, kann ich dann einfach mit avrdude die Bootloader-Hex-Datei ganz 
normal auf den Chip laden und dann die Fusebits schalten (BOOTRST 
setzen)? Sprich, enthält die *.hex-Datei des Bootloaders auch die 
Informationen, an welche Adresse der Bootloader geschrieben wird?


Vielen Dank im Vorraus und freundliche Grüße,

André Desch

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andre Desch schrieb:
> Sprich, enthält die *.hex-Datei des Bootloaders auch die
> Informationen, an welche Adresse der Bootloader geschrieben wird?

Ja.

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

Andre Desch schrieb:
> Hallo zusammen,
>
> für den Controller eines HID-Konformen USB Gamecontrollers möchte ich
> einen vorhandenen Bootloader in Form einer *.hex File auf einen ATmega8
> brennen. Der Bootloader ist auch extra für diesen Controller erstellt
> worden. Neben dieser Datei habe ich auch die Fuse-Bit einstellungen
> erhalten.
ok

> Nachdem ich in den letzten Tagen einige ATmegas unereichbar gemacht und
> entsorgt habe, sowie nach intensiver Recherche bzgl. der allgemeinen
> Vorgehensweise beim Brennen eines Bootloaders wende ich mich an dieses
> Forum.
bitte genauer erklären

> Zunächst möchte ich ein paar Details nennen, die ich aus den Fuse-Bit
> Einstellungen entnehme (während meine Frage sich dann auf das Hochladen
> der *.hex bezieht):
>
> BOOTRST wird gesetzt. BOOTSZ0 und BOOTSZ1 bleiben gesetzt (default).
> Daraus ergibt sich nach meinen Recherchen die Wortgröße des Bootloaders
> und damit die Speicheradresse, die nach dem Reset angesprungen wird.
> Richtig?
jawohl

> Außerdem wird noch die Clock von 1MHz internal auf High Freq external
> 16CK+0 gesetzt. In der Schaltung des Controllers ist ein 12MHz Oszilator
> eingebaut.
Oszilator oder Quarz ??

> Übrigens; macht es bzgl. der Fusebit-Clock-Einstellungen
> einen Unterschied, ob ich einen 2-Pin Quarz an XTAL1/2 oder einen 4-Pin
> Quarzoszillator an XTAL1 betreibe?
jein, wenn die Fuses auf "Ext. Crysall/Resonator" stehen dann ist das 
für einen Quarz gedacht, aber auch ein extern erzeugter Takt könnte 
eingespeist werden. Für den ist aber "Ext. Clock" vorgesehen.

> Soviel zu den Fusebits. Aus dem Datenblatt des ATmega8 entnehme ich,
> dass die Lockbits auf Werkseinstellungen keinerlei Einschränkungen zum
> Beschreiben des Bootloaders vornehmen. Trifft das zu?
ja

> Wenn ja, kann ich dann einfach mit avrdude die Bootloader-Hex-Datei ganz
> normal auf den Chip laden und dann die Fusebits schalten (BOOTRST
> setzen)? Sprich, enthält die *.hex-Datei des Bootloaders auch die
> Informationen, an welche Adresse der Bootloader geschrieben wird?
ja

Sascha

von Andre D. (lumpi23)


Lesenswert?

Vielen Dank. Habe es jetzt geschafft.

von Peter D. (peda)


Lesenswert?

Falls möglich, solltest Du zum Programmieren unbedingt das AVRStudio 
nehmen, die Bedienung ist (fast) idiotensicher.
Setzt natürlich einen STK500 compatiblen Programmer voraus.

Dran denken, daß der Ausliefungstakt der AVRs 1MHz ist.
Also bevor Du irgendeine Aktion machst, den SPI-Takt auf 125kHz oder 
kleiner setzen!
Ansonsten ist Verfusen garantiert!

Und bevor man überhaupt schreibt, die AVR-Signatur lesen und 
kontrollieren.


Peter

von Andre D. (lumpi23)


Lesenswert?

@Sascha:

Habe deinen Beitrag zu spät gesehen.
Die AVRs habe ich wieder aus dem Müll geholt. In meinem selbstgebsteltem 
ISP laufen nur ATmegas, die auf interne Clock konfiguriert sind. Das 
lässt sich ja beheben.

In der Schaltung ist ein Quarz vorgesehen, ich habe aber einen 
Oszillator verbaut. Was sehr gut funktioniert. Ob das nun so vorgesehen 
ist oder nicht :-D. Mal sehen ob es auch an der Playstation funktioniert 
(die auch HID-Controller unterstützt)

@Peter:
AVR-Studio habe ich schon probiert. Erst v5 und bin verzweifelt, weil er 
meinen AVRISP mkI clone nicht erkennt. Bei v4 dann das gleiche.
Nur avrdude erkannte den ArduinoISP. Ist wohl nicht ganz 
standardgerecht, die Firmware.
Werde mir demnächst einen echten AVRISP mkII zulegen.
Ich finde bei den CLK-Bits keine Einstellung für diesen geringen 
internen Takt. Meinst du einen externen Taktgeber?

von Sascha W. (sascha-w)


Lesenswert?

Andre Desch schrieb:
> @Sascha:
>
> Habe deinen Beitrag zu spät gesehen.
> Die AVRs habe ich wieder aus dem Müll geholt. In meinem selbstgebsteltem
> ISP laufen nur ATmegas, die auf interne Clock konfiguriert sind. Das
> lässt sich ja beheben.
>
> In der Schaltung ist ein Quarz vorgesehen, ich habe aber einen
> Oszillator verbaut. Was sehr gut funktioniert. Ob das nun so vorgesehen
> ist oder nicht :-D. Mal sehen ob es auch an der Playstation funktioniert
> (die auch HID-Controller unterstützt)
dann kannst du ja den Takt mal an deine Verfusten Controller anlegen um 
die wider zu erwecken.

> @Peter:
> AVR-Studio habe ich schon probiert. Erst v5 und bin verzweifelt, weil er
> meinen AVRISP mkI clone nicht erkennt. Bei v4 dann das gleiche.
> Nur avrdude erkannte den ArduinoISP. Ist wohl nicht ganz
> standardgerecht, die Firmware.
> Werde mir demnächst einen echten AVRISP mkII zulegen.
> Ich finde bei den CLK-Bits keine Einstellung für diesen geringen
> internen Takt. Meinst du einen externen Taktgeber?
er meinte den Takt mit dem programmiert wird, im AVR-Studio im ersten 
Tab (wo auch der Typ eingestellt wird)

Sascha

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andre Desch schrieb:
> Nur avrdude erkannte den ArduinoISP. Ist wohl nicht ganz
> standardgerecht, die Firmware.

Ja, Arduino setzt erstens auf der uralten V1-Version des STK500-
Protokolls auf, und zweitens haben sie noch einen "special hack",
mit dem sie den Reset des Controllers erzwingen.

Wenn du's mit AVRDUDE hinbekommen hast, gibt's aber keinen Grund,
dir nur zum Programmieren unbedingt noch den Koloss von AVR Studio
anzutun.

von Andre D. (lumpi23)


Lesenswert?

Sascha Weber schrieb:
> er meinte den Takt mit dem programmiert wird, im AVR-Studio im ersten
> Tab (wo auch der Typ eingestellt wird)

Also die Baudrate? Hatte mit 19200 keine Probleme. Mit anderen Baudraten 
dagegen schon (stk500 sync).

von Lexo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Andre

nicht die Baudrate.
Sondern die ISP Frequenz.
In AVR-Studio wirklich einfach einzustellen.
(Siehe Hochgeladene Bilder)

Gruß

von Andre D. (lumpi23)


Lesenswert?

Gut zu wissen. Allerdings meine ich, dass avrdude keinen Parameter 
besitzt, mit dem man diese Frequenz ändern kann. Wie auch immer, never 
change a running system ;-)

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.