- Elettronica Open Source - https://it.emcelettronica.com -

EEPROM emulator library for PIC32

Il nome PIC, inizialmente acronimo di Programmable Intelligent Computer (Calcolatore Intelligente Programmabile), è diventato successivamente, grazie a Microchip, PICmicro. Oggi non viene più utilizzato come un acronimo, anche se usualmente viene definito come Programmable Interface Controller (Regolatore Programmabile dell’Interfaccia).

Come tutti i nostri lettori ben sanno, il PIC è una famiglia di circuiti integrati a semiconduttore con funzioni di microcontrollore. I PIC sono molto popolari agli sviluppatori e agli hobbisti [1] grazie al loro basso costo, ad una grandissima disponibilità, una base di utenza molto ampia, moltissime note di applicazione, possibilità re-programming e di programmazione di serie con la memoria istantanea. L’allineamento iniziale del dispositivo è basato sul nucleo standard di industria MIPS32 M4K. Il dispositivo può essere usato programmando con il Compilatore della Microchip C32, una variante del compilatore del GCC. Nell’arco del tempo ne è stata resa disponibile una ampia varietà di versioni, molto diverse sia come tecnologia costruttiva che forma fisica (numero di piedini) e , infine, come quantità o tipo di memoria, oltre alle funzioni di ingresso uscita. Ne esistono versioni con programma su ROM mascherata, quindi non riprogrammabili, versioni CMOS programmabili una sola volta OTP, versioni EPROM con finestra per cancellazione tramite raggi UV e versioni con memoria flash.

EEPROM DATA

La EEPROM (anche scritto E2PROM), acronimo di Electrically Erasable Programmable Read-Only Memory, è un tipo di memoria non volatile [2], usata nei computer e altri dispositivi elettronici, per memorizzare piccole quantità di dati che devono essere mantenuti quando viene tolta l’alimentazione (per esempio, la configurazione del dispositivo). Le operazioni di scrittura, cancellazione e riscrittura hanno luogo elettricamente. Ciascuna cella di memoria capace di memorizzare un singolo bit, è costituita da due transistori MOS, uno “di memoria” e uno “di accesso”. La EEPROM DATI è una particolare area di memoria da 64 byte nella quale possiamo scrivere i valori numerici che vogliamo che non vengano persi in caso di mancanza di tensione di alimentazione. Si intuisce immediatamente quanto possa essere utile questo tipo di memoria. Pensate, ad esempio, ad un sistema anti intrusione in cui il PIC deve mantenere il codice di accesso anche quando il sistema è spento in modo che non sia necessario riprogrammarlo ogni volta che si riaccende il sistema, oppure ad una chiave elettronica realizzata con un PIC che riceve alimentazione solo quando l’utente inserisce la chiave nel lettore. In tutti questi casi, la EEPROM DATI garantisce un ottimo livello di sicurezza nella conservazione dei dati, unito ad una relativa facilità d’uso. La memoria EEPROM è scrivibile e leggibile in condizioni di normale alimentazione e senza dover ricorrere ad alcun programmatore esterno. Le modalità di accesso sono notevolmente diverse dalla memoria RAM dei REGISTER FILE e devono seguire una serie di procedure particolari atte ad evitare eventuali perdite di dati in condizioni di funzionamento anomale.

Per accedere alla EEPROM DATI vengono utilizzati i seguenti registri speciali: EEADR è il registro utilizzato per indirizzare una delle 64 locazioni di memoria EEPROM in cui si desidera effettuare una lettura o scrittura di un dato.

EEDATA è il registro che viene usato per inviare un byte alla EEPROM in scrittura oppure per ricevere un byte dalla EEPROM in lettura. EECON1 ed EECON2 sono due registri ci controllo utilizzati nelle operazioni di lettura e scrittura come descritto di seguito.

Analizziamo il registro EECON1: Il registro EECON1 (figura 1) è un registro di controllo usato nelle operazioni di lettura e scrittura sulla memoria EEPROM DATI. Esso contiene una serie di flag con cui è possibile controllare ogni singola operazione effettuata sulla EEPROM dati. La disposizione dei flag è quella di figura 1.

Figura 1: registro EECON1.

Figura 1: registro EECON1.

Analizziamo bit per bit il registro: Bit 7-5: non utilizzati.

Bit 4: EEIF: EEPROM Write Operation Interrypt Flag bit. Questo flag indica se la scrittura su EEPROM è stata completata dall’hardware del PIC e se l’interrupt è stato generato per questo motivo.1 = Operazione completata 0 = Operazione di scrittura non completata oppure non iniziata. Una volta generato l’interrupt, questo flag deve essere resettato via software altrimenti la circuiteria interna del PIC non sarà più in grado di generare interrupt al termine delle successive scritture.

Bit 3: WRERR: EEPROM Error Flag bit. Questo flag indica se l’operazione di scrittura è stata interrotta prematuramente a causa, ad esempio, di un reset del PIC o un reset dal Watch Dog Timer, 1 = Operazione di scrittura interrotta prematuramente 0 = Operazione di scrittura completata correttamente.

Bit 2: WREN: EEPROM Write Enable bit. Questo flag abilita le successive operazioni di scrittura su una cella EEPROM. Deve essere messo a 1 prima di iniziare qualsiasi operazione di scrittura su EEPROM. Se messo a 0 la EEPROM si comporta come una memoria a sola lettura. 1 = Scrittura su EEPROM abilitata 0 = Scrittura su EEPROM disabilitata.

Bit 1: WR: Write Control bit. Questo flag serve ad attivare il ciclo di scrittura su EEPROM. Per attivare la scrittura occorre mettere a 1 questo flag. Lo stesso flag verrà messo automaticamente a 0 dall’hardware del PIC una volta completata la scrittura sulla cella. 1 = Comanda l’inizio della scrittura su EEPROM. Viene rimesso a 0 a fine ciclo di scrittura. Può essere solo settato dal nostro programma ma non resettato. 0 = Ciclo di scrittura completato.

Bit 0: RD: Read Control bit. Questo flag serve ad attivare il ciclo di lettura da EEPROM. Per attivare la lettura occorre mettere a 1 questo flag.

1 = Comanda l’inizio  della  lettura da EEPROM. Viene rimesso a 0 a fine ciclo di lettura. Può essere solo settato dal nostro programma ma non resettato. 0 = Non inizia la lettura su EEPROM

EMULATORE DATI EEPROM

La Microchip ha introdotto diversi aggiornamenti hardware nei microcontrollori PIC tra i quali la già descritta memoria EEPROM. Analizziamo una possibile applicazione per l’implementazione di dati EEPROM per PIC. L’algoritmo (figura 2) in questione supporta fino a 680 locazioni di memoria di 32 words.

Figura 2: teoria delle operazioni dell’algoritmo.

Figura 2: teoria delle operazioni dell’algoritmo.

Questo implica che l’indirizzamento dei registro è compreso tra 0 e 679. L’array principale del programma è costruito su una serie di righe. Ogni riga contiene 128, 32 bit words oppure 512 bytes. Un gruppo di 8 righe costituisce un pagina che contiene quindi 8*512 = 4096 bytes o 1024 istruzioni word. Il massimo numero di bit per indirizzo deve essere inferiore a 16 bit in modo da poter immagazzinare 2 indirizzi per volta. Per aumentare l’efficienza dell’algoritmo, l’indirizzo è continuamente immagazzinato nelle prime 340 word di ciascuna pagina. Perciò, 680 indirizzi di 680 dati word possono essere immagazzinati in questi spazi. Dopo 1024 word, il primo word è usato per lo status register. L’algoritmo lavora in 3 possibili “modalità”: init, read, write. La routine di inizializzazione deve essere chiamata prima di ogni altra operazione. Un possibile scenario può essere visualizzato in figura 3.

Figura 3: INIT.

Figura 3: INIT.

Per la scrittura di dati EEPROM, l’algoritmo utilizza la funzione DataEEWrite. Oltre a scrivere dati, la funzione verifica la correttezza dei dati stessi, in particolare la quantità e l’indirizzamento. Una volta trovata la locazione dove scrivere, la funzione si calcola il numero minimo di cicli per effettuare l’operazione. Una possibile rappresentazione può essere visualizzata in figura 4.

Figura 4: write operation.

Figura 4: write operation.

L’operazione di lettura viene, invece, eseguita dalla funzione DataEERead con funzionalità simile al precedente. Dalla tabella di figura 5 si evince la funzionalità di questo codice.

Figura 5: read operation.

Figura 5: read operation.

Infine, esiste una routine denominata Pack che è chiamata dalla routine DataEEWrite dopo che una pagina è stata riempita, oppure dalla routine di inizializzazione per l’emulazione di dati EEPROM, per beneficiare l’incremento della efficienza in applicazioni di timing. La funzionalità del codice può essere visualizzata, tramite schema a blocchi, in figura 6.

Figura 6: pack operation.

Figura 6: pack operation.

L’algoritmo richiede 3480 byte di memoria e 1552 bytes di RAM. Questo non include la memoria riservata per i dati EEPROM. L’immagazzinamento di informazioni di dati EEPROM è allocata in memoria per mezzo di un array bi-dimensionale. I tools e relative versioni usate per creare la soluzione PIC32 appena descritta è visualizzata in figura 7.

Figura 7: software.

Figura 7: software.