- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 14

Thema: Mega32 Bootloader

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9

    Mega32 Bootloader

    Heyho,

    ich probiere gerade mich in die Geschichte mit den Bootloadern für Atmel AVR MCUs einzuarbeiten und benutze dieses Tut:

    http://www.mikrocontroller.net/artic...ache_Anleitung

    Ich habe das Programm für den ersten Test kopiert und wollte es auf meinen AVR aufspielen.
    Wenn ich die Startadresse im Linker nicht ändere funktioniert das Programm. Wenn ich die Adresse aber bei einer Bootloadergröße von 1024W auf 0x7800 ändere (2*0x3C00) passiert gar nichts :/
    Ich habe unter den Projekteigenschaften/Toolchain/Linker/Misc folgendes eingefügt:

    -Wl,--section-start=.text=0x7800

    Wo habe ich evtl. was übersehen?
    Danke für die Hilfe!
    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

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Ok, 0x7800 stimmt.

    Hast du das BOOTRST-Flag auf 0 gesetzt?
    BOOTSZ0/1 richtig gesetzt?

    Das sollte reichen bei "Other Linker flags":
    Code:
    -Ttext=0x7800
    mfg

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    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

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    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

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    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

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    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

Ähnliche Themen

  1. Bootloader
    Von Projekt 2252 im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 13.03.2011, 10:33
  2. AT-Mega32 Bootloader löschen
    Von Unkaputtbar im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 14.07.2010, 12:54
  3. Mega32 MCS Bootloader
    Von jo_robot im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 23.02.2010, 21:22
  4. Bootloader
    Von Duesentrieb7 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 21.10.2007, 22:46
  5. Bootloader
    Von SMB-Soft im Forum Asuro
    Antworten: 18
    Letzter Beitrag: 11.11.2006, 18:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests