mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 18F4550 USB Bootloader


Autor: Darkleon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Wie beschrieben bin ich gerade dabei einen für meine Verhältnisse 
payssenden Bootloader zu erarbeiten. Als Original dient mir der MCHPUSB 
Bootloader vom Microchip Framework.

Hab jetzt den ganzen "Müll" mit dem LED-geblinke über Bord geworfen und 
mir eine EEPROM Routine geschrieben, die wie folgt aufgerufen wird.
write_eeprom(0xFF,0x00);

Dabei ist 0xFF die Adresse und 0x00 die Daten.Die Routine sieht 
folgendermaßen aus:
void write_eeprom (byte adr,byte data)
{
//Set EEADR and EEDATA(read from adr and data)//
EEADR=adr;
EEDATA=data;
//Init EEPROM for write instruction//
EECON1bits.CFGS=0;
EECON1bits.EEPGD=0;
EECON1bits.WREN =1;
//Disable Interrupts//
INTCONbits.GIE = 0;
//Write EEPROM (self timed)//
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR=1;
//Enable Interrupts//
INTCONbits.GIE=1;
//Clear the WREN bit (is not done by hardware)//
EECON1bits.WREN=0;
//Clear the EEIF bit (interrupt bit-is not done by hardware)//
PIR2bits.EEIF=0;
//end of write_eeprom()//
}

Hab das getestet (in einem anderen Programm und da funktioniert das 
beschreiben und auch auslesen (mit einer anderen Routine) perfekt.

Im Bootloader siehts folgendermaßen aus:(Ausschnitt)
void main(void)
{
byte temp;
    temp = ADCON1;
    ADCON1 |= 0x0F;

read_eeprom(0xFF);
 if (EEDATA==0x00)
{
    ADCON1 = temp;          // Restore reset value
        _asm goto RM_RESET_VECTOR _endasm
}//end if
} 

Mein Problem ist nun, dass das Lesen und beschreiben nur hier im 
Bootloader nicht funktioniert! Hat jemand schonmal dieses Problem 
gehabt? Denn ich will den Bootloader damit aktivieren oder deaktivieren.
Seltsamerweise übernimmt der PIC beim
write_eeprom(0xFF,0x00);
nur EEDATA(0x00) und nicht EEADR(0xFF).
Auch beim
read_eeprom(0xFF);
übernimmt er nicht EEADR aber gibt mir EEDATA schon zurück. Klarerweise 
dann von der Zelle 0x00.

Weiß mir echt keinen Rat mehr, wieso das genau im Bootlaoder nicht 
funktioniert aber sonst schon, und wieso er EEDATA übernimmt und EEADR 
nie?!

Ach ja, EEPROM Schreibschutz ist natürlich deaktiviert...

Hoffe ihr könnt mir helfen

Danke schon im Voraus.

mfg Darkleon

Autor: Darkleon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat hier niemand eine Ahnung, wieso das vielleicht nicht funktionieren 
könnte? Hat noch niemand mit diesem Bootloader gearbeitet??

Kann ich mir nicht vorstellen.

Bin natürlich um jede Hilfe dankbar.

MfG Darkleon

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.