EEPROM/RAM nei micro ST626x

I modelli ST6260 e 6265 dispongono di 128 bytes di EEPROM e 128 bytes di ram. I primi 64 byte di RAM vengono gestiti normalmente e si trovano nell'area di memoria che va da 084h a 0BFh. Per usare la EEPROM o gli altri 64 bytes di RAM e' necessario ricorrere ad un registro DRBR (data ram/eeprom bank register) che si trova all'indirizzo 0E8h (registro di sola scrittura).

Registro DRBR (indirizzo 0E8h, sola lettura)

BIT 7-6-5 = non usati
BIT 4 - DRBR4 = selezione pagina 2 di RAM
BIT 3 - DRBR3 = selezione pagina 1 di RAM
BIT 2 = non usato
BIT 1 - DRBR1 = selezione pagina 1 di EEPROM
BIT 0 - DRBR0 = selezione pagina 0 di EEPROM

In questo registro deve essere settato un solo bit alla volta, in altre parole deve essere selezionato un solo banco di memoria alla volta. Per accedere a questo registro non si devono usare le istruzioni SET e RES, ma solo istruzioni LD o LDI.

Selezione del banco di memoria RAM/EEPROM

DRBR ST6260/65
00Nessuno
01Pagina 0 EEPROM
02Pagina 1 EEPROM
08Non disponibile
10hPagina 2 RAM
altriNon usare


Uso della RAM

Per usare il banco di 64 bytes di ram e' sufficiente usare questa istruzione:
	ldi	drbr,010h		; attiva pagina 2 RAM
A questo punto si puo' accedere normalmente a questi 64 byte di ram nell'area di memora che va da 00h a 03Fh. All'interno di questa area si possono definire anche delle etichette con la normale direttiva .def
pippo	.def	000h		; definisce la variabile pippo
tempo	.def	020h		; definisce la variabile tempo
Se nello stesso programma viene usata anche la EEPROM, queste etichette corrisponderanno anche agli indirizzi 00h e 020h della EEPROM.

Lettura della EEPROM

La lettura della EEPROM avviene nello stesso modo della RAM. E' sufficiente selezionare il banco di EEPROM desiderato, e leggere i dati sempre nell'area 00h-3Fh. Prima pero' e' necessario rendere attiva la EEPROM.
	ldi	eecr,0			; attiva la memoria EEPROM
	ldi	drbr,01h		; attiva pagina 0 EEPROM
Al termine della lettura si puo' disattivare nuovamente la EEPROM per evitare scritture accidentali e per ridurre il consumo di corrente.
	ldi	eecr,040h		; disattiva la memoria EEPROM

Registro EECR (eeprom control register, 0EAh, lettura/scrittura)

BIT 7 - D7 = non usato
BIT 6 - E2OFF = Standby enable bit Quando questo bit e' a livello 1, la EEPROM e' disattivata e il consumo di corrente e' ridotto al minimo.
BIT 5-4 - D5-D4 = non usati, lasciare a livello 0
BIT 3 - E2PAR1 = Parallel start bit Quando questo bit e' posto a livello 1, viene avviata la scrittura parallela della EEPROM
BIT 2 - E2PAR2 = Parallel mode en. bit Questo bit deve essere posto a livello 1 per abilitare la scrittura parallela della EEPROM
BIT 1 - E2BUSY = EEPROM busy bit Questo bit viene posto a livello 1 dal micro quando la EEPROM e' in modalita' di programmazione. Quando questo bit e' a 1, non e' possibile leggere o scrivere altri dati nella EEPROM
BIT 0 - E2ENA = EEPROM enable bit Questo bit abilita la programmazione della EEPROM quando viene posto a 1

Programmazione della EEPROM

La memorizzazione di dati nella EEPROM richiede una procedura leggermente piu' complessa, ma comunque si tratta solo di alcune semplici istruzioni. Va detto anche che, a differenza della RAM, la scrittura della EEPROM e' molto piu' lenta e non puo' essere fatta un numero illimitato di volte (il costruttore dichiara 1 milione di cicli di scrittura sulla EEPROM).
La programmazione puo' avvenire in modalita' BYTE o in modalita' PARALLELA, utile per ridurre i tempi di scrittura nel caso in cui devono essere scritti piu' bytes contemporaneamente.

Scrittura in modalita' byte

Ecco un esempio di scrittura di un dato contenuto nella variabile "dato" nella prima cella della EEPROM.
	ldi	eecr,0			; attiva eeprom
	ldi	drbr,1			; attiva banco eeprom 0
	ldi	eecr,1			; attiva scrittura byte E2ENA=1
	ld	a,dato			; legge dato da memorizzare
	ldi	x,0			; cella di memora 00h
	ld	(x),a			; memorizza di eeprom indirizzo x
	ldi	wdog,255		; carica watchdog
	jrs	1,eecr,$		; attende scrittura eeprom E2BUSY
	ldi	eecr,0			; disattiva programmazione
Per attivare la programmazione in modalita' byte, si deve impostare il valore 1 nel registro EECR, e successivamente si deve inserire il dato da memorizzare un una cella di memoria compresa nell'area che va da 00h a 3Fh. L'istruzione JRS controlla il bit E2BUSY che ritorna a livello 0 quando la programmazione e' terminata. Il tempo necessario per la programmazione e' di circa 10 millisecondi, per cui questa modalita' di programmazione non e' consigliabile se si devono scrivere nella EEPROM piu' dati in successione perche' sono richiesti 10mS per ogni dato.

Scrittura in modalita' parallela

Per memorizzare da 2 a 8 bytes in celle di memoria successive, e' consigliabile usare la modalita' parallela, perche' permette di memorizzare tutti i byte contemporaneamente, richiedendo quindi un tempo di 10mSec per tutti i byte scritti. I 64 bytes di eeprom che vanno da 00h a 3Fh sono divisi in 8 righe da 8 bytes ciascuna, quindi ad esempio la prima riga va da 00h a 07h, la seconda da 08h a 0Fh.... e l'ultima va da 38h a 3Fh. Ecco un esempio di scrittura di 8 byte da 00h a 07h. Questi bytes sono memorizzati nella RAM dagli indirizzi 090h-097h.
	ldi	eecr,0			; attiva eeprom
	ldi	drbr,1			; attiva banco eeprom 0
	ldi	eecr,00000101b		; attiva modalita' parallela
	ldi	w,8			; numero bytes da inviare (8)
	ldi	y,90h			; prima cella memoria RAM
	ldi	x,0			; prima cella memoria EEPROM
parall
	ld	a,(y)			; legge cella RAM
	ld	(x),a			; memorizza in EEPROM indirizzo x
	inc	y			; prossima cella RAM
	inc	x			; prossima cella EEPROM
	dec	w			; prossimo byte da inviare
	jrz	finescr			; se w=0 allora finito
	jp	parall			; altrimenti ricicla
finescr
	ldi	eecr,00001101b		; programma eeprom
	jrs	1,eecr,$		; attende fine (10mSEC)
	ldi	eecr,0			; disattiva programmazione
La modalita' di programmazione parallela si attiva ponendo a livello 1 il bit 0 (E2ENA) e il bit 2 (E2PAR2) del registro EECR. Successivamente vanno trasferiti gli 8 bytes negli indirizzi 00h-07h e si attiva la programmazione vera e propria ponendo a 1 anche il bit E2PAR1. Con l'istruzione JRS si attendono i soliti 10mS per la programmazione controllando in bit E2BUSY.

Note sulla programmazione parallela

Un ciclo di programmazione parallela come quello dell'esempio, e' valido solo se i bytes da memorizzare si trovano tutti nella stessa riga della eeprom (nel nostro esempio vanno da 00h a 07h). Se si devono memorizzare piu' di 8 bytes, o se alcuni bytes si trovassero nella riga successiva (ad esempio da 04h a 0Dh) vanno effettuati 2 cicli di scrittura parallela per le 2 righe della EEPROM. Nell'esempio (04h-0Dh), va effettuata prima la scrittura parallela dei bytes da 04h a 07h e in un ciclo successivo vanno scritti i bytes che vanno da 08h a 0Dh.

© Giuseppe Di Paolo '98
Aggiornato sabato 22 agosto 1998