Creeaza.com - informatii profesionale despre


Cunostinta va deschide lumea intelepciunii - Referate profesionale unice
Acasa » scoala » informatica
Memoria de date de tip EEPROM

Memoria de date de tip EEPROM


Memoria de date de tip EEPROM

Memoria de date de tip EEPROM poate fi atit inscrisa cit si citita pe tot parcursul unei functionari normale, pentru tot domeniul admisibil al tensiunii VDD.

Acest tip de memorie nu este mapat nici in spatiun memoriei program nici in spatiul memoriei de date de tip SRAM.

Toti membrii familiei PIC16F8x au cu cite 64 de octeti de memorie de date de tip EEPROM.

Adresarea acestei memorii de tip special se realizeaza:

in domeniul de adrese de 0x00 - 0x3F;

se foloseste un mod indirect de adresare;



Gestionarea memoriei de date de tip EEPROM se face cu ajutorul a 4 registri cu functii speciale:

EECON1 = registru de comanda si control;

EECON2 = registru meimplementat fizic, folosit doar pe parcursul secventei de inscriere;

EEDATA = destinat pentru data pe 8 biti care urmeaza sa fie citita sau inscrisa;

EEADR = destinat pentru a pastra adresa locatiei ce se doreste a fi accesata;

Observatie: Memoria de date de tip EEPROM poate fi atit citita cit si inscrisa. In momentul inscrierii unui octet mai intii locatia respectiva este stearsa in mod automat si apoi este inscrisa.

Observatie: Ciclurile stergere / inscriere sunt scurte, durata lor fiind controlata de un timer incorporat. Timpul de inscriere variaza in functie de temperatura, de tensiunea de alimentare si, evident, de la chip la chip.

Observatie: In cazul in care este setata protectia de cod, CPU-ul poate continua sa citeasca sau sa inscrie memoria de date EEPROM. Dispozitivul de programare poate avea acces la aceasta zona de memorie.

1. Registrul de adrese EEADR

EEADR este un registru pe 8 biti cu ajutorul caruia se pot accesa pina la 256 de octeti. Familia PIC16F8x nu are implementati fizic decit primii 64 de octeti, pentru care sunt necesari pentru adresare doar cei mai putini semnificativi 6 biti ai registrului EEADR. Cei mai semnificativi 2 biti ai registrului EEADR intra si ei la codarea adreselor, ceea ce inseamna ca acestia trebuie sa fie totdeauna "0" pentru a fi siguri ca adresarea se face in spatiul primilor 64 octeti.

2. Registrii EECON1 si EECON2

EECON1 este un registru de control care are implementati fizic doar cei mai putin semnificativi 5 biti. Restul de 3 biti nu exista si sunt cititi ca "0".

 


Bitii RD si WR initializeaza operatii de citire, respectiv de inscriere. Acesti biti nu pot fi stersi ci numai setati prin program. Ei sunt resetati de catre hardware in mod automat la sfirsitul operatiilor de citire, respectiv de inscriere.

Observatie: Incapacitatea bitilor RD si WR de a fi resetati prin soft se traduce ca fiind o masura de protectie impotriva terminarii accidentale sau premature a operatiilor de citire sau de inscriere, in special.

Observatie: Bitul WREN, cind este setat, face posibila efectuarea unei operatii de inscriere. La Power-up

acest bit este resetat tocmai ca o protectie impotriva inscrierilor accidentale.

Observatie: Bitul WREER este setat cind o operatie de scriere este intrerupta datorite unui semnal de reset aplicat pe pinul MCLR sau datorita aparitiei unui reset comandat de WDT care a detectat o situatie de time-out pe parcursul unei functionari normale. In aceste situatii, dupa reset, programatorul trebuie sa verifice starea bitului WREER si daca acesta este setat, se reia ciclul de inscriere in EEPROM, tinind cont ca registrii EEDATA si EEADR ramin neschimbati.

Observatie: Flagul de intrerupere EEIF este setat numai cind ciclul de inscriere curent este terminat. Acest bit poate fi sters numai prin soft.

Registrul EECON2 nu este un registru implementat fizic. Citirea acestui registru are ca rezultat obtinerea valorii 0x00. Acest registru este folosit exclusiv numai pe parcursul secventelor de inscriere a memoriei de date de tip EEPROM.

3. Citirea din memoria de date de tip EEPROM

Pentru citirea unui singur octet de date din memoria de date de tip EEPROM, programatorul trebuie sa parcurga urmatorii pasi:

incarca adresa dorita in registrul EEADR;

seteaza bitul RD din registrul EECON1 => este initializat procesul de citire a octetului;.


data este disponibila in registrul EEDATA in ciclul imediat urmator; de unde, pe parcursul

a inca a unui ciclu, data citita din EEPROM poate fi preluata.

Observatie: Registrul EEDATA isi pastreaza nemodificat continutul pina la urmatoarea secventa de citire sau pina la urmatoarea secventa de inscriere.

Exemplu: Citirea unei date din mem. de date de tip EEPROM:

BCF STATUS, RP0 ; selectare Bank0

MOVLW Address_ ; incarca in W adresa locatiei care se doreste a fi citita

MOVWF EEADR ; incarca in EEADR adresa dorita

BSF STATUS, RP0 ; selectare Bank1

BSF EECON1, RD ; RD = "1" => initializ. operatia de citire

BCF STATUS, RP0 ; selectare Bank0

MOVF EEDATA, W ; citirea datei din EEADR si incarcarea sa in W

4. Inscrierea in memoria de date de tip EEPROM

Pentru inscrierea unui singur octet de date in memoria de date de tip EEPROM, programatorul trebuie sa parcurga urmatorii pasi:

incarca adresa dorita in registrul EEADR;

incarca data ce se doreste a fi salvata, in registrul EEDATA;

inactiveaza sistemul de intreruperi prin setarea bitului GIE din registrul INTCON;

se seteaza bitul WREN din registrul EECON1 pentru validarea inscrierilor;

secventa de initializare a operatiei de inscriere:

se incarca constanta 0x55 in EECON2;

se incarca constanta 0xAA in EECON2;

se seteaza bitul WR din registrul EECON1

Observatie: Trebuie respectata intocmai secventa specifica de initializare pentru operatiilor de inscriere in mem. de date de tip EEPROM ( se incarca 0x55 in EECON2, se incarca 0xAA in EECON2, se seteaza bitul WR ), altfel nu se realizeaza inscrierea.

Observatie: Este foarte recomandat ca sistemul de intreruperi sa fie inactivat pe parcursul secventei de initializare a unei operatii de inscriere in mem. de date de tip EEPROM.

Observatie: Secventa de initializare a operatiei de inscriere in mem. de date de tip EEPROM se repeta intocmai pentru fiecare octet in parte ce se doreste a fi inscris.

Observatie: Acest mecanism previne inscrierile accidentale in mem. de date de tip EEPROM. Programatorul trebuie sa mentina tot timpul bitul WREN in "0", in afara cazurilor in care se doreste salvarea in EEPROM.

Observatie: ATENTIE!!! Bitul WREN nu este resetat automat de catre hardwarw. Astfel , sarcina de a fi resetat cade in totalitate in sarcina programatorului.

Observatie: Dupa ce secventa de inscriere a fost initializata, stergerea bitului WREN nu afecteaza cu nimic ciclul de inscriere.

Observatie: Daca bitul WREN nu este setat atunci numai prin setarea bitului WR nu se va initializa nici un ciclu de inscriere.

Observatie: La sfirsitul unui ciclu complet de inscriere, bitul WR este resetat automat de catre hardware iar flagul de intreruperi EEIF este setat automat de catre hardware.

Observatie: Flagul de intrerupere EEIF ( EE Write Complete Interrupt Flag ) poate fi activat pentru a se genera o cerere de intrerupere la sfirsitul fiecarui ciclu complet de inscriere. Acest flag poate fi resetat numai prin program.

Observatie: Programatorul poate sa nu activeze aceasta intrerupere si sa implementeze o bucla de pooling pentru a determina starea flagului EEIF in vederea salvarii in EEPROM a datelor dorite.

Exemplu:

BCF STATUS, RP0 ; selectare Bank0

MOVLW Address_ ; incarca in W adresa dorita

MOVWF EEADR ; incarca in EEADR adresa dorita

MOVLW Data_ ; incarca in W data dorita

MOVWF EEDATA ; incarca in EEDATA data dorita

BSF STATUS, RP0 ; selectare Bank1

BCF INTCON, GIE ; invalidare sistem intreruperi

BSF EECON1, WREN ; validare operatiilor de inscriere

MOVLW 0x55 ; incarca in W constanta 0x55

MOVWF EECON2 ; incarca in EECON2 constanta 0x55

MOVLW 0xAA ; incarca in W constanta 0xAA

MOVWF EECON2 ; incarca in EECON2 constanta 0xAA

BSF EECON1, WR ; WR = "1" => initializ. operatia de inscriere

BSF INTCON, GIE ; revalidare sistem intreruperi

 


5. Verificarea datelor inscrise in mem. de date de tip EEPROM

In functie de aplicatie, de multe ori este necesara verificarea datelor salvate in memoria de date de tip EEPROM.

Exemplu: Verificarea datelor inscrise in mem. de date de tip EEPROM:

============================

secventa de inscriere prezentata mai sus

============================

; registrul EEDATA inca mai pastreaza valorea ce a fost inscrisa si care trebuie verificata

============================

; incarca in W data care tocmai a fost inscrisa

BCF STATUS, RP0 ; selectare Bank0

MOVF EEDATA, W

============================

; registrul EEADR inca mai pastreaza adresa la care s-a efectuat inscrierea si de unde

; trebuie efectuata o citire in vederea verificarii

============================

; efectuarea citirii pentru verificare

BSF STATUS, RP0 ; selectare Bank1

BSF EECON1, RD ; RD = "1" => init. citirea de verif.

; rezultatul citirii de verificare este deja in registrul EEDATA

============================

BCF STATUS, RP0 ; selectare Bank0

SUBWF EEDATA, W ; scade continutul lui W din EEDATA si pastreaza

; rwezultatul in W

============================

BTFSS STATUS, Z ; testeaza rezultatul scaderii

daca Z = 1, => rezultatul operatiei de scadere este zero, adica valoarea inscrisa este egala cu

; valoarea rezultata din citirea pentru verificare => se sare peste instructiunea GOTO si se

; continua in mod firesc programul

daca Z != 0 => rezultatul operatiei de scadere NU este zero, adica valoarea inscrisa

; NU este egala cu valoarea rezultata din citirea pentru verificare => se executa instr. GOTO

GOTO ` WRITER_ERROR ; salt spre rutina de tratare a erorilor de inscriere

============================

; continuarea programului

6. Protectia impotriva inscrierilor accidentale in mem. de date de tip EEPROM

Exista conditii extreme care ar favoriza inscriei accidentale. Exista conditii in care dispozitivul nu trebuie sa execute inscrieri ( in mem. de date de tip EEPROM ).

Din aceste motive s-au implementat diferite mecanisme interne care au rolul de a impiedica realizarea unor inscriei false. Acestea sunt:

la power-up bitul WREN este sters;

Power-Up Timer care asigura o temporizare de 72 ms la punerea sub tensiune;

necesitatea parcurgerii secventei de initializare a unei operatii de inscriere;

In acest fel se face practic imposibila intrunirea aleatoare a tuturor conditiilor de inscriere, adica aceste mecanisme fac imposibila aparitia unor inscrieri false chiar in conditiile cele mai defavorabile de functionare ( brown-out, power glitch, software malfunction, ..etc. )

Accesul la mem. de date de tip EEPROM in conditiile setarii protectiei asupra codului

Chiar daca este setata protectia impotrina citirii din exterior a codului, CPU-ul este capabile in continuare sa citeasca sau sa inscrie date din / in memoria de date de tip EEPROM.

Pentru variantele de dispozitive prevazute cu ROM exista 2 biti pentru protectia codului.

Unul pentru protectia ROM-ului iar altul pentru protectia EEPROM-ului





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.