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!
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.
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.
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.
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
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.
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.
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
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.
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.
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).
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 ;-))
@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.
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?`
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.)
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.
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.
@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...