Flash ed EEPROM


14

La scheda tecnica Atmega16 dice che ha

a) 16 Kbyte di memoria del programma Flash auto-programmabile nel sistema e b) EEPROM da 512 byte.

Un microcontoller può avere due ROM separate che possono essere programmate tramite la tecnologia EEPROM e la tecnologia Flash?

Oppure la mia deduzione (come indicato sopra) dal foglio dati è errata?

So che il nostro programma è archiviato nella memoria flash del perché qualcuno avrà bisogno di EEPROM? A cosa serve se disponiamo di memoria flash per il programma?

Qualcuno può anche spiegare qual è il termine "auto-programmabile nel sistema"

Quello che so: la tecnologia Flash può scrivere il programma in blocchi di dati mentre EEPROM può scrivere dati byte per byte.

Risposte:


21

Al giorno d'oggi, la memoria Flash viene utilizzata per contenere il codice del programma e la EEPROM (memoria di sola lettura cancellabile elettricamente) viene utilizzata per conservare i dati persistenti. Circa 30 anni fa, prima dell'arrivo di Flash, le EEPROM venivano utilizzate per contenere il codice del programma.

In realtà arrivarono prima la ROM (memoria di sola lettura), poi la PROM (ROM programmabile, una sola volta), la EPROM (PROM cancellabile con luce UV), la EEPROM e infine il Flash. Le ROM sono ancora utilizzate per applicazioni ad alto volume e basso costo (ad esempio biglietti d'auguri parlanti).

La differenza importante con gli attuali microcontrollori è che in genere non è possibile eseguire codice da EEPROM ed è scomodo per i programmi archiviare i dati in flash. (I dati vengono archiviati in flash quando, ad esempio, si utilizza la parola chiave "const" in una dichiarazione di dati o si definisce una stringa, ma che viene gestita dietro le quinte dal compilatore e dal linker.)

L'area EEPROM può essere utilizzata per contenere la configurazione o altri dati che si desidera siano disponibili durante i riavvii, anche se il microcontrollore ha perso energia e viene quindi riacceso. Funzionalmente, puoi pensare alla EEPROM come un disco rigido molto piccolo o una scheda SD.

Sui microcontrollori senza EEPROM, è possibile archiviare dati persistenti nella memoria flash, ma ciò diventa difficile poiché i microcontrollori non sono stati realmente progettati per questo, e devi trovare un posto speciale che non interferisca con il codice del programma e metterlo da parte con il linker. Inoltre, come indicato di seguito, di solito è possibile aggiornare la EEPROM molte volte più del flash.

Se esegui i dati del programma in flash, ciò non significa che puoi accedere ai dati come variabili nel tuo programma C, perché non c'è modo di dire al compilatore dove si trovano queste variabili nel tuo codice (cioè non puoi associare una const variabile in quest'area del flash.) Quindi la loro lettura deve essere fatta attraverso l'apposito set di registri che vengono usati per scriverli. Nota che questa restrizione si applica anche ai dati nella EEPROM, quindi non ha alcun vantaggio al riguardo.

Per programmare flash o EEPROM, è necessario prima cancellare un blocco di memoria. Quindi è programmato. Per il flash, la scrittura di solito viene eseguita anche un blocco alla volta. Per le EEPROM, può essere fatto da blocchi o un byte alla volta, a seconda del microcontrollore.

Sia per Flash che per EEPROM, esiste un numero massimo di volte che è possibile aggiornarli prima di esaurire la memoria. Questo numero è indicato nella scheda tecnica come valore minimo garantito. Di solito è molto più alto per le EEPROM che per la memoria flash. Per il flash, ho visto numeri fino a 1000. Per le EEPROM, ho visto numeri fino a 1.000.000.

Un vantaggio delle EEPROM rispetto al flash è che puoi cancellarle molte volte più di quanto tu possa cancellare il flash.

"In-System Self-programmable" significa semplicemente che il microcontrollore può aggiornare il proprio flash mentre è in esecuzione. La funzione viene generalmente utilizzata per aggiornare il codice nel campo. Il trucco è che devi lasciare un po 'di codice nel sistema mentre il programma principale viene aggiornato, chiamato bootloader. Questo schema viene utilizzato nel sistema Arduino per programmare il chip.


Grazie per la sua risposta, signore. Quindi per inserire i dati all'interno della EEPROM avrò bisogno di un programmatore EEPROM come in un programmatore USBASP per scaricare il programma nella memoria flash? Ho ragione, signore.
Jasser,

1
@Jasser No, non hai bisogno di un programmatore esterno. Accederai alla EEPROM dal tuo programma. All'interno di ATmega ci sarà una serie di registri che, scrivendoli, ti consentiranno di aggiornare la EEPROM. Sarà inoltre necessario utilizzare questi registri per leggere la EEPROM, poiché non verrà visualizzata nella normale mappa degli indirizzi. Le informazioni su come cancellare, scrivere e leggere la EEPROM saranno nel foglio dati per il chip.
Tcrosley,

Dal momento che possiamo scrivere o leggere dalla EEPROM all'interno del microcontrollore, il microcontrollore dovrebbe avere un circuito per memorizzare i dati all'interno della EEPROM e che dovrebbe essere simile al programmatore EEPROM. Questo mi porta di nuovo a un'altra domanda che, dal momento che la EEPROM può essere eliminata circa 100.000 volte rispetto a quella successiva, potremmo non essere in grado di memorizzare i dati all'interno della EEPROM attraverso i registri. Queste affermazioni sono significative? @tcrosley
Jasser,

1
@Jasser Corretto, esiste un limite al numero di volte in cui è possibile aggiornare la EEPROM. Questo è in genere molto più alto (a volte un ordine di grandezza in più) rispetto al numero di volte in cui è possibile aggiornare il flash. Avrei dovuto menzionarlo nella mia risposta e lo aggiornerò. Il numero che hai citato è un minimo garantito dal produttore del chip; Una volta ho fatto alcuni test con un chip che era stato specificato per 100.000 scritture, e sono state ben oltre 500.000 prima che venissero rilevati errori.
Tcrosley,

1
@Jasser Sì, è un po 'più difficile impostare i dati in flash. Inoltre, come discusso nel mio aggiornamento della mia risposta, è possibile cancellare e riprogrammare la EEPROM molte volte più (in genere 10x) rispetto al flash.
Tcrosley,

4

Aggiungerò qualche informazione in più all'ottima risposta di @tcrosley.

ATmega16 implementa un'architettura di Harvard , ovvero una topologia di sistema in cui la memoria dei dati è separata dalla memoria del programma. Citando il paragrafo pertinente dal foglio dati Atmega16 (pagina 8):

Al fine di massimizzare le prestazioni e il parallelismo, l'AVR utilizza un'architettura Harvard - con memorie e bus separati per programma e dati. Le istruzioni nella memoria del programma vengono eseguite con una pipeline a livello singolo. Durante l'esecuzione di un'istruzione, l'istruzione successiva viene pre-recuperata dalla memoria del programma. Questo concetto consente di eseguire le istruzioni in ogni ciclo di clock. La memoria del programma è Memoria flash riprogrammabile nel sistema.

L'architettura di Harvard ha il vantaggio di non avere contese sul bus tra i cicli di recupero delle istruzioni e i cicli di accesso ai dati, poiché i dati e le istruzioni non condividono lo stesso bus, come nell'architettura PC convenzionale.

Pertanto la memoria flash viene utilizzata come memoria del programma, mentre la memoria dei dati viene suddivisa tra SRAM (per dati transitori, come stack di chiamate di funzione e heap - se si sta programmando in C, ad esempio) e EEPROM (per la memorizzazione permanente) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.