www.mikrocontroller.net

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


Autor: Karl-heinz Lachmund (kalli)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Karl-heinz Lachmund (kalli)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: skorpionx (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl-heinz Lachmund (kalli)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: skorpionx (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.