SCRIVERE NELLA FLASH RAM SST39SF010A CON PIC16F877

10984158_10205348730151056_2131762303937681721_o.jpg

        Non ci sono più le Ram di una volta, quelle che per scriverci su bastavano pochi segnali di controllo assieme agli indirizzi e ai dati. Con quelle moderne non è più così semplice, ora, per assicurarsi che la Ram non venga cancellata o scritta per errore, occorre spedirgli una serie di codici sia sulla linea degli indirizzi che su quella dei dati prima di potere effettuare  operazioni di cancellazione e di scrittura, solo la lettura è esente da tali complicazioni.

La Ram in oggetto ha un tempo di accesso di 70nS, una ritenzione di oltre 100 anni ed un numero di cicli di scrittura pari a 100000. Possiede una capacità di 1Mbit (128K X 8) divisa in settori di 4K, la memoria è indirizzabile con una word di 17bit (A16…A0).

Prima di potere effettuare operazioni di scrittura occorre cancellare uno (anche per un solo byte da memorizzare) o più settori a seconda della quantità di dati che vogliamo memorizzarci, c’è anche la possibilità di cancellare tutta la Ram se occorre più spazio (nel programma, però, non è implementata questa possibilità).

Ogni operazione di cancellazione e di scrittura va preceduta da una serie di codici ed indirizzi prefissati per evitare che la Ram venga sovrascritta o cancellata per errore.

Per la lettura in discorso è più semplice, occorre solo porre sul bus degli indirizzi quello corrispondente alla locazione nella quale si vuole leggere il dato ed inviare una serie di impulsi di controllo (CE, OE, WE).

 

CANCELLAZIONE DI UN INTERO SETTORE

Meglio delle parole fa il grafico in fig.1.

Cattura1.JPG

Fig.1

Come si nota in figura la cancellazione vera e propria parte dopo l’immissione di sei dati in contemporanea a sei indirizzi il cui l’ultimo punta al settore che si intende cancellare, in particolare i settori per questa Ram sono 32 (128K / 4K) e vengono utilizzati i 6 bit più alti per poterli indirizzare (A16, A15, A14, A13, A12, i restanti bit dell’indirizzo non sono influenti), ovviamente tutto il processo deve essere accompagnato dai segnali CE, OE, WE che devono assumere certi stati in tempistiche ben definite. Per potere effettuare altre operazioni occorre attendere un tempo (TSE) di 25mS durante il quale i settori vengono cancellati, in questo periodo qualsiasi comando viene ignorato dalla Ram.

 

PROGRAMMAZIONE BYTE-TO-BYTE

Fare riferimento alla fig.2.

Cattura2.JPG

Fig.2

Anche per la programmazione occorre inviare alla Ram una serie di indirizzi e di codici seguiti dall’indirizzo della cella nella quale si vuole scrivere (ADDR) e dai dati (DATA). Il tempo (TBP) richiesto per completare la scrittura è di 20uS. Si può programmare un byte alla volta, nel senso che dopo avere scritto il primo bisogna rinviare la sfilza dei codici e di indirizzi per scrivere il secondo e così via.

 

LETTURA

Vedere fig.3.

Cattura3.JPG

Fig.3

Per la lettura la situazione è decisamente migliore, infatti basta mandare l’indirizzo della cella dove vogliamo leggere il dato e tenere a certi livelli fissi i segnali CE, OE, WE, l’accesso è sequenziale.

 

PROGRAMMA

Dato che questo programma è dimostrativo non ho utilizzato tutta la potenzialità della Ram ma solo il primo settore, inoltre ho usato 16 bit dell’indirizzo (65535 massime celle indirizzabili) anziché 17 tenendo il pin 2 della Ram a gnd.

Dato che sono appassionato di amplificatori audio ho voluto memorizzare un onda sinusoidale nel primo settore per poi rileggerla in modo sequenziale, poi mediante un convertitore D/A (vedere questa pagina a tal proposito) ho visualizzato il segnale convertito sull’oscilloscopio.

Il programma si divide in due parti commutabili tramite un interruttore esterno, la prima si occupa di memorizzare i dati contenuti e precedentemente pre caricati nella eeprom della Pic nel primo settore della Ram (solo 256 byte) per poi rileggerne il contenuto per controllare in tempo reale ciò che si è scritto. La prima parte quindi si occupa di cancellare il primo settore, di leggere nella eeprom della Pic e riversare tutto il suo contenuto in Ram.

La seconda parte si occupa solo di leggere il contenuto della Ram, è infatti inutile, una volta memorizzati i dati, riscriverli in Ram ogni volta che si alimenta il circuito.

Il programma si sviluppa così.

Dopo avere inizializzato la Pic controlla se l’interruttore è commutato su programmazione o lettura Ram, nel primo caso, dopo avere chiamato la ruotine di ritardo (RITARDO) per dare il modo alla Ram di essere pronta, illumina un led e chiama la routine per cancellare il primo settore (SECTOR_ERASE), poi quella per leggere il dato nella prima locazione della eeprom del Pic (READ_EEPROM) per poi copiarlo (RAM_PROGRAM) nella prima locazione del primo settore della Ram e così di seguito fino ad arrivare all’indirizzo 255.

Alla fine del processo chiama la routine di lettura (RAM_READ) che non fa altro che incrementare l’indirizzo da 0 a 255 del primo settore in modo ciclico, i dati letti, passando attraverso il convertitore, ricreeranno la sinusoide sull’oscilloscopio fig. 4.

Quando  l’interruttore è commutato su lettura il led non si illumina ed il programma salta subito alla routine RAM_READ.

In fig. 5 sono rappresentati i collegamenti della Ram, led, interruttore e convertitore con il processore.

 

Cattura4.JPG

Fig.5

Il file seguente contiene il programma ed il file dati da memorizzare in eeprom.

 

Software

 

Fabio

HOME

 

 

 

 

 

 

 

 

 

.