Fondamentalmente, la scelta dipende principalmente da due criteri: se i dati da archiviare sono grandi o piccoli e se vengono riscritti spesso o meno:
- EEPROM è ottima per i piccoli dati che cambiano spesso. Il motivo è: viene venduto solo per piccole dimensioni, ma di solito possono essere cancellati a byte singolo. Inoltre, la resistenza EEPROM è molto alta (milioni di cicli).
- Flash è ottimo per i big data che non cambiano spesso. È disponibile a buon mercato per grandi dimensioni, ma quando è necessario sovrascrivere i dati, è possibile farlo solo per un'intera pagina, che può essere di pochi kB. E la resistenza è maggiore nell'intervallo di 100.000 cicli.
Non entrerò in maggiori dettagli sulla differenza tra entrambi, è già stato coperto:
Per quanto riguarda le schede SD: la scheda SD è un tipo rimovibile di flash e, come tale, segue gli stessi vincoli di un normale flash. Tuttavia, in genere utilizza il flash NAND, mentre in genere i chip del flash seriale utilizzano il flash NOR. Il flash NAND è più conveniente per la scrittura (pagine più piccole, cancellazione più rapida) ma è meno affidabile. Potresti ottenere blocchi danneggiati dopo un po ', se fai molte scritture. Il livellamento dell'usura può mitigare ciò, ma non è sempre implementato in schede SD economiche ( è vero che una scheda SD / MMC porta il livellamento con il proprio controller? ). Potresti implementarlo nel software, ma non è banale.
La scelta dell'interfaccia (I2C o SPI) è tuttavia completamente indipendente. I2C è più lento ma utilizza meno pin. Anche la EEPROM I2C è generalmente più economica della SPI, ma di solito decidi di utilizzare l'una o l'altra a seconda del modo in cui hai attribuito i pin MCU nella tua applicazione.
Ora, hai fornito casi d'uso specifici, quindi esaminiamoli uno per uno:
Dati di configurazione e calibrazione del sistema
Bene, questo non pone molti vincoli: questi dati sono generalmente molto piccoli e non cambiano spesso. Quindi, qui, il più semplice è metterlo dove costa meno:
- la EEPROM MCU interna se ne hai una
- o qualche flash esterno se ne hai già bisogno per altri scopi
- o eventualmente una scheda SD se non si dispone di altra memoria persistente disponibile. Tuttavia, poiché alla fine la scheda SD può essere rimossa e inserita in un altro dispositivo, i dati di calibrazione non sarebbero più coerenti. Quindi potresti voler evitare questo.
Se non vi sono altre esigenze di archiviazione persistente nel dispositivo e non vi è alcuna EEPROM interna nell'MCU, è possibile eventualmente utilizzare una pagina flash specifica nel flash dell'MCU stesso (se l'MCU lo consente). Altrimenti, puoi ripiegare su una piccola EEPROM esterna.
Si noti che nel caso specifico degli indirizzi MAC, ci sono EEPROM vendute con un indirizzo MAC preprogrammato all'interno, garantito per essere univoco (ad esempio Microchip 24AAxxx). Quindi sarebbe la strada da percorrere, a meno che non vi sia stato ufficialmente attribuito un blocco di indirizzi da IEEE o se siete disposti a rischiare usando indirizzi attribuiti localmente.
logs
Questo di solito è grande e cambia spesso. Grande significa flash, non EEPROM. Quindi puoi andare con un chip flash o una scheda SD, ma se i registri vengono davvero riscritti spesso, è meglio usare una scheda SD. Altrimenti, rischi di consumare il chip flash e, se è saldato sulla scheda, sarà più difficile sostituirlo rispetto a una scheda SD. Si noti inoltre che, quando si scrivono registri scorrendo ciclicamente su tutte le pagine flash, indossare il livellamento diventa effettivamente banale da implementare.
Nel caso in cui si tratti di piccoli registri, sei fortunato, scegli EEPROM (a condizione che la resistenza sia accettabile).
Nota che, se la resistenza è un vero problema, ci sono soluzioni aggiuntive con resistenza praticamente illimitata e dimensioni relativamente grandi: F-RAM e MRAM. Ma costano un braccio e una gamba e non li hai menzionati come un'opzione. Si noti inoltre che queste due nuove tecnologie raggiungono una velocità di cancellazione / scrittura molto migliore rispetto al flash, quindi per la registrazione continua, questo può essere interessante.
Codice e risorse del codice
Di solito grande, ma non cambia spesso. Un chip flash esterno (in genere NOR flash) è l'ideale per questo.
Gestione della sicurezza e dei diritti digitali
Questo è più complicato. Se contiene davvero dati sensibili che non dovrebbero mai essere estratti, è meglio utilizzare effettivamente una smart card nel fattore di forma SIM (eventualmente con un firmware personalizzato). Ma questo, naturalmente, complica il disegno un sacco . Una soluzione alternativa (più semplice ed economica) potrebbe essere un chip di sicurezza dedicato come la serie Atmel AT88SC, ma i comandi disponibili sul chip devono avere un senso per l'applicazione specifica. Cosa si può fare su questo chip e in quali condizioni deve essere pianificato con cura.
Se hai bisogno solo di una sicurezza "di base", il più semplice è usare la EEPROM interna della MCU. Non sarà sicuro come una smart card o un chip dedicato (che contiene misure di sicurezza specifiche, come la protezione da attacchi di luce, contromisure contro l'analisi di potenza / guasto all'interno del chip, ecc ...), ma questo è il meglio che puoi fare.
Altrimenti, se non ci sono EEPROM interne, finirai con le stesse opzioni dei dati di configurazione / calibrazione. Tuttavia, l'utilizzo di qualsiasi chip esterno per archiviare dati sicuri è un rischio poiché le linee dati potrebbero essere facilmente monitorate con un semplice analizzatore logico e i dati sensibili estratti. Quindi, anche se si dice che EEPROM è più difficile da manomettere rispetto al flash, scegliere l'uno o l'altro nel caso di un chip esterno non fa alcuna differenza dal punto di vista della sicurezza.
Infine, la scheda SD è sicuramente la peggiore idea qui, in quanto è rimovibile. I dati sensibili potrebbero quindi essere letti da un PC, senza nemmeno bisogno di alcun hardware specifico.