Ok, 0x7800 stimmt.
Hast du das BOOTRST-Flag auf 0 gesetzt?
BOOTSZ0/1 richtig gesetzt?
Das sollte reichen bei "Other Linker flags":
mfgCode:-Ttext=0x7800
Ok, 0x7800 stimmt.
Hast du das BOOTRST-Flag auf 0 gesetzt?
BOOTSZ0/1 richtig gesetzt?
Das sollte reichen bei "Other Linker flags":
mfgCode:-Ttext=0x7800
Hey,
das Bit ist gelöscht (Haken gesetzt) und ich habe in AVR Studio eine Bootloadergröße von 1024W angegeben.
Die Linkerdirektive habe ich ebenfalls eingefügt, aber es funktioniert nicht :/
Fuses sind:
High: 0xDA
Low: 0x24
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Sicher das dein Code richtig ist??
Wenn kein anderes Programm im Flash steht, wird der Bootloader so oder so ausgeführt, da der PC einfach bis zu 0x7800 läuft.
Kopieren kannst du das Programm zudem NICHT. Das wurde für einen Mega8 geschrieben, du hast einen Mega32.
mfg
Hey,
also mein Code sieht atm so aus:
Code:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/boot.h> #include <util/delay.h> #include "uart.h" #define BOOT_UART_BAUD_RATE 9600 /* Baudrate */ #define XON 17 /* XON Zeichen */ #define XOFF 19 /* XOFF Zeichen */ int main() { unsigned int c=0; /* Empfangenes Zeichen + Statuscode */ unsigned char temp, /* Variable */ flag=1, /* Flag zum steuern der Endlosschleife */ p_mode=0; /* Flag zum steuern des Programmiermodus */ void (*start)( void ) = 0x0000; /* Funktionspointer auf 0x0000 */ /* Interrupt Vektoren verbiegen */ char sregtemp = SREG; cli(); temp = GICR; GICR = temp | (1<<IVCE); GICR = temp | (1<<IVSEL); SREG = sregtemp; /* Einstellen der Baudrate und aktivieren der Interrupts */ uart_init( UART_BAUD_SELECT(BOOT_UART_BAUD_RATE,F_CPU) ); sei(); uart_puts("Hallo hier ist der Bootloader\n\r"); do { c = uart_getc(); if( !(c & UART_NO_DATA) ) { switch((unsigned char)c) { case 'q': flag=0; uart_puts("Verlasse den Bootloader!\n\r"); break; default: uart_puts("Du hast folgendes Zeichen gesendet: "); uart_putc((unsigned char)c); uart_puts("\n\r"); break; } } } while(flag); uart_puts("Springe zur Adresse 0x0000!\n\r"); /* vor Rücksprung eventuell benutzte Hardware deaktivieren und Interrupts global deaktivieren, da kein "echter" Reset erfolgt */ /* Interrupt Vektoren wieder gerade biegen */ cli(); temp = GICR; GICR = temp | (1<<IVCE); GICR = temp & ~(1<<IVSEL); /* Rücksprung zur Adresse 0x0000 */ start(); return 0; }
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Hallo,
ich habe mir deinen Programmcode jetzt nicht angeschaut, aber ich habe einen Hinweis an dem ich mir fast mal die Zähne ausgebissen habe. Ich habe meinen Bootloader-Einstieg damals auch mit dieser Anleitung durchgeführt.
Das Problem ist, es ist mit dem AVR-Studio nicht so einfach das eigentliche Programm und den Bootloader *gleichzeitig* in einen Atmel zu flashen. Das ist ein ganz schönes geklicke und konfigurieren. Mann muss wissen was man tut. Ich tat es als Einsteiger in die Bootload-Technik nicht und war komplett überfordert. Ich habe mir dann als Workaround einen Hex-File-Merger besorgt und diesen via Batch-Datei in eine customized toolbar des AVR-Studio eingebunden. In der Anleitung steht ja auch, dass man die Hex-Dateien zusammenführen soll.
Man kann dann jeweils ein Projekt bearbeiten (Bootloader oder Hauptprogramm) und mit F7 erstellen. Dann noch ein ein kurzer Klick auf den Button zum mergen und dann die zusammengefügte Hex-Datei komplett auf den Atmel flashen.
Vielleicht hilft dir diese Info weiter? Wsk8 hat es richtig beschrieben. Ich habe am Anfang durch das flashen meines Bootloaders immer das Hauptprogramm gelöscht. Den Atmel juckt das nicht. Der Flash steht dann voll mit 0xFF, was ein NOP für den Atmel bedeutet. Er führt also einfach alle Nops aus, bis er im Bootloader landet. Das ganze kann dann ganz schön verwirrend werden...
Viele Grüße
Andreas
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Zuerst mal den Flash manuel löschen, dann den Bootloader flashen. Der MUSS dann irgend wann mal aufgerufen werden, sofern alles richtig programmiert und eingestellt wurde.
Wenn dann das Programm geflasht wird, darf der Flash nicht gelöscht werden! Dann sollte auch alles passen.
mfg
Lesezeichen