- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Mega32 Bootloader

  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

    Anzeige

    Praxistest und DIY Projekte
    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

  7. #7
    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
    Zitat Zitat von Bumbum Beitrag anzeigen
    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
    Hey,

    setze ich dafür nicht die Linkerdirektive ein, damit der weiß wo er das Programm hinpacken soll?
    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

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

  9. #9
    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,

    im Moment will ich ja nur den Bootloader drauf packen und der sollte dann eine Meldung ausgeben.
    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

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo Kampi,

    das mit den Linkerdirektiven sollte so sein, ich bin aber daran verzweifelt.
    Der Weg zum Ziel war dann zwei getrennte Projekte, eines für den Bootloader, das andere für das Hauptprogramm. Das hat dann auch noch den Vorteil, dass alles strikt getrennt ist.
    Du kannst zum testen die beiden Hex-Files manuell zusammenkopieren. Vom Hauptprogramm die letzte Zeile weg und dann einfach den Bootloader angehängt. Du siehst dann auch gleich in den Hex-Files, ob die Adressen passen. Quasi bist du dann der Linker. Das hilft, um die Vorgänge zu verstehen und mögliche Fehler zu erkennen. Wenn das dann klappt kann ich dir helfen das automatische linken per Shortcut in der Symbolleiste einzurichten.

    @Wsk8: Das meine ich mit dem komplizierten vorgehen. Erst Erase Device, dann Bootloader flashen, dann den Hacken bei Auto Erase Device beim Flash Programm weg machen und dann das Hauptprogramm flashen. Und wehe man vergisst einen Schritt beim 34en Test, dann sucht man Fehler wo keine sind. Deshalb mein "automatisiertes" Mergen des Hex-Files. Da muss man dann beim flashen nicht so viel beachten und kann sich aufs programmieren/debuggen konzentrieren.

    Viele Grüße
    Andreas

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

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

Berechtigungen

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

LiTime Speicher und Akkus