ADuC706x DataStorage

Gast #2123972
Lesenswert?

Hallo ,

ich habe einen Mikrocontroller von AnalogDevices
named: ADuC7060

Alles wunderbar, leider werde ich nicht gescheit aus den
Examples, ich möchte schlicht ein oder zwei Bytes
über einen Reset/Powerless hinaus abspeichern/laden.

Gibt es Hinweise, welche Register dafür geeignet sind ?

Danke für Hinweise
 Karsten
Moderator Persönliche Seite #2124315
Lesenswert?

Karsten Schulz schrieb:
>[...]
> named: ADuC7060

Vorab: mit ADuC7060 habe ich bisher nichts gemacht, jedoch jüngst recht 
viel mit ADuC7026. Auf den ersten Blick scheint die Funktionalität für 
in-application-programming identisch, habe aber nichts alles genau 
verglichen.

> Alles wunderbar, leider werde ich nicht gescheit aus den
> Examples, ich möchte schlicht ein oder zwei Bytes
> über einen Reset/Powerless hinaus abspeichern/laden.
>
> Gibt es Hinweise, welche Register dafür geeignet sind ?
Ja: Die Register, deren Bezeichnungen mit FEE beginnen. Aber das hilft 
wahrscheinlich auch nicht wirklich weiter...

Vor Schreib- und Löschoperationen muss freigeschaltet werden, vgl. 
Bitbeschreibung FEEMOD.

Gelöscht werden kann, wie üblich bei Flash-Speichern, nur seitenweise 
(Seitengröße 512 Bytes) und damit werden alle enthaltenen Bits gesetzt. 
Vorgehensweise: Eine Adresse innerhalb der Seite in FEEADR, Code für 
Operation Erase-Page in FEECON, dann FEESTAT abfragen, bis busy-bit 
gelöscht und schliesslich prüfen, ob im letzten gelesenen FEESTA-Wert 
das command-fail-Bit gesetzt war.

Schreiben kann man halb-Wort-weise (16bit) und damit vorher beim Löschen 
gesetzte Bits löschen. Schreiben eines 16-Bit Werts: Adresse in FEEADR, 
Wert in FEEDAT, Code für half-word-write in FEECON, FEESTAT-Abfrage wie 
beim Seitenlöschen. Es gibt auch eine schreiben-und-prüfen Operation, 
kann man aber auch per "if (*(Adresse)==Sollwert)" machen.

Falls die "ein oder zwei Bytes" nur selten geändert werden, kann mann 
mit einem read-modify-write Ansatz auf immer der selben Seite arbeiten, 
falls nicht, muss man ein "wear-leveling" implementieren. Relativ 
einfacher Ansatz dafür in einer Application Note von STMicro für STM32 
(Titel "EEPROM emulation with STM32" oder so ähnlich).

Viel Erfolg.
Gast #2124913
Lesenswert?

ALso danke erstmal für den Hinweis das jene Register
FEE beginnen, leider gibt es anscheinend nicht ein
Example was nun veranschaulicht wie Daten im Flash
ram dauerhaft eingetragen/gelesen werden können.
Es bleibt ein Rätsel

Gruß
 Karsten
Gast #2125065
Lesenswert?

Rätsels lösung für ADuC7060/61

void SaveFlash(WORD addr, WORD value)
{
 FEEMOD = 0x8;        // bit 3 should be set to allow erase/write
 FEEADR = addr;
 FEEDAT = value;
 FEECON = 0x03;
 while (!(FEESTA&0x03));
 //if ((FEESTA&&0x02)==0x02) ERROR = 1;
}

WORD LoadFlash(WORD addr)
{
 FEEMOD = 0x8;        // bit 3 should be set to allow erase/write
 FEEADR = addr;
 FEECON = 0x01;
 while (!(FEESTA&0x03));
 //if ((FEESTA&&0x02)==0x02) ERROR = 1;
 return(FEEDAT);
}

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