DigitalSpirit / Wiki / Fatonpic

Présentation

Forum associé

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 :

Encore à faire si le besoin se fait sentir :

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 :

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.

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 !

Liens

Projets similaires ::