mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bootloader-Probleme


Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich möchte gerne mehrere Steuergeräte über den vorhandenen CAN-Bus 
programmieren. In den Steuergeräten sind hauptsächlich AT90CAN128 
verbaut.
Freundlicherweise stellt Atmel ein Beispiel eines CAN-Bootloaders zur 
Verfügung:
http://www.atmel.com/dyn/resources/prod_documents/...

Ich habe den Bootloader mittels ATDragon auf den AT90CAN128 geflasht.
Einzige Änderung am Orginalcode war, dass ich den Pin eines Tasters, der 
gedrückt werden muss, damit der Bootloader startet, auf meine Schaltung 
angepasst habe.

Ist noch kein Code im Application-Bereich startet immer der Bootloader.
Beim Beschreiben der Application-Section wird ein Byte verändert, dass 
die Abfrage des Hardware-Pins aktiviert. Somit bleibt anfangs der 
Bootloader immer aktiv. Beschreibe ich den Application bereich 
(funktioniert einwandfrei), dann sollte der Bootloader nur noch bei 
gedrückter (Boot)taste aktiviert werden.

Leider passiert da was seltsames. Manchmal startet die Application, 
manchmal der Bootloader, obwohl der Boottaster nicht gedrüclt wird.

Hat jemand einen Tipp an was das liegen könnte?

Ich habe die Fuses laut der Anleitung von Atmel programmiert (siehe 
Anhang)
Der Code wurde mit WinAVR20070525 compiliert.

Matthias

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias wrote:
>
> Leider passiert da was seltsames. Manchmal startet die Application,
> manchmal der Bootloader, obwohl der Boottaster nicht gedrüclt wird.

Klingt nach einem floatenden Eingang. Also kein Pull-Up/Down außen dran 
und auch den internen Pull-Up nicht aktiviert.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Danke für die schnelle Antwort.

der interne Pullup ist aktiviert.

Hier mal ein Stück Code vom "Anfang" des Bootloaders:

int main (void)
{
    U8      u8_temp;
    U8      hwcb = FALSE;
    Bool    auto_b = 1;

//! --- First of all, disabling the Global Interrupt
    Disable_interrupt();

//! --- If comming from RESET then test of the HardWare Condition Bit
    if (MCUSR != 0)
    {
        //- Clear all reset flags
        MCUSR = 0;
        //- Get HWCB (HardWare Condition Bit)
        DDRF &= ~(1<<0);      // HWCB pin in input
        if (HWCB_PULLUP_ON == 1)
        {
            PORTF |= (1<<0);   // Pull-up on HWCB
        }
        hwcb = PINF;
        if (HWCB_ACTIVE_LEVEL == 0)
        {
            hwcb = ((~hwcb)&(1<<0));
        }

        //- Start application else start boot loader
        u8_temp = get_conf_byte(BSB);

        if ( ((u8_temp!=BSB_DEFAULT)&&(hwcb==0)) || ((u8_temp==BSB_DEFAULT)&&(hwcb!=0)) )
        {
            isp_jump_to ( (((U16)get_conf_byte(SA_H))<<8) | ((U16)get_conf_byte(SA_L)) );   // Start application
        }
        // else go to BOOT LOADER
    }

Kann es sein das trotz des internen Pullups, der Pin anfangs schwingt?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> der interne Pullup ist aktiviert.

Sicher?
Was ist HWCB_PULLUP_ON? Wieso wird das Aktivieren des Pullup von einer 
Bedingung abhängig gemacht?

Noch was:
Die Zeit zwischen Aktivieren des Pullup und Einlesen des Pins ist 
reichlich kurz.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.