Bootloader, eine weitere Frage

Gast #2314083
Lesenswert?
• ▲
▼
Hallo die Herren,

hätte da noch eine Frage zum Bootloader:
Ich habe es mit der Anleitung aus dem Forum:
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung
mittlerweile geschafft das ich das ganze HEX-File in den Flash-Speicher 
schreiben kann.

Danach sollte der Controller allerdings automatisch in das 
Anwenderprogramm springen. Dies macht er aber nicht.

Wenn ich einen Hardware Reset des Controllers durchführe: Springt er 
zuerst in den Bootloader.
Wartet 10 sec auf eine Eingabe.
Springt danach in das Anwender Programm.


Wieso macht er dies den nicht ohne einen HWR nach dem Flashen mittels 
des Bootloaders?

Verwende einen ATmega32 und Codevision.
Poste auch gerne den Programmcode falls gewünscht, nur denke ich mir das 
der ganze dann doch etwas unübersichtlich ist.

mfg
Gast #2314117
Lesenswert?
• ▲
▼
ok ich musste REENABLE_RWW zu einem späteren Zeitpunkt nochmals 
aufrufen.
1
void REENABLE_RWW(void)
2
{
3
     #asm("ldi r17,0x11");    //Bit 0 – SPMEN: Store Program Memory Enable, Bit 4 – RWWSRE: Read-While-Write Section Read Enable
4
     DO_SPM();
5
}

der Ursprüngliche Aufruf nach dem Page_WRITE hat anscheinend nicht 
funktioniert, da ich die Funktion "boot_spm_busy_wait();" falsch 
umgesetzt habe.

void PAGE_WRITE(void)
{
     #asm
          movw r30,r6;   //move  CurrentAddress to Z pointer
          ldi r17,0x05;  //Bit 0 – SPMEN: Store Program Memory Enable, 
Bit 2 – PGWRT: Page Write
     #endasm
     DO_SPM();
}

Wie setzte ich die Funktion: boot_spm_busy_wait() den richtig um?

Dachte eigentlich das mein void DO_SPM(void) dies mit dem sbrc 
"r16,0x01;" beinhaltet.
1
void DO_SPM(void)
2
{
3
     #asm
4
     WAIT_SPM:
5
          in   r16,0x37;            //SPMCR in Register r16 einlesen   37= Address von SPMCR, passt für ATmega32 
6
          sbrc r16,0x01;            //Skip if Bit in Register is Cleared 
7
                                    //The SPMEN bit will auto-clear upon completion of an SPM instruction,
8
                                    //or if no SPM instruction is executed within four clock cycles. During page erase and page write,
9
                                    //the SPMEN bit remains high until the operation is completed.
10
          rjmp WAIT_SPM;
11
          out  0x37,r17;           //schreibe in SPMCR-Register und führe aus
12
          spm;
13
     #endasm
14
}

Oder liege ich mit meiner Vermutung hier ganz falsch?
Gast #2314144
Lesenswert?
• ▲
▼
ok muss wahrscheinlichdas BIT6 des SPMCR abfragen und so lange warten 
wie gesetzt.

• Bit 6 – RWWSB: Read-While-Write Section Busy
When a self-programming (Page Erase or Page Write) operation to the RWW 
section is initiated,
the RWWSB will be set (one) by hardware. When the RWWSB bit is set, the 
RWW section cannot
be accessed. The RWWSB bit will be cleared if the RWWSRE bit is written 
to one after a
Self-Programming operation is completed. Alternatively the RWWSB bit 
will automatically be
cleared if a page load operation is initiated.

Richtig?
Gast #2314194
Lesenswert?
• ▲
▼
Leider hilft
1
void boot_spm_busy_wait(void)
2
{
3
    while ( !(SPMCR & (1 << 6)) ) {}
4
}

nicht.  "void REENABLE_RWW(void)"  muss ich nichts testo trotz vor den 
Sprung zu Adresse:0 nochmals aufrufen. Nur Warum?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.