Forum: Mikrocontroller und Digitale Elektronik 18F4550 USB Bootloader


von Darkleon (Gast)


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

von Darkleon (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.