Bonjour à tous,
Je suis plus présent sur le forum élec, mais ici c'est une question plus "soft" (mais bas niveau):
Dans le cadre d'un développement d'un projet sur microcontrôleur (PIC ou autre...) perso & open source, je cherche à développer un système de fichier basé sur la FAT32.
Il s'agit de réaliser un datalogeur météo, qui écriera des données sur une carte SD en FAT32.
On va ici s'intéresser qu'au software gérant le système de fichier TAF32, dans la mesure où je dispose déjà de 2 fonctions primitives essentielles d'accès aux secteurs de la carte SD :
(Pour les curieux, j'utilise MikroC de MikroElectronika)Code:char Buffer[512]; // L'image du contenu d'un secteur long Numero_secteur; MMC_mmc_Read_Sector(Numero_secteur, Buffer); // Lis le contenu d'un secteur MMC_mmc_Write_Sector(Numero_secteur, Buffer); // Écrit dans un secteur
Comme la mémoire RAM et ROM sont très limitées, je souhaite me contenter du minimum absolut pour la gestion FAT32 pour que mes données soient lisible sur PC.
Formatage de la carte SD + création d'un fichier nommé : "DONNES.TXT" (exclusivement réalisée par le PIC):
(Si cela était fait sur le PC cela serait +/- Équivalent à la commande format <Lecteur>: /A:2048 /V: DONNEES /FS:FAT32)
Si la carte SD est vierge ou sans système connu, le programme sur le PIC formate la carte comme cela :
- Pas de MBR => 1 seule partition
- Pas de programme de BOOT
- 1 cluster = 4 secteurs = 2048 octets (Pour info on ne peut pas faire moins avec des cartes de qq Go !)
- Création d'une entrée fat pour 1 fichier "DONNES.TXT"
Donc ici, pas de répertoires, pas de création de fichiers avec fopen etc...
Pour l'écriture (exclusivement réalisée par le PIC) :
- Accès à la FAT pour trouver le 1er cluster et secteur libre
- On remplis les secteurs les un à la suite des autre pour remplir "DONNES.TXT" (pas de fragmentation possible car un seul fichier n'est autorisé)
- On mets à jour la table d'allocation et la taille du fichier
- On mets à jour le FSIO ?
- Le PC ne devra pas écrire sur la carte SD il ne set qu'à lire les données
Pour la lecture des données sur PC (La carte SD est insérée dans un lecteur sur le PC)
- C'est l'OS qui le gère à son habitude => Transparent pour l'utilisateur (c'est tout le but de ce programme !)
Pour la lecture des données (Sur le PIC)
- Accès à la FAT
- Accès aux clusters et récupération des données.
Place au code : (que je complèterais au fur et à mesure :
Voila, bientot la suite...Code:// Variables globales : char Buffer[512]; // format() : Formate rapide de la carte SD en fat 32 // Pour le moment n'écrit que le secteur zéro : 1er secteur de l'unique partition void format(void) { int i = 0; // Informations sur la partition FAT32 qui va être créée : // 2048 octets par clusters const unsigned char Boot_code[] = {0xEB, 0x58 ,0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x04, 0x3E, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x73, 0x00, 0x61, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0xE6, 0x1C, 0x0A, 0x44, 0x4E, 0x4F, 0x20, 0x4E, 0x41, 0x4D, 0x45, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, 0x54, 0x33, 0x32, 0x20, 0x20, 0x20}; for (i = 0; i < 512; i++) Buffer[i] = 0; // Créé une image de secteur vierge for (i = 2; i < 1024; i++) mmc_Write_Sector(i, Buffer); // Efface le début de la carte for (i = 0; i < 90; i++) Buffer[i] = Boot_code[i]; // Copie le bootcode identificateur de la partition mmc_Write_Sector(0, Buffer); // Ecriture du secteur 0 }
en fait si vous avez un algo simple de gestion de fat 32 cela pourrait m'aider )
Merci !
Matthieu
-----