18F4550 USB Bootloader

Gast #1143236
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.
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
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren