Forum: Mikrocontroller und Digitale Elektronik Bootloader für ATMega128


von Peter (Gast)


Lesenswert?

Hallo


Ich versuche gerade den MegaLoad Bootloader auf meinem ATMEga128 zum
laufen zu bringen.
Jedoch gibt es Probleme. Ich versuche schon den ganzen Tag das
Bootloader File in ICCAVR zu übersetzen. Jedoch erhalte ich immer
Fehlermeldungen, dass  Bibliotheken nicht geöffnet werden können. Ich
habe lediglich das File an meinen AVR angepasst.
Hat jemand einen Tipp für mich woran es liegen könnte? Ansonsten würde
ich mich auch über ein übersetztes hex File freuen. Würde es aber am
liebsten selber machen.

danke euch!

von Werner B. (Gast)


Lesenswert?

Ich habe den loader für den WinAVR portiert. Kannst Du unter
Codesammlung finden. Einfach nach "Megaload" suchen.
Bei angabe des gewünschten USART kann ich Dir ein .hex file bauen.

von Peter (Gast)


Lesenswert?

erstmal danke aber es geht leider immernoch nicht! habe mir auch gleich
mal ein hex file für meine atmega128 erstellt.
habe im make file alles auf meinen MC eingestellt. die fuses stehen
eigentlich auch richtig.
nur will das megaload programm nicht mit meinen mc kommunizieren. auch
mit einem terminal programm empfange ich kein zeichen von mc?
habe aber mit eine anderen geschriebenen programm schon mit meinen mc
per uart0 gesprochen.
naja weiss auch nicht so richtig woran es liegt.

von Peter (Gast)


Lesenswert?

hab noch ein wenig rumgespielt und nun läuft es. also danke dir!

von Peter (Gast)


Lesenswert?

Ja auf meinen ATMega128 läuft nun der Bootloader. Doch leider will er
noch nicht auf meinen AT90Can128. Ist doch eigentlich das gleiche wie
beim Mega128? müsste doch mit den selben File funktionieren.

von plitzi (Gast)


Lesenswert?

Nicht ganz, der AT90CAN hat meines Wissens nach einige IO- SFR-Adresse
verschoben, möglicherweise ist davon auch die UART betroffen, was dann
den Bootloader nicht funktionieren lassen würde. Sie sind also nicht
"binärkompatibel". Aber wenn Du statt der "iom128.h" eine passende
Header-Datei fü den AT90CAN128 einbindest und neu übersetzt, sollte es
gehen.

Jörg

von Peter (Gast)


Lesenswert?

hallo plitzi  du hattest natürlich recht!

hätte icha uach selber drauf kommen könne, dass die adressen nicht 100%
stimmen. naja jetzt wird der mc erstmal von megaload gefunden. jedoch
bleibt er beim flashen einfach stehen.

von Werner B. (Gast)


Lesenswert?

Dann wird möglicherweise der bootloader selbst überschrieben, ist mir
auch schon passiert :(

von Ronny Schulz (Gast)


Lesenswert?

Datz hätte ich auch noch Fragen. Ich muss auch irgendwie sofort auf den
Bootloader umsteigen, da das mit dem ATMEGA128 und den
MOSI/MISO-Durcheinander jetzt so aussieht, dass die jetzt genau auf
meinem UART sitzen. Das heißt, wenn ich mittels Serial Downloading
arbeite, dann muss der MAX232 raus. Aber das ist nmen anderes Thema.

Vom Verständnis her muss ich also die Fusebits setzen, den Bootloader
raufladen, kann dann den Programmierstecker entfernen, MAX232 stecken
und mit Megaload arbeiten?

Was muss ich beim kompilieren meines Codes im Makefile beachten? Der
darf ja dann nicht mehr den kompletten Flash-Speicher benutzen. Der
reduziert sich wegen des schon vorhandenen Bootloaders.

von Werner B. (Gast)


Lesenswert?

Wenn Du den code aus
http://www.mikrocontroller.net/forum/read-4-183976.html#new

verwendst, musst Du im makefile nur
- die richtige MCU eintragen (hier MCU=atmega128)
- die richtige quarzfrequenz eintragen (z.B. F_CPU=16000000)
- den beginn des bootloaders eintragen (für mega128 BOOTSTRT=0x1FC00)
ist meiner meinung nach recht gut kommentiert.

im main.c den richtigen USART ausählen
- #define UART       0   // für den USART der sich mit dem ISP die pins
teilt, bzw
- #define UART       1   // für den zweiten USART

Zudem empfehle ich eine feste baudrate vorzugeben. Bei 16MHz hat sich
38400 bestens bewährt.

MAKE und einfach das .hex-file programmierten.

Mit den fuses kann ich Dir hier aus dem stehgreif nicht helfen, aber
bootsz muss für 512 worte programmiert sein und bootrst muss
programmiert sein.

Viel Erfolg
 Werner

von Ronny Schulz (Gast)


Lesenswert?

Vielen Dank für die gute Einstiegsinfo. Die Punkte hatte ich sogar schon
erledigt (bis auf die feste Baudrate). Meine Frage geht eher dahin, wie
das Hauptprogramm aussehen muss, also was ich mittels Megaload da
reinlade? Es kann doch nicht die gleiche Größe wie vorher haben, weil
die Flashgröße sich ja auf Grund des Bootloaders verringert.

von Werner B. (Gast)


Lesenswert?

Das mit der "Restgröße" ...

Das ist eben so, wenn ich ein auto habe, hat dieses einen tank. Der
braucht platz wiegt auch etwas - braucht also selbst wieder sprit. Die
normalen kompromisse die ich im leben immer wieder eingehen muss ;)

Als hilfe zeigen ja die "standard" makefiles mit avr-size die größe
des erzeugten codes an. Wobei ich dazu übergegengen bin der avr-size
aufruf im makefile mit einem "-x" switch zu versehen, da man bei
ausgabe von HEX zahlen einen direkteren bezug zur startadressen des
bootloaders hat.

von Ronny Schulz (Gast)


Angehängte Dateien:

Lesenswert?

Okay, also einfach schauen, dass der Code nicht zu lang wird. Dennoch
verwirrt mich das alles ein wenig. Ich schaue gerade mal im Makefile
für den Bootloader.

# BootLoader mega64 1k = 0xFC00 = (0x8000words<<1)-0x400bytes
#BOOTSTRT = 0xFC00
# BootLoader mega128 1k = 0x1FC00 = (0x10000words<<1)-0x400bytes
BOOTSTRT = 0x1FC00

Im Datasheet des Atmega 128 steht als Startadresse FC00, wenn man die
1024 words nehmen will. Im Makefile steht aber 1FC00 und beim mega 64
steht, dass was beim 128er im Handbuch steht. Das verwirrt mich.
Außerdem machen mich die Adressen schwach. Laut Startadresse und
Endadresse hat der Atmega128 nur 64k Flash (0000-ffff). Aber ich gehe
mal davon aus, dass das alles in words gesehen wird und damit sich
verdoppelt.

Aber wie ist das mit den Startadressen richtig? Meine Fuses sind lt.
Bild eingestellt (Quarz mit 16 Mhz).

von Werner B. (Gast)


Lesenswert?

Flash-Größe AtMega128 == 64k WORTE == 128k Bytes ==
  0x10000 Worte = 0x20000 Bytes
Größe Bootloader MegaLoad <= 512 Worte == 1024 bytes == 0x400 bytes

Weil der Linker die Startadresse/den Offset in bytes erwartet:

Offset des Bootloader im Flash ist also
0x20000 bytes - 0x400 bytes = 0x1FC00 bytes (oder 0xFE00 Worte)

Das Datenblatt der AVRs spricht immer von "Worten".

Hex rechnen ist gar nicht so schwierig (und hilft beim umrechnen von
US-Meilen in Kilometer ;-))

von Mukesh Sharma (Gast)


Lesenswert?

I am using ATMEL's ATmega128. But I don't get sucess to load the
Bootloder mode. If you have any solution please send to me.

von Ronny Schulz (Gast)


Lesenswert?

@Werner:
Danke für die Erklärung. Ich benutze im Moment doch erstmal den
Bootloader nicht. Also habe dementsprechend meine Elektronik umgebaut
(Leiterbahnen durchtrennt und Drähte gezogen). Da ich den später aber
wieder brauchen werde, wird das Thema mit Sicherheit noch interessant
werden.

von Ronny Schulz (Gast)


Angehängte Dateien:

Lesenswert?

Da eigene Funktionen im Moment nicht laufen (siehe anderer Thread) und
ich endgültig den Bootloader mal hinbekommen muss, probiere ich es mit
dem MegaLoad GCC von Werner von dem Thread:

http://www.mikrocontroller.net/forum/read-4-183976.htm

Gerade weil dieser schon mit dem ATmega128 getestet wurde. Folgende
Konfigurationen wurden im Makefile vorgenommen:

MEGALOAD_NET = -DMEGALOAD_NET
EEPROM   =
LOCKBIT  =
UART     = -DUART=1
BAUDRATE = -DBAUDRATE=19200
F_CPU = 16000000
BOOTSTRT = 0x1FC00
MCU = atmega128

Nach obigen Konfiguration wurden dann auch die FUSE-Bits gesetzt. Dann
wurde alles kompiliert und mit PonyProg geflasht.

Danach habe ich MegaLoad.NET V4.0b1 gestartet, konfiguriert und meinen
Controller neu gestartet. Unter Megaload habe ich dann den Monitor
geöffnet und "Send Reset" gedrückt. Allerdings gibt es keine
Rückmeldung.

Die Frage ist, wo jetzt was passieren sollte?`

von Werner B. (Gast)


Lesenswert?

Flash-File ausgewählen
CommPort + Speed eingestellen
Haken beim Flash programming
unter Messages steht jetzt:
   Open Flsh Hex File
   Flash Hex File OK xxxxx Bytes

AtMega resetten (nicht mit dem buttin, der tut nichts, sondern reset
taster/stecker ziehen und wieder stecken etc.)

von Ronny Schulz (Gast)


Lesenswert?

Und schon wieder nichts passiert:

"Ready, Waiting for target" ....

Kann doch nicht sein.

von Ronny Schulz (Gast)


Lesenswert?

Also .. war doch wieder ein Fehler von mir. Der Bootloader geht. Hatte
diesmal den falschen COM-Port gewählt. Also mit MEGALOAD gehts perfekt.

von Matthias W (Gast)


Lesenswert?

Hallo bekomme beim windowsprogramm einen fehler beim auswählen der hex


error in flash hex file:1042

was bedeutet das????


danke

von trikarbonsäureacetat (Gast)


Lesenswert?

Gib mal das File.

von Matthias W (Gast)


Angehängte Dateien:

Lesenswert?

hier ist es

von trikarbonsäureacetat (Gast)


Lesenswert?

Das File ist in Ordnung. Eine Erklärung wäre, dass es nicht in den AVR 
passt. Sprich, das es für einen anderen AVR erzeugt wurde, als du 
verwendest.

Übertrage das File doch einfach mal mit ISP, dann siehst du ja ob der 
AVR rennt wie Sau.

Ferner kannst du natürlich dem Autor von Megaload eine Mail schreiben. 
Der Mann ist sehr freundlich und hilft sicher wenn möglich.

von Matthias W (Gast)


Lesenswert?

Hallo

also über ISP funktioniert es ja

und der mega hat ja 128KB das Programm ist aber nur <40kb.


eine mail habe ich versucht aber diese kamnm immer wieder zurück 
spamblocked.

von Michi (Gast)


Lesenswert?

@Peter bzw. @all:

Ich kriege den Bootloader nicht mit meinem AT90CAN128 und MegaLoad 6.3 
zum laufen. Funktioniert das Ganze nur mit ner niedrigeren 
MegaLoad-Version? Hat jemand den BL mit dem CAN128 in Betrieb und kann 
bitte sein Hex-File (oder seine Sourcen) mal hochladen?

Ich hab schon alles mögliche probiert - manchmal geht gar nichts, 
manchmal jammert er, dass er Page0 nicht schreiben konnte oder so 
ähnlich...

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.