Forum: Mikrocontroller und Digitale Elektronik EEPROM-Bereich des PICs beim Brennen nicht löschen


von Karl-heinz L. (kalli)


Lesenswert?

Hallo alle zusammen,
kann man beim Brennen eines PICs das Überschreiben des EEPROM-Bereichs 
abschalten?
Hintergrund ist, dass ich dort Daten ablegen möchte, die aber nach dem 
Brennen nicht immer wieder neu erzeugt werden sollen.
Ich benutze die Software "US-Burn V1.10 a2" und den "Brenner8, Firmware 
V. 0.13" von Sprut. Den Haken unter "Optionen/includeEEPROM" habe ich 
entfernt, geht aber trotzdem nicht.

Was mache ich falsch?

  Viele Grüße
Kalli
PS: Eine Mail an Sprut habe ich natürlich auch schon geschickt... falls 
von da eine Antwort kommt werde ich es euch wissen lassen

von Klaus (Gast)


Lesenswert?

Man sollte eben besser in den Programmierdaten die Bereiche des EEPROMs 
entfernen.
Dann braucht es nur noch die Einstellung "nur die (Page-) Bereiche 
löschen, die programmiert werden".
Das "ausschneiden" bestimmter Datenbereich aus .Hex Datei macht z.B. das 
Programm  http://srecord.sourceforge.net/

von Karl-heinz L. (kalli)


Lesenswert?

sorry, aber die Einstellung  "nur die (Page-) Bereiche
löschen, die programmiert werden" finde ich bei dem Brennprogramm nicht
Gibt es da config-Parameter im Assembler-file, oder kann man das 
irgentwo in MPLAB einstellen?

von skorpionx (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe das gleiche Problem. Heute habe ich  eine Mail an Sprut 
geschickt.
In einer neuesten Programm Version sieht man schon Vorbereitung 
Vorbereitung (sehe die Optionen) für die Änderung. Übrigens  auch wenn 
*.hex Daten keine Daten für EEPROM Programmierung enthalten, das Inhalt 
vom EEPROM wird gelöscht. Das kann sehr störend bei der Programmierung 
sein. Als vorläufige Lösung könnte man (vor Programmierung!) den PIC 
Inhalt auslesen. Am Ende vom *.hex File befinden
sind die Daten für EEPROM. Die müsste man dann immer am Ende von *.hex 
Daten die MPLAB erzeugt anhängen. Vielleicht muss ich dazu etwas 
hilfreiches erstellen.
Ich programmiere nur in C. In diesem Fall (PIC 18F258)  muss man (vor 
main() ) Z.B. so etwas schreiben:

#ifdef WITH_EEPROM_DATEN
 #pragma romdata section_eeprom_data =0xf00000
 unsigned char  rom     EE_DUMMY_BYTE1   = 255;
 unsigned char  rom     EE_DUMMY_BYTE2   = 254;
 unsigned char  rom     EE_DUMMY_BYTE3   = 253;
 unsigned char  rom EE_DUM[]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
#endif

#pragma code

main()
{
Nur dann  erstellt MPLAB auch Daten für EEPROM im *.hex File

von Karl-heinz L. (kalli)


Lesenswert?

Hallo...
die Mail an Sprut wird vermutlich in seinem Spamfilter hängen bleiben 
;-) , ist meine auch, denn ich habe bis heute keine Antwort.
Bei meinem Projekt bin ich noch nicht weiter, kommt aber wieder, wenn 
ich wieder Zeit dazu finde und es eine Lösung für das Problem gibt.
C kann ich nicht, ich benutze nur den Assembler

von skorpionx (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe die Antwort vom Sprut bekommen:

„Hallo,

das Löschen an sich kann ich nicht verhindern, da ein separates Löschen
nicht bei alles PICs möglich ist.
Allerdings bietet USBurn als Option an, den EEPROM vor dem Löschen
auszulesen, und dann zusammen mit dem HEX-File gleich wieder in den
EEPROM zu schreiben. Das kommt ja auf das Gleiche heraus.
Options - PIC programming options - keep old EEPROM data „

Die Antwort erklärt etwas.  Gleich habe ich den Test durchgeführt.
Um den alten EEPROM-Inhalt zu behalten:

1. Beide Optionen (sehe das Bildchen oben) auswählen
2. im C-Programm muss explizit mindestens eine  Adresse vom EEPROM
beschrieben werden. Ohne das im *.hex File die Beschreibung Sequenz für
EEPROM da ist, funktioniert die Sache nicht. Das Sprut Programm (Beta 
Version) hat noch Probleme mit dem auslesen vom EEPROM. Ich habe 
festgestellt das keine Fehler passieren
wenn das letzte Byte vom EEPROM mit einer Zahl <> 255 beschrieben wird.
Ich habe mich entschieden dort die Version vom Projekt zu schreiben.

Ein Teil von meinem C-Programm:
#define  PROG_VERSION 1
#define WITH_EEPROM_DATEN
#ifdef WITH_EEPROM_DATEN
 #pragma romdata section_eeprom_data =0xf000ff
 unsigned char           rom     EE_PR_VERSION = PROG_VERSION
#endif

#pragma code


void main(void)
 {
…..
if(eeprom_read(255)!=PROG_VERSION)
  eeprom_write(255,PROG_VERSION);
….

Mit Fehler muss man sich arrangieren...

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.