Quando si lavora nel mondo integrato ci sono alcune possibilità che si possa andare incontro ad un’applicazione che richiede maggiore spazio di memoria di quanto sia disponibile nella maggior parte dei microcontrollori e anche degli EEPROM esterni. Ecco perché vanno molto bene le schede SD o MMC. Sono a basso costo e facile da lavorare.
Per la maggior parte delle applicazioni tutto ciò che serve è una porta SPI, e anche se non disponiamo di essa è possibile emularne facilmente una sulla maggior parte dei microcontrollori. Con la porta SPI si può comunicare e memorizzare i dati per la scheda SD, ma è un po’ più complicato. La maggior parte delle applicazioni richiede di memorizzare o recuperare i dati da un personal computer. Allora si ha bisogno di un modo per collegare l’applicazione al computer e soprattutto un metodo per organizzare i dati in un modo che sarà riconosciuto dal sistema operativo del computer. Per questo è necessario disporre di una sorta di sistema di gestione dei file. E’ possibile fare uso di un sistema FAT 16 o FAT 32. Il sistema File Allocation Table (FAT) è semplice e supportato da quasi tutti i sistemi operativi. E’ necessario per prima cosa capire come funziona prima di aggiungerla al dispositivo integrato.
Le schede SD o MMC tendono a gestire la loro memoria in dimensioni fisse conosciute come settori o talvolta dimensioni di pagina, che solitamente sono di 512 o 256 byte. In un sistema FAT alcuni di questi settori sono utilizzati per la File Allocation Table, che agisce come un indice, mentre gli altri settori sono utilizzati per la memorizzazione dei dati. Tutti questi settori possono essere uniti per formare ciò che è noto come cluster. Le dimensioni dei cluster possono variare da 1 a 64 settori. I cluster sono gli enti che sono stati monitorati all'interno della File Allocation Table. Dato che il cluster può variare da 1 a 64 settori, deve essere presa una decisione sulla dimensione dei cluster. Il vantaggio di avere una più ampia dimensione dei cluster è che per gestire la memoria viene utilizzato un minor numero di cluster e quindi è obbligatoria una minore File Allocation Table.
Questo rende le cose più efficiente sul sistema dei file, ma usa molto spazio della memoria quando ci sono memorizzati piccoli file per ogni cluster. Quindi sostanzialmente si desidera scegliere la dimensione dei cluster in base al tipo di dati e le dimensioni con cui si dovrà lavorare. Più piccoli sono i dati e più piccola sarà la dimensione dei cluster.. In tal modo si garantisce un uso efficiente della memoria.
La presente File Allocation Table è solo una tabella contenente informazioni relative a ciascun cluster. Ad esempio in un sistema FAT16 ogni tabella è un numero intero a 16-bit che dimostra se il cluster se è vuoto o pieno, legato ad un altro cluster, riservato o se contiene settori danneggiati. Un cluster pieno è rappresentato da 0xFFFF mentre uno vuoto è dato da 0x0000. Quando un file richiede più di un cluster di spazio di memoria, si forma una catena di cluster e la File Allocation Table collega questi cluster avendo l'indirizzo del prossimo cluster presente in ogni indice fino all'ultimo cluster, che ha un 0xFFFF per rappresentare la fine dei dati o l'ultimo cluster nel file. Anche 0x0001 rappresenta un cluster riservato mentre 0xFFF7 rappresenta un cattivo cluster. La tabella seguente descrive tali caratteristiche.
La File Allocation Table è molto importante e due o più copie di essa sono memorizzate prima dei cluster dei dati. Lo scopo principale della File Allocation Table è quello di tenere traccia dello status dei cluster (vuoto, pieno) e la posizione, ma non contiene alcuna informazione circa i file attualmente archiviati. Per questo scopo abbiamo la root directory.
La root directory possiede un’importante informazione sul file come il nome, l'estensione, gli attributi (archivio, directory, se è nascosto, di sola lettura, sistema e volume), la data e l’ora della creazione, l'indirizzo del primo cluster del file/directory dei dati e, infine, le dimensioni del file/directory. La root directory è memorizzata dopo l'ultima copia della File Allocation Table e prima di presentare i cluster dei dati. La struttura della root directory è indicata nella seguente tabella.
Gli attributi hanno alcune maschere di bit nell’entrata della directory. Sono 01 per la sola lettura, nascosto per 02, 04 per il sistema, 08 per l’etichetta di volume, 10 per la sottodirectory, e il 20 per l’archivio. La data e l'ora memorizzano l'ultima volta che il file è stato modificato. Per quanto riguarda il Tempo i bit 15 a 11 rappresentano le ore, i bit 10 a 5 rappresentano i minuti e i bit 4 a 0 rappresentano i secondi diviso per due. Per quanto riguarda la Data i bit 15 a 9 rappresentano anno a partire dal 1980 al 2107, 8 bit per rappresentare Mese 5, e 4 a 0 bit rappresentano la il giorno. La sezione del primo cluster collega il file con la File Allocation Table. Questo numero punta al primo cluster contenente il file dei dati. Infine, la sezione Dimensioni contiene (in byte) le dimensioni dei file dei dati.
È possibile utilizzare le informazioni dalla directory principale per scrivere una varietà di funzioni per il vostro sistema integrato. Ad esempio, l'ora e la data di stampa di un sensore di dati in un logger dati.
Ora che si conosce la struttura di base del sistema FAT16, è possibile iniziare a sviluppare applicazioni per le quali gli utenti possono facilmente comunicare con il dispositivo integrato e un computer. Aggiungere un dispositivo di memorizzazione di massa come una scheda SD significa aumentare la flessibilità a qualsiasi dispositivo. Consuma molto scrivere il codice necessario per l'attuazione del sistema FAT16, nonché il codice per supportare la comunicazione con una scheda SD. La buona notizia è che ci sono molti software liberi e librerie a pagamento che si prendono cura dei codici al posto vostro. Tutto quello che bisogna fare è modificare il codice per adattare le piadinature specifiche e l'architettura del microcontrollore.
Ad esempio Microchip offre “File I/O Functions Using Microchip's Memory Disk Drive File System Library”, che è fondamentalmente il sistema FAT16 per alcuni dispositivi PIC. È possibile scaricare il codice sorgente e il report dell’applicazione da qui. Inoltre, in alcuni casi ci sono a disposizione moduli di hardware che implementano il sistema FAT per voi. Grazie a loro si risparmia il tempo di sviluppo, ma questi chip sono molto costosi e utilizzati in gran parte in dispositivi di archiviazione di massa USB. Personalmente trovo che siano uno spreco di denaro, dato che è relativamente semplice implementare il sistema FAT sul microcontrollore.
Nessun commento:
Posta un commento