Hallo. Ich will Daten in den Programmspeicher eines PIC (18f4455) schreiben. Ich nutze den C18-Compiler und MPLAB, zum Debuggen den ICD2. Es gibt auch eine Funktion "memcpyram2pgm()", die in den Programmspeicher schreiben sollte, aber sie tut es eben nicht. D.h. der Programmspeicher bleibt unverändert. Auch mit der Blockgröße von 32 Bytes (Datenblatt) an geraden Adressen geht es nicht. Wer hat hier eine Idee? Viele Grüße, Chris.
Chris schrieb:
> Ich will Daten in den Programmspeicher eines PIC (18f4455) schreiben.
Hallo Chris,
memcpyram2pgm() schreibt nicht in den Programmspeicher. Im
Flash-Speicher muss man 64-Byte-Blöcke löschen und 8-Byte-Blöcke
schreiben, bzw. je nach Prozessor. Wie steht im Datenblatt. Im Programm
muss der beschriebene Algorithmus implementiert werden.
Gruss Reinhard
Hallo Reinhard,
erstmal danke. INzwischen habe ich die Vorgehensweise aus den Datenblatt
implementiert. Allerdings bleibt das Problem bestehen.
Ich lösche zunächst 64Bytes
Dann schreibe ich 2 x 32 Bytes neue Daten (18f4455)
Dabei sollte alles korrekt sein. EECON1 stimmt, EECON 2 mit 55h, dann
AAh geladen und mit EECON.WR-Bit die Prozedur ( Kopieren der Latches in
den Flash ) gestartet.
Der INhalt kommt aber nicht an.
>>>
TBLPTR = (unsigned short long)gPrg.pflh;
EECON1bits.EEPGD = 1;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;
EECON1bits.FREE = 1;
disInt();
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
enaInt();
// write 2 Blocks of new data
for ( i = 0; i < 2; i++ )
{
// latch the data in the 32 Holding Registers
for ( j = 0; j < PRG_BLK_LEN; j++ )
{
TABLAT = buf[i * PRG_BLK_LEN + j];
_asm TBLWTPOSTINC _endasm
}
// trigger Write to Program-Memory
TBLPTR = (unsigned short long)gPrg.pflh;
EECON1bits.EEPGD = 1;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;
//EECON1bits.FREE = 0;
disInt();
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
enaInt();
gPrg.pflh += PRG_BLK_LEN;
}
EECON1bits.WREN = 0;
<<<
*)disInt und enaInt = enable/disable Ints.
Grüße und schönen 4. Advent
Chris.
Hallo, Problem hat sich erledigt. Mein Fehler! Die Daten waren im Flash, aber beim Debuggen hab ich auf den Prog.-Mem. geschaut, der war aber nicht mehr aktuell, weil nicht neu eingelesen. Klar, die IDE kriegt das Table-Write ja auch nicht mit. Gelöst....
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.