Gestire un file system – Parte 1

Sul blog di Elettronica Open Source puoi leggere non solo tutti gli articoli Premium riservati agli abbonati Platinum 2.0 e inseriti nella rivista Firmware 2.0 (insieme ad articoli tecnici, progetti, approfondimenti sulle tecnologie emergenti, news, tutorial a puntate, e molto altro) ma anche gli articoli della Rubrica Firmware Reload. In questa Rubrica del blog abbiamo raccolto gli articoli tecnici della vecchia rivista cartacea Firmware, che contengono argomenti e temi evergreen per Professionisti, Makers, Hobbisti e Appassionati di elettronica. La libreria Microchip MDD (Memory Disk Drive) permette di trasferire e condividere i dispositivi di memoria portatili tra un sistema embedded e un personal computer, fornendo le funzioni di I/O in grado di leggere e/o scrivere su questi dispositivi di memoria tramite un microcontrollore.

L’Application Note AN1045 di Microchip [1] è una vera e propria miniera di informazioni utilissime per implementare la gestione di un file system su diversi modelli di microcontrollori della famiglia PIC. Il file system, realizzato fisicamente su comuni schede di memoria quali le SD card, viene denominato da Microchip Memory Disk Drive (MDD) File System ed è basato sulle specifiche ISO/IEC 9293. Il file system è compatibile con lo standard di formattazione FAT16, utilizzato sulle prime versioni dei sistemi operativi di casa Microsoft, come il DOS, Windows 3.1 e la primissima versione di Windows 95. Modificando opportunamente alcuni parametri di configurazione, lo stesso file system può anche supportare lo standard FAT32, il tipo di file system più comunemente utilizzato sulle schede di memoria SD (Secure Digital), sulle Compact Flash (CF), e sulle chiavette di memoria USB. È inoltre garantito il supporto per l’ormai obsoleto file system di tipo FAT12.

Ricordiamo inoltre che il file system FAT16 gestisce uno spazio di memoria con dimensione fino a 2 gigabyte, mentre il FAT32 è in grado di gestire unità di memoria fino a 2 terabyte. I microcontrollori supportati sono tutti i modelli a 8-bit della serie PIC18, tutti i modelli a 16 bit appartenenti alle famiglie PIC24F, PIC24H, dsPIC30F, dsPIC33F, e le versioni a 32 bit della famiglia PIC32. Come vedremo più in dettaglio, i requisiti in termini di spazio di memoria flash e RAM dipendono direttamente da quali e quante opzioni si vogliono abilitare contemporaneamente. Se ad esempio l’applicazione target richiede una struttura di file system semplice e poco strutturata (tutti i file memorizzati nella cartella root dell’unità logica di memoria), i requisiti in termini di spazio di memoria flash e RAM saranno molto meno stringenti di quelli richiesti da un’applicazione in cui si utilizzi un file system con una struttura gerarchica ad albero organizzata su più cartelle. Il file system FAT16, a parità di altri fattori, è inoltre più “leggero” di un file system FAT32. Microchip mette a disposizione degli sviluppatori tutto il codice sorgente del file system, come parte del pacchetto “Microchip Application Library”, liberamente scaricabile all’indirizzo indicato alla fine dell’articolo [2], nelle versioni per i sistemi operativi Windows, Linux (versione beta), e Mac OS X (versione beta). A livello hardware, sono inoltre disponibili da Microchip due schede opzionali da utilizzarsi sia per scopi di valutazione sia di sviluppo e debugging.

L’INTERFACCIA

Le schede di memoria di tipo SD, MMC e CF, che hanno il compito di “ospitare” il file system di tipo FAT16 o FAT32, comunicano con il microcontrollore per mezzo di una normale interfaccia di tipo SPI. Avremo quindi le consuete quattro linee di comunicazione Serial Data In (SDI), Serial Data Out (SDO), Serial Clock (SCK), e Chip Select (CS). Inoltre, le schede di memoria SD dispongono di due segnali addizionali: "card detect" (per rilevare se la scheda è fisicamente inserita nel suo socket), e "write-protect" per rilevare se sulla scheda è stata impostato il sistema di protezione dalla scrittura o meno. Le schede MMC non hanno un segnale fisico relativo alla protezione dalla scrittura, ma la maggior parte dei connettori sono creati in modo tale da simulare lo stato di non protezione dalla scrittura. Entrambe le daughter card proposte da Microchip come evaluation board per l’MDD File System implementano un’interfaccia di questo tipo. È tuttavia possibile progettare un proprio circuito partendo da “scratch”: in questo caso può essere necessario apportare qualche modifica alla configurazione del file system “rimappando” i segnali di interfaccia (riferiti nella versione originale Microchip al layout della scheda PICtail Plus) a quelli effettivamente utilizzati nella vostra applicazione.

IL FILE SYSTEM

Nel file system FAT16, i dati sono memorizzati all’interno di settori, laddove la dimensione tipica di un settore è normalmente pari a 512 byte. Poiché lo spazio di indirizzamento è limitato superiormente al valore FFFFhex, al fine di incrementare lo spazio di memoria gestibile dal file system, i settori vengono raggruppati in cluster i quali condividono uno stesso indirizzo. Il primo settore presente sulla scheda viene chiamato Master Boot Record (MBR), e contiene le informazioni relative alle diverse suddivisioni logiche (o partizioni) presenti sulla scheda stessa. Da un punto di vista teorico, ciascuna partizione può essere formattata e utilizzata per contenere un particolare file system. Le schede di memoria attualmente più utilizzate, le schede SD, vengono solitamente inizializzate con un’unica partizione attiva, la quale include le seguenti componenti:

  • settore di boot: è il primo settore della partizione e contiene le informazioni di base relative al file system;
  • regioni FAT (FAT1, FAT2, …, FATn): ogni regione FAT è in pratica una mappa che indica come i cluster sono organizzati all’interno della regione stessa. Per ragioni di ridondanza, esistono in genere due copie di FAT in modo tale da prevenire possibili fenomeni di corruzione dei dati;
  • root directory: nel file system FAT16, questa regione si trova dopo le regioni FAT, mentre nel caso di file system FAT32 la root è una normale catena di cluster che può trovarsi in un qualunque punto del file system. La root directory è composta da una tabella di directory i cui elementi (entry) sono le subdirectory e i file stessi;
  • regione dati: contiene i file e le tabelle delle directory e subdirectory. Da notare che quest’area mantiene inalterato il suo contenuto anche quando un file viene rimosso, e ciò avviene fino alla successiva riscrittura.

Il file system FAT16 si basa su un sistema di FAT a 16 bit e perciò permette di rappresentare fino a 65.536 cluster; il file system FAT32, invece, utilizza FAT a 32 bit (di cui 28 effettivamente impiegati), consentendo l’indirizzamento fino a 268.435.456 cluster. Nel settore di boot è inoltre presente un byte con segno che indica il numero di settori per cluster. I valori ammissibili sono i seguenti: 1, 2, 4, 8, 16, 32 e 64. Facendo un rapido calcolo possiamo subito verificare che con il FAT16 è possibile gestire fino a 2 Gb di spazio su disco. In Figura 1 è mostrata la struttura di una scheda di memoria SD o MMC.

Figura 1: struttura del disco

Figura 1: Struttura del disco

 

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend