
Analizziamo in questo articolo per la rubrica Firmware Reload alcuni semplici accorgimenti per evitare di perdere i propri dati memorizzati su dispositivi di memoria flash.
La maggior parte dei sistemi embedded utilizza dispositivi flash di tipo NOR per la memorizzazione di dati, siano essi informazioni utente o codice eseguibile. La protezione dei dati, da cancellazione o sovrascrittura accidentali assume, quindi, come si può ben immaginare, estremo interesse, anche nelle applicazioni non critiche. Di seguito sono discussi alcuni semplici accorgimenti (suggeriti anche nell’Application Note di Sharp citata nei riferimenti [1]) che possono essere messi in atto per evitare problemi di questo tipo; sono anche presentate le funzionalità di protezione intrinseche offerte dai dispositivi stessi.
DAL PUNTO DI VISTA HARDWARE…
La maggior parte delle flash NOR dispone di ingresso di reset RST (o RP) che inizializza il dispositivo forzandolo in una modalità inattiva, nella quale tutte le operazioni correnti sono abortite. Finché la linea di reset è asserita, inoltre, il dispositivo non accetta ulteriori comandi, né tantomeno questi vengono latchati per essere eseguiti successivamente. Al power-up, in funzione della rampa di salita della tensione di alimentazione, può accadere che i dispositivi vedano segnali spuri sulle linee di controllo, con il rischio di interpretarli come comandi. È buona norma, pertanto, mantenere la linea di reset della flash asserita fino a che la tensione di alimentazione non si è stabilizzata oppure ogni volta che si riconosce un drop transiente sulla linea stessa. Se non si vogliono utilizzare dispositivi specifici di monitoring della tensione (come, ad esempio, il ben noto MAX705), può bastare anche il circuito mostrato in Figura 1. La costante di tempo del gruppo RC determina evidentemente il tempo di ritardo (rispetto al tempo di salita della tensione di alimentazione) con cui il segnale di reset viene rilasciato. Le porte invertenti con trigger di Schmitt servono, al solito, a squadrare opportunamente il segnale di reset.
![Figura 1: un semplice circuito di reset al power-up (da [1]).](https://it.emcelettronica.com/wp-content/uploads/2019/10/semplice-circuito-di-reset-power-up.jpg)
Figura 1: un semplice circuito di reset al power-up (da [1])
Un’altra cosa da considerare è la seguente. In teoria, al power-up o dopo il reset, la flash si porta in una modalità del tipo Read Array in cui è abilitata la lettura dei dati interni. Sempre a causa di transienti sulle linee di controllo (incluse quelle di reset), durante le fasi di commutazione al power-up potrebbe accadere che la memoria accetti del rumore come comandi spuri e si porti quindi in un diverso stato, ad esempio di Status Register Read. Questo potrebbe portare a interpretare erroneamente i successivi comandi, con il rischio di sovrascrittura o cancellazione dei dati. Per evitare questo, potrebbe essere utile forzare la flash nella modalità corretta di Read Array, subito dopo il power-up, mediante specifico comando software; nel caso in cui le memorie supportino comandi istruiti mediante tre successivi accessi, è opportuno che il comando di reset software sia inviato per altrettante volte. Un altro accorgimento che si può applicare per prevenire sovrascritture accidentali della memoria flash consiste nel tenere disabilitata la tensione accessoria Vpp (per i dispositivi che ne facciano uso), se questa non è esplicitamente necessaria. Mancando, infatti, la tensione, anche nell’eventualità di un comando interpretato male nelle condizioni discusse finora, i dati memorizzati non sarebbero corrotti. Per commutare la tensione di programmazione Vpp della flash si può usare il circuito mostrato in Figura 2.
![Figura 2: un circuito per commutare la tensione di programmazione delle memorie flash (da [1]).](https://it.emcelettronica.com/wp-content/uploads/2019/10/un-circuito-per-commutare-la-tensione-di-programmazione-delle-memorie-flash.jpg)
Figura 2: un circuito per commutare la tensione di programmazione delle memorie flash (da [1])
… e da quello software
Oltre ai meccanismi di protezione hardware discussi in precedenza, praticamente tutti i dispositivi flash supportano metodi di protezione dei singoli blocchi mediante specifici comandi software istruiti alla memoria. Ogni blocco, ad esempio, dispone di bit di controllo di protezione che può essere asserito per inibire qualsiasi operazione di scrittura o cancellazione. In genere il dispositivo, qualora riceva un comando di write o erase per un blocco protetto, lo ignora e ritorna in una modalità di lettura. Alcuni dispositivi dispongono poi di un bit di controllo per la protezione dell’intera memoria e/o di un altro che consente di disabilitare la possibilità di cambiare di stato gli stessi bit di protezione dei singoli blocchi. In alcuni casi è anche supportata la possibilità di proteggere tali bit di lock da variazioni di stato mediante password a 64 bit; in questo modo, senza conoscere la corretta password (che ovviamente è programmabile dall’utente stesso prima di attivare la modalità corrispondente) non è possibile disabilitare. I bit di protezione dei singoli blocchi sono in genere memorizzati in modo volatile.
Al power-down, o dopo reset del dispositivo, il contenuto attuale viene perso e alla ripresa il dispositivo riparte quindi nella condizione di default (ad esempio, con tutti i blocchi non protetti). In realtà, alcuni dispositivi dispongono di capacità di memorizzazione dei bit di lock in modo non volatile (la protezione può essere abilitata singolarmente per ogni blocco ma rimossa soltanto per tutti i blocchi insieme) o addirittura permanente. In quest’ultimo caso, tuttavia, la protezione non può essere rimossa, trasformando, in definitiva, il blocco protetto in un’area di memoria ROM. Infine alcuni dispositivi più recenti supportano anche la protezione dei singoli blocchi da ogni tipo di accesso (scrittura, lettura o cancellazione) mediante password a 64 bit. È solo il caso di osservare che il meccanismo di protezione e unlock dei singoli blocchi descritto, sebbene simile nelle linee generali, presenta alcune differenze tra i vari modelli dei diversi produttori. È quindi buona norma assicurarsi del funzionamento del proprio dispositivo prima di utilizzare una particolare procedura di protezione della memoria.
