Scopriamo cosa è e come funziona una SD Card.
Un po’ di storia
La memoria rimovibile del computer si è evoluta nel corso degli anni attraverso una serie di supporti diversi. Inizialmente i dischi rimovibili erano magnetici: Floppy e poi Stiffy (chiamati comunemente sempre Floppy Disk).
Negli anni ’90 l’archiviazione rimovibile è passata al supporto ottico Compact Disk (poi superato dai DVD).
Negli anni 2000, grazie ai progressi della tecnologia di memoria FLASH, si è diffusa l’archiviazione rimovibile basata su FLASH. Inizialmente si trattava soprattutto di unità USB. Sono emersi anche diversi formati di schede di memoria concorrenti, tra cui Sony Memory Stick, CompactFlash (CF), xD-Picture Card, Toshiba SmartMedia e MultiMediaCard (MMC); la scheda Secure Digital (SD), tuttavia, ha guadagnato la maggior parte del mercato.
Le SD Card (schede SD) sono simili alle MMC (e in effetti derivano da queste ultime), ma sono leggermente più spesse (2,1 mm contro 1,4 mm delle MMC) e sono state sviluppate per aggiungere una funzione DRM (Digital Rights Management) per combattere la pirateria musicale. In generale, le SD Card sono retrocompatibili con le schede MMC, il che significa che le schede MMC possono essere utilizzate dove è supportata una SD Card (ma non necessariamente il contrario). MMC e SD continuano a coesistere, con SD più popolare per la memoria rimovibile e MMC (sotto forma di eMMC) più popolare per la memoria a saldare nei sistemi embedded.
Fattore di forma
Le SD Card sono disponibili in 3 fattori di forma. In origine c’era la SD full-size, seguita dalla miniSD e dalla microSD.
Interfaccia di comunicazione
La piedinatura (pinout) della SD Card è la seguente:
Le SD Card supportano due protocolli di comunicazione: SD Bus e SPI Bus (ci sono anche i protocolli UHS-II Bus e PCIe Bus supportati da alcune schede più recenti con pin aggiuntivi, ma SD Bus e SPI Bus sono di gran lunga i più comuni).
Poiché praticamente tutti i microcontrollori moderni includono una periferica SPI, quest’ultima è un mezzo popolare per gli sviluppatori embedded per comunicare con le SD Card.
Alcuni microcontrollori includono anche una periferica SDIO per comunicare con le SD Card. Poiché il protocollo SD bus può trasferire dati fino a 4 bit alla volta (sui pin DAT0-DAT3) e poiché dispone di una linea di comando separata (CMD), i trasferimenti di dati tramite SD bus possono essere 4-5 volte più veloci rispetto all’utilizzo del bus SPI (che può trasferire solo 1 bit alla volta). Il bus SD inizia in modalità a 1 bit, ma può essere impostato in modalità a 4 bit inviando i comandi appropriati.
Le schede si avviano di default in modalità bus SD (1 bit), ma possono essere impostate in modalità SPI inviando un comando specifico (CMD0) tenendo bassa la linea CS. Poiché il pin CMD del bus SD corrisponde al pin MOSI del bus SPI e il pin CLK del bus SD corrisponde al pin SCK del bus SPI, è possibile utilizzare il controller SPI dell’MCU per inviare il comando.
Questo articolo non cercherà di coprire l’intero set di comandi della SD Card o il protocollo di comunicazione. Le specifiche sono disponibili presso la SD Association (o a volte può essere più semplice controllare il documento delle specifiche presso il produttore della SD Card), tuttavia la maggior parte degli sviluppatori utilizzerà semplicemente una libreria di codice esistente piuttosto che scrivere la propria da zero.
Memorizzazione dei dati
La lettura e la scrittura sulle SD Card avviene in blocchi, solitamente di 512 byte. Uno schema di archiviazione File System, come FAT16 o FAT32, è solitamente implementato sulle schede (come strato concettuale sopra la memoria FLASH grezza). I file system sono metodi strutturati di archiviazione dei dati (in file e directory) e sono gestiti dal software dell’host (microcontrollore o computer), non dalla SD Card stessa. Anche in questo caso, la maggior parte degli sviluppatori sceglierà di utilizzare semplicemente una libreria di file system esistente piuttosto che scriverne una propria da zero.
Il file system FAT16 è più semplice e si è diffuso fino a quando le SD Card da 2 GB o più piccole hanno cominciato a scarseggiare, perché 2 GB è la dimensione massima che FAT16 può gestire. FAT32 può gestire file system di dimensioni fino a 16 TB. Poiché le SD Card da 2 GB o più piccole sono diventate sempre più difficili da trovare (perché non vengono più prodotte), molti sviluppatori sono stati costretti a migrare i loro progetti dall’uso di un file system FAT16 all’uso di FAT32.
Affidabilità
Le SD Card utilizzano internamente la memoria FLASH e, come tale, i dati vengono cancellati in blocchi, solitamente di dimensioni pari o superiori a qualche kilobyte. Pertanto, può essere necessario cancellare e riscrivere gran parte di un intero blocco di memoria per scrivere nuovi dati. Poiché questa operazione richiede un po’ di tempo, se viene a mancare l’alimentazione durante il processo, i dati possono andare persi e il file system danneggiato. Inoltre, la libreria FAT può memorizzare i dati nella cache della RAM dell’MCU (unità microcontrollore) o dell’MPU (unità microprocessore) per ridurre il numero di operazioni di cancellazione-scrittura nella memoria FLASH (riducendo l’usura della memoria, che ha un numero limitato di cicli di cancellazione-scrittura che possono essere eseguiti) e quindi, ancora una volta, in caso di interruzione dell’alimentazione o di arresto del sistema, i dati andranno persi.
Poiché la memoria FLASH ha un numero limitato di cicli di cancellazione-scrittura che possono essere eseguiti, alcune SD Card includono una funzione di livellamento dell’usura nel loro controller interno, che distribuisce automaticamente le operazioni di cancellazione-scrittura in modo uniforme su tutta l’area della memoria FLASH (in modo invisibile per l’utente, poiché traduce automaticamente gli indirizzi della memoria fisica in indirizzi della memoria virtuale).
Sono disponibili schede SD industriali che offrono maggiore affidabilità e resistenza. Queste schede sono dotate di controller che implementano funzioni quali il livellamento dell’usura e l’ECC (error correcting code -codice di correzione degli errori) e le schede di fascia più alta utilizzano anche la tecnologia di memoria FLASH SLC (single-level-cell) o pSLC (pseudo-single-level-cell) invece della tecnologia MLC (multi-level-cell). MLC è una tecnologia che memorizza più bit per cella di memoria, riducendo i costi ma anche l’affidabilità e la resistenza. Per le applicazioni remote, critiche per la sicurezza e ad alta affidabilità, si consigliano le schede SD industriali.
Livelli di tensione
Le SD Card funzionano a 3,3 V per impostazione predefinita, quindi sono necessari traduttori di tensione per interfacciarle con microcontrollori a 5 V. Le schede SDHC e SDXC possono passare al funzionamento a 1,8 V su comando, che è migliore per le segnalazioni ad alta velocità.
Proteus, distribuito da Galgo Electronics, include modelli di simulazione di schede MMC / SD Card con interfacce SPI, che possono essere collegate ai diversi microcontrollori che Proteus supporta anche in simulazione. Inoltre, la comunicazione SPI tra il microcontrollore e la scheda MMC/SD può essere sottoposta a debug utilizzando lo strumento SPI Debugger Virtual Instrument.
È possibile scaricare la versione demo e sperimentare la scrittura e l’accesso ai dati dalle schede SD/MMC. Sono disponibili anche un paio di progetti campione già pronti con esempi di codice e immagini FAT32 vuote.
Articolo di Dane du Plooy – eiTech Systems – All content Copyright Labcenter Electronics Ltd. 2024 – Per l’articolo originale clicca qui
Pur non avendo una preparazione specifica, trovo il tutto molto interessante anche solo per poter capire ed orientarsi nel mondo delle comunicazioni.