Présentation
Ce projet fait parti intégrante de PicCompactFlash, ainsi, avec ces 2 projets, il est possible d'accéder à une Compact Flash formatée en FAT16. Dans un futur proche, j'étendrai le support de stockage au SD Card et pourquoi pas aux disques durs.
Voici les principales caractéristiques du projet FatOnPic :
- Proche du standard dans les fonctions d'interface (fopen, fread, fclose, fwrite...)
- Occupe peu de mémoire (actuellement, 8ko de mémoire programme, et 472 octets de Ram -> pour un fichier ouvert)
- Nombre illimité de fichiers ouverts à un instant T (limité uniquement par la ram), chaque fichier ouvert occupe 17 octets supplémentaires
- Système de cache optimisant la lecture des clusters de fichiers
- Gestion des longues arborescence de répertoire
- Compiler avec C18
Encore à faire si le besoin se fait sentir :
- Gérer les partitions
- Supporter les noms de fichier longs
- FAT32
Présentation technique
Ce pilote FAT16 est écrit en C et compilé avec C18, une grande attention à été donnée à l'occupation mémoire du programme aussi bien programme que RAM. Pour des raisons de facilité, de maintenance et de logique, le code est divisé en 3 couches bien distinctes + celle de l'utilisateur :
- La couche application est celle que l'utilisateur utilise directement
- La couche interface qui interagit directement avec l'utilisateur
- La couche pilote FAT
- Et enfin, la couche pilote CF qui s'occupe des accès avec le hardware, dans notre cas, la Compact Flash (mais qu'on peut aisément remplacer par une SD, ou autre...)
Chaque couche dialogue directement avec celle juste au dessus ou juste au dessous, ainsi, la couche Application dialogue uniquement avec Interface, cette dernière dialoguant avec Application et Pilote FAT :
En rouge, nous découvrons le périmètre que recouvre l'application FatOnPic, l'interfaçage utilisateur et les 2 couches pilotes, l'utilisateur souhaitant accéder à un fichier sur sa Compact Flash n'aura que à connaitre les appels contenu dans la couche Interface, tout le reste étant transparent pour lui.
Implémentation logique
Comme dit plus haut, tout est organisé en couche, voici un aperçu plus détaillé des différentes couches :
Commençons par détaillé ce schéma par les couches du bas, on y trouve les couches d'abstraction du hardware, c'est à dire les couches qui vont s'adapter au média auquel on veut accéder, dans notre cas, on trouve le média Compact Flash (SD et MMC sont là à titre d'exemple mais pourrait très bien être intégrer de la même manière), cette couche va s'occuper d'obtenir des infos sur le média, de l'initialiser, de lui faire faire un reset et enfin, le principal, lire et écrire des données dans les secteurs de ce dernier.
Ensuite, nous trouvons 2 couches, Block et FAT16, elles sont placés au même niveau car elles travaillent ensemble, la couche FAT16 s'occupe des accès au "FAT16 Boot Record" pour obtenir des infos sur la FAT, de "FAT Tables" qui contient les clusters, des "Directory Table" pour les entrées des répertoires et enfin des données des fichiers, pour avoir plus d'infos sur la structure d'une FAT, reportez-vous ici : FAT16. La couche Block quand à elle permet de charger des secteurs entiers dans un buffer de 512 octets car l'écriture dans un média tel qu'une Compact Flash se fait uniquement par block de 512 octets.
Et enfin, au sommet de cette hiérarchie, nous trouvons la couche Interface qui elle permet à l'utilisateur de lire, écrire, créer des fichiers, explorer des répertoires....
Implémentation logiciel
Au sein du projet MPLAB, on retrouve facilement la hiérarchie en couche comme vu plus haut, chaque couche étant disponible dans un .h contenant les defines, les prototypes des fonctions ainsi que les déclarations des variables et structures associé à un .c contenant le code source.
- Pilote Compact Flash
- cf.h
- cf.c
- FAT16
- fat.h
- fat.c
- Block
- block.h
- block.c
- Interface
- file.h
- file.c
- dir.h (en cours)
- dir.c (en cours)
Chaque fonctions étant commenté, je ne vais pas décrire le comportement de chaque fonction mais uniquement celle de la couche interface, c'est à dire, celle utilisable par l'utilisateur. Voici les prototypes des fonctions de la couche Interface pour la lecture :
<code c>
FILE fopen(const char, const rom unsigned char);
int fread(char, size_t, size_t, FILE);
unsigned char feof(FILE);
void rewind(FILE);
unsigned long filesize(FILE);
void fclose(FILE);</code>
Et pour l'écriture :
<code c>
unsigned char fflush(FILE);
int fwrite(char*, size_t, size_t, FILE);
int fputc(char, FILE);</code>
Comme vous le voyez, ces fonctions essaient de coller au mieux à la norme "ANSI C" pour faciliter la prise en main.
Pour la liste des fonctions disponible, ça se passe par ici : API
Tableau d'occupation de la mémoire :
Mode | Mémoire programme | Ram |
---|---|---|
Lecture | 8236 octets | 509 octets |
Tester
Un projet MPLAB est fourni et il vous permet de tester immédiatemment les fonctionnalités, pour ceux qui serait sous Linux ou Mac (sachez tout de même que Microchip commence à s'intéressez sérieusement aux autres OS), vous pouvez le compilez comme à votre habitude, ou en cas de problème, envoyez un message sur le forum...
L'application exemple fournie ouvre 3 fichiers (a.txt, b.txt et c.txt), affiche leur taille, et affiche leur contenu par le biais de la liaison série. J'ai écrit un "shell" qui permet de sa balader dans un disque à la manière de la ligne de commande avec des fonctions telles que dir, cd, cat...je le mettrai à disposition d'ici peu.
Télécharger
Ce programme est fourni sous les termes de la licence GNU General Public License
Attention, dans cette version, l'accès à la FAT16 est uniquement en lecture seule, l'écriture étant en phase de débug, pour plus d'informations dessus, merci de passer par le forum !
- Les sources complètent, le .HEX et le projet associé datées du 8 juillet 2005 fatonpic-ro beta.zip
Liens
Projets similaires ::
- Minty MP3 Un lecteur MP3 avec un 18F452, superbe réalisation !
- Projet Carmon Ecriture dans un fichier sur une Compact Flash avec un PIC pour logguer des coordonnées GPS
- Lecteur MP3 Piloté avec un PIC 16F877, un décodeur MP3 hard et bien sûr une Compact Flash
- Un autre lecteur MP3 Pour les démos sonores
- www.pictec.org Lecture / Ecriture sur Compact Flash
- Le site de Reinhard Krakow Un serveur web avec un PIC !