PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bootloader selber schreiben



H3llGhost
09.11.2007, 12:33
Hallo Leute,

wenn ich theoretisch das Eval Board von AsuroWiki benutzen möchte, brauch ich ja einen neuen Bootloader oder?

damaltor
09.11.2007, 13:57
Nicht unbedingt, du könntestauch per ISP flashen. das geht viel schneller und fehlerfreier als infrarot, allerdings beauchst du eine kabelverbindung (zb ein kleiner stecker auf dem eval board).

robo.fr
09.11.2007, 16:39
du könntestauch per ISP flashen.

In diesem Heft (http://www.elektor.de/products/magazines/specials/mikrocontroller-special-2.271649.lynkx) gibt's ne Bauanleitung dazu.

damaltor
09.11.2007, 19:25
oder auch im rn-wissen. ein kleines, 4poliges kabel (normstecker existieren mit 6 polen (extra vcc und gnd) sowie 10 polen (extra vcc,gnd und eine blinkende led. die restlichen pole (und der der led, falls er nicht benötigt wird) liegen auf masse).

vorteil ist vor allem die geschwindigkeit.

H3llGhost
09.11.2007, 20:06
Also ich zu empfehlen ein ISP-Gerät oder mit einen Kabel, richtig?

Denn ich habe vor einen Bootloader auf den Asuro zu installieren mit dem ich das Bluetooth-Modem ansprechen kann, um es dann als Flash-Möglichkeit nutzen zu können.

damaltor
09.11.2007, 20:40
jaaaa... das wäre durchaus möglich. du kannst zB mal auf www.microsyl.com schauen, klick oben auf "MegaLoad". da ist ein möglicher bootloader. du benötigst einen bootloader, welcher per serieller schnittstelle daten entgegen nimmt und diese in den chip flasht. genau das macht der bootloader.

H3llGhost
16.11.2007, 12:23
Wie kann ich denn nun einen Bootloader für das Bluetooth-Modem schreiben?
Könnte man auch einen Atmega32 installieren?

damaltor
16.11.2007, 20:41
lies mal das was auf microsyl steht, und auch das datenblatt des mega8 oder mega32, welchen du willst.

ein bootloader ist eigentlich ein ganz normales programm, welches inden prozessor geflasht wird, und welches daten empfängt (meist über die uart-schnittstelle) und dann mit spezielen befehlen in den flash-speicher schreibt. meist sind bootloader in assembler geschrieben, weil man dann erstens deutlich kleineren programmcode produziert, der in den bootloaderbereich geschrieben wird, und ausserdem hat man dann einfacheren zugriff auf die entsprechenden funktionen.

ausserdem müssen dann noch die fusebits für "BOOTRST" und "BOOTSZ" geändert bzw angepasst werden, damit der bootloader auch ausgefüht wird.

H3llGhost
21.11.2007, 08:50
Hallo

ich habe mir nun die MegaLoad-Anleitung mal ein bisschen durchgelesen und dann das PonyProg angeschaut ...
Nun ne kleine Frage:
Bevor ich überhaupt loslegen kann brauche ich ein ISP oder STK200 oder?

damaltor
21.11.2007, 14:07
du brauchst irgendeine möglichkeit, den bootloader selbst in den prozessor zu flashen. das ist wie das problem von huhn und ei - du brauchst einen programmer um den code in den chip zu bekommen, und du brauchst den code im chip um ihn programmieren zu können =)

ist aber nicht so schlimm. im rn-wissen sind einige möglichkeiten für einfache und schnell zusammengebaute programmer. auf anderen seiten (google: avr isp) fidest du zT schaltungen, welche nur aus ein paar widerständen bestehen (ich benutze seit ewig solche einfachen dinger, funktioniert tadellos) um den bootloader einzuflashen und die fuses entsprechend zu setzen.

ein stk200 ist eigentlich nur ein board auf dem man einen prozessor einstecken kann, und wo die grundlegende hardware (reset-schaltung, ein paar taser & leds, rs232 schnittstelle) bereits eingebaut sind. dieses brauchst du eigentlich nicht. du brauchst einen programmer, und du musst die serielle schnittstelle mit deinem pc verbinden (dafür brauchst du einen MAX232 und ein paar kondensatoren).

H3llGhost
22.11.2007, 10:28
Ja gut ... :-)
Das stimmt ...
habe ich schon häufiger gesehen ... ;-)

Ich habe es aber nicht hinbekommen mit den Fuses ...
Wo finde ich die?

damaltor
22.11.2007, 15:23
für die fuses gibt es einen kleinen trick: sie werden in zwei bytes angegeben (-> 16 fusebits) (gilt für den mega8)

wie diese zwei bytes heissen, kannst du hier rausfinden:
http://palmavr.sourceforge.net/cgi-bin/fc.cgi
wähle deinen chip aus, und ändere alle einstellungen mit den großen klickboxen unten. dann stehen oben rechts die richtigen fusebytes.

wichtig sind für dich BOOTRST (sollte programmiert werden) und BOOTSZ (müssen je nach der größe deines bootloaders gesetzt werden. dabei ist ein WORD = 2 BYTES, wenn dein bootloader also 512 bytes groß ist stellst du 256 words ein. achte darauf, dass:
CKSEL auf keinen fall 0000 ist --> das bedeutet ein externer taktgenerator ist angeschlossen. und bis du einen solchen hast, ist der avr nicht mehr zu verwenden
CKOPT sollte programmiert sein, um auch in "verschmutzten" umgebungen (motoren, andere störungen) ein gutes taktsignal zu bekommen. leider erhöht sich der stromverbracuh auch etwas.
WDTON soll nicht programmiert sein. ansonsten wird sich der prozessor alle paar millisekunden resetten, sofern du nicht immer den couter löscht.
FINGER WEG von RSTDISBL. wird diese fuse programmiert, ist der reset pin als I/O pin verfügbar, aber dafür gibt es keinen externen reset mehr. du kannst den chip nicht mehr programmieren.
SPIEN muss programmiert bleiben, ansonsten schlatest du spi ab. aber ich glaube, über spi kann man dieses fuse nicht verändern.

am besten ist es, wenn du die fuses aus dem prozessor erstmal ausliest, und in die felder oben rechts eintippst (danach nicht enter drücken, sondern auf den button klicken!!) und dann die einstellungen anpasst.

allgemein wichtig: bei einem avr prozessor ist ein fuse UNprogrammiert, wenn es "1" ist, und programmiert, wenn es "0" ist. das wird jedoch durch deisen fuse calc bereits beachtet.

wenn dann alles fertig ist, flashe deinen bootloader in den prozessor und resette ihn dann. der bootloader sollte nun auf dein programm warten, welches du dann zB über UART übertragen kannst.

H3llGhost
28.11.2007, 08:21
Danke erstmal für diese gute Erklärung!
Ich werde nun erstmal bald mit dem Umbau beginnen und dann habe ich ja auch ein ISP, was ich ansteuern kann ...

H3llGhost
04.02.2008, 17:05
So ...
Nun geht es erstmal los ...
Mein Problem ist folgendes, ich habe mir den Bootloader von Arexx-Henk angeschaut und er benutzt ja Funktionen, aber wie schafft er dass ohne Stack Pointer?

Kann mir jemand bitte helfen?
Danke im Voraus!

Desweiteren habe ich mir folgende Seite angeschaut:
Klick (http://palmavr.sourceforge.net/cgi-bin/fc.cgi?P_PREV=ATmega8&P=ATmega8&V_LOW=1C&V_HIGH=99&M_LOW_0x3F=0x1C&M_LOW_0x40=0x00&M_LOW_0x80=0x00&M_HIGH_0x01=&M_HIGH_0x06=0x00&M_HIGH_0x08=&M_HIGH_0x10=&M_HIGH_0x20=0x00&M_HIGH_0x40=0x00&M_HIGH_0x80=&B_BODLEVEL=P&B_BODEN=P&B_WTDON=P&B_SUT1=P&B_SPIEN=P&B_EESAVE=P&B_BOOTSZ1=P&B_CKSEL1=P&B_BOOTSZ0=P&B_CKSEL0=P&O_BITS=Apply+fuse+bits)

Und ich habe ehrlich gesagt keine Ahnung was die Fusebits bedeuten.
Hat jemand eine Idee wo man dazu eine gute Erklärung findet?

damaltor
07.02.2008, 19:45
den bootloader habe ich mir noch nicht zu gemüte geführt. aber er hat wohl eine möglichkeit gefunden.. XD

die fusebits werden hier erklärt:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=342342#342342