18F4550 USB Bootloader

Gast #1143236
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.
1
write_eeprom(0xFF,0x00);

Dabei ist 0xFF die Adresse und 0x00 die Daten.Die Routine sieht 
folgendermaßen aus:
1
void write_eeprom (byte adr,byte data)
2
{
3
//Set EEADR and EEDATA(read from adr and data)//
4
EEADR=adr;
5
EEDATA=data;
6
//Init EEPROM for write instruction//
7
EECON1bits.CFGS=0;
8
EECON1bits.EEPGD=0;
9
EECON1bits.WREN =1;
10
//Disable Interrupts//
11
INTCONbits.GIE = 0;
12
//Write EEPROM (self timed)//
13
EECON2 = 0x55;
14
EECON2 = 0xAA;
15
EECON1bits.WR=1;
16
//Enable Interrupts//
17
INTCONbits.GIE=1;
18
//Clear the WREN bit (is not done by hardware)//
19
EECON1bits.WREN=0;
20
//Clear the EEIF bit (interrupt bit-is not done by hardware)//
21
PIR2bits.EEIF=0;
22
//end of write_eeprom()//
23
}

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)
1
void main(void)
2
{
3
byte temp;
4
    temp = ADCON1;
5
    ADCON1 |= 0x0F;
6

7
read_eeprom(0xFF);
8
 if (EEDATA==0x00)
9
{
10
    ADCON1 = temp;          // Restore reset value
11
        _asm goto RM_RESET_VECTOR _endasm
12
}//end if
13
}

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
1
write_eeprom(0xFF,0x00);
nur EEDATA(0x00) und nicht EEADR(0xFF).
Auch beim
1
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
Gast #1143815
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.