Dispositivi di archiviazione dati SPI: (micro) scheda SD, DataFlash o EEPROM seriale?


8

Sto rivisitando alcune delle mie abitudini di progettazione e una di queste è sottoposta a un attento esame: il dispositivo di archiviazione basato su SPI è costituito da schede (micro) SD, per il rapporto prezzo-capacità e velocità generalmente più elevate.

Tra i tre principali tipi di dispositivi di archiviazione basati su SPI - (micro) scheda SD, DataFlash e 25Cxxserie EEPROM SPI serie più semplice (e anche 24Cxxpreso in considerazione EEPROM integrata su microcontrollori e EEPROM I2C) che è il mezzo appropriato per i casi d'uso indicati sotto? Ricorda che uso tutti i supporti come dispositivi a blocchi grezzi, quindi l'argomento "Le schede SD hanno bisogno di un filesystem" non regge.

Casi d'uso:

  • Dati di configurazione e calibrazione del sistema. Esempi: indirizzo MAC per l'interfaccia Ethernet, tensione misurata del riferimento di tensione integrato.
  • Registri. Esempio: dati acquisiti dai sensori.
  • Codice e risorse del codice (troppo grandi per adattarsi alla memoria del programma o devono essere trasportati in modo portabile.) Esempio: aggiornamenti di sistema, stringhe di internazionalizzazione e localizzazione, risorse dell'interfaccia utente, caratteri.
  • Gestione della sicurezza e dei diritti digitali. Esempio: firme digitali di chiavi crittografiche (pubbliche e / o private, simmetriche e / o asimmetriche).

1
Risposta nella maggior parte dei casi: dipende.
Turbo J,

1
I chip flash SPI nudi possono essere molto più piccoli ed economici delle schede SD, ho visto alcune parti BGA da 2 MB per circa $ 2 e sono 1,8x2,5 mm, dimensioni del chicco di riso
Sam

Risposte:


11

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.

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.