Sd fat32
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

Sd fat32



  1. #1
    wintsif

    Sd fat32


    ------

    Bonjour à tous,

    je suis entrain de réaliser un projet qui consiste à lire des fichier sur une carte SD.

    Malheurseusement je rencontre quels soucis. L'initilalisation de la carte joue parfaitement, mais mon probleme est que je n'arrive pas à lire le secteur 0 de la SD(FAT32).

    Je programme un PIC18f2520.

    Quelle commande faut-il envoyer à la carte pour commencer la lecture?

    -----

  2. #2
    pazcal

    Re : Sd fat32

    Citation Envoyé par wintsif Voir le message
    Bonjour à tous,

    je suis entrain de réaliser un projet qui consiste à lire des fichier sur une carte SD.

    Malheurseusement je rencontre quels soucis. L'initilalisation de la carte joue parfaitement, mais mon probleme est que je n'arrive pas à lire le secteur 0 de la SD(FAT32).

    Je programme un PIC18f2520.

    Quelle commande faut-il envoyer à la carte pour commencer la lecture?

    Tu utilises une librairie particulière?

  3. #3
    wintsif

    Re : Sd fat32

    Non je n'utilise pas de librairie particulière.

    je n'ai pas forcément besion de code enfin pour l'instant. mais si vous avez déja les commandes qu'il faut envoyer pour faire la lecture du secteur0 je pense que sa pourra déja bien m'aider!

  4. #4
    Murayama

    Re : Sd fat32

    Bonjour!

    En procédant par ordre, si le code a été écrit de façon réfléchie,
    vous devez avoir:
    - 1 fichier qui s'occupe de la partie physique (SD)
    - 1 fichier qui s'occupe du format FAT.
    Si ce n'est pas le cas, séparez en 2 fichiers distincts.

    Je serais vous, j'essaierais d'abord de voir s'il est possible
    de lire un secteur quelconque de la carte. La commande est
    (de mémoire) CMD17.
    Donc faites un programme de test qui n'utilise que la partie SD,
    sans la partie FAT pour l'instant.
    - Êtes-vous capable d'initialiser la carte?
    - Êtes vous capable de lire un bloc quelconque?
    - Êtes-vous capable d'écrire un bloc? (Attention: pour essayer
    d'écrire un bloc directement avec le pilote SD, mettez une carte
    qui ne risque rien parce que vous allez pourrir le FAT).
    Ensuite seulement quand ces 3 fonctions sont vérifiées, vous
    pourrez vous occuper du FAT.

    Pascal


    Citation Envoyé par wintsif Voir le message
    Non je n'utilise pas de librairie particulière.

    je n'ai pas forcément besion de code enfin pour l'instant. mais si vous avez déja les commandes qu'il faut envoyer pour faire la lecture du secteur0 je pense que sa pourra déja bien m'aider!

  5. A voir en vidéo sur Futura
  6. #5
    Wankie panky

    Re : Sd fat32

    Bonjour,

    Si cela peux t'aider, voici la procédure exacte que j'utilise pour mes cartes SD:

    La commande CMD58 permet de lire le registre interne de la carte, et savoir si elle accepte un tension d'alim de 3v3. Si ton micro tourne sous 5v tu peux passer cette étape.

    Toute la phase d'initialisation doit se faire à basse fréquence, et les délais doivent être respecté.

    Ensuite tu peux envoyer la commande de lecture (CMD17) avec la bonne adresse.
    Images attachées Images attachées  

  7. #6
    wintsif

    Re : Sd fat32

    Merci pour votre aide.

    Pour se qui est de l'initialisation de la SD sa joue!
    J'utilise bien la commande CMD17 mais c'est justement là que j'ai un blême!
    je ne suis pas sur d'avoir compris cette fonction mais selon la doc de la carte SD, je dois integrer l'adresse du secteur0 à la command CMD17.
    Mais quelle est cette adresse?

    Pour l'instant j'envoie CMD17,0,0,0,0,0xFF. et directment apres je fais la lecture de la carte SD. La réponse ne m'envoie pas les 8premier bit qui me spécifie si la carte a était formaté dos(0xEB ou 0xE9) ou windows(0x00).

    Pour l'instant mon objetif principal est la lecture, car mon but est de lire un fichier audio.

    J'avoue que pour l'instant je ne suis pas encore très bien au claire avec la FAT32.

  8. #7
    Murayama

    Re : Sd fat32

    Bonjour!

    Je suis justement sur un système où il y a une carte SD. Ce n'est
    pas un FAT32, mais peu importe. Je crois que vous ne respectez
    pas les timings de la carte SD. L'adresse du secteur 0 est 0.
    L'adresse du secteur n est n x 512 (taille d'un secteur). C'est
    un peu paradoxal, alors qu'il n'est possible d'accéder que par
    blocs, de devoir donner l'adresse en octets, mais c'est comme ça.

    Voilà le timing en détail (voir images):
    Image 1: acquisition des 3 signaux de la carte SD. La zone en haut,
    c'est l'acquisition complète des lignes de données. En bas, c'est le
    détail de ce qui est entre [] gris dans la zone du haut, à droite du T
    (Trigger).
    J'aurais pu ajouter le CS, mais disons qu'il est là puisque ça marche.
    Vous devez reconnaître la commande 17 dont la valeur hexa est 51
    (le préfixe est 0x40. 0x40 + 17 = 0x51).
    Image 2: vous devez avoir une réponse 0 à la commande, quelques
    bytes plus loin. Notez que la zone observée n'est pas très éloignée
    du trigger.
    Image 3: J'avais au préalable écrit 0x69 dans tout le bloc 0.
    Je fais une détection du premier octet différent de 0xFF, et je
    trouve un FE. Le dernier bit est (si je me souviens bien) un bit
    d'erreur. C'est le signe que la carte est prête, on peut passer aux
    choses sérieuses.
    Mesure du délai entre la commande et le début des données: je
    trouve un peu moins de 1,15 ms. Je crois me souvenir que c'est
    très variable selon les cartes.

    Conclusion: Comme vous le voyez, vous ne pouvez pas directement
    lire les données après la commande comme vous essayez de le faire.
    Comme dans beaucoup de domaines, faut pas lésiner sur les
    préliminaires. Solution: lisez les octets de la carte jusqu'à avoir un
    octet différent de FF.

    Pascal

    PS: si vous voulez lire un fichier audio, vous n'avez pas intérêt à lire
    avec la commande 17 (random read). Comme vous pouvez le voir
    avec la 3 ème image, elle coûte cher en temps, plus d'1ms d'attente
    par bloc dans mon cas. Mais chercher à jouer avec est un bon début.

    Citation Envoyé par wintsif Voir le message
    Merci pour votre aide.

    Pour se qui est de l'initialisation de la SD sa joue!
    J'utilise bien la commande CMD17 mais c'est justement là que j'ai un blême!
    je ne suis pas sur d'avoir compris cette fonction mais selon la doc de la carte SD, je dois integrer l'adresse du secteur0 à la command CMD17.
    Mais quelle est cette adresse?

    Pour l'instant j'envoie CMD17,0,0,0,0,0xFF. et directment apres je fais la lecture de la carte SD. La réponse ne m'envoie pas les 8premier bit qui me spécifie si la carte a était formaté dos(0xEB ou 0xE9) ou windows(0x00).

    Pour l'instant mon objetif principal est la lecture, car mon but est de lire un fichier audio.

    J'avoue que pour l'instant je ne suis pas encore très bien au claire avec la FAT32.
    Images attachées Images attachées

  9. #8
    wintsif

    Re : Sd fat32

    Votre explication est très claire! Je vais donc essayer de ne pas faire une lecture directe et tester tous ça! merci pour l'aide!
    je vous tiendrai au courant pour les résultats, je ne vois pas pourquoi sa n'irait pas avec tous vos consiels!merci

  10. #9
    wintsif

    Re : Sd fat32

    J'ai trouvé le probleme!

    c'était une grosse erreur de ma part! mon programme resemblait a l'explication de Murayama, c'est pour ça que je trouvais bizzare les divers résultats qui ne correspondait pas du tous a se que je devais obtenir. L'erreur bête était un défaut de déclaration de variable.

    j'aurais encore une question car je n'ai pas bien compris le principe de fonctionnment de la FAT.
    Comment lit-on un fichier sur la FAT?(la FAT de ma SD a plusieur partitions)

    Quelque chose change si la carte est une SD standard et une SDHC?

  11. #10
    wintsif

    Re : Sd fat32

    après avoir envoyé la commande CMD17 et sa response je recois bien le Master Boot Record(MBR)!

    Que dois-je faire après pour trouver le fichier qui est sur la SD (FAT32)?

  12. #11
    PA5CAL

    Re : Sd fat32

    Il faut interpréter la table du MBR pour trouver la ou les partitions, en n'oubliant pas de vérifier leur format.

    Sur la partition recherchée, il faudra trouver la FAT et le répertoire racine. À partir de là, il sera possible de descendre l'arborescence des répertoires menant au fichier, puis trouver l'emplacement de la chaîne des clusters dont ce dernier est constitué.

    .
    Dernière modification par PA5CAL ; 10/05/2011 à 09h52.

  13. #12
    wintsif

    Re : Sd fat32

    merci pour ton conseil!

    j'ai donc maintenant caluculé le premier secteur du cluster!!! et là je suis coincé!
    comment accéder à la FAT?

  14. #13
    PA5CAL

    Re : Sd fat32

    Le premier secteur d'un volume FAT est le secteur de boot. Sa structure est expliquée par ici.

    Les données nécessaires pour connaître la FAT (File Allocation Table) sont :
    - le nombre d'octets par secteur, situé à l'offset 0x0B, sur 2 octets ;
    - le début de la FAT en nombre de secteurs (1=secteur suivant), situé à l'offset 0x0E, sur 2 octets.

  15. #14
    wintsif

    Re : Sd fat32

    Mon problème persiste

    Valeur obtenu
    BPB_RootEntCnt =0x0000 (ofset 17)
    BPB_BytsPerSec =0x0200 (ofset 11)
    BPB_ResvdSecCnt =0x18A6 (ofset 14)
    BPB_NumFATs = 0x02 (ofset 16)
    FATSz = 0x03AD (ofset36)
    N = 0x02 (ofset 40)
    BPB_SecPerClus = 0x40 (ofset 13)


    calucule
    RootDirSectors = ((BPB_RootEntCnt*32)+(BPB_Byts PerSec-1))/BPB_BytsPerSec.

    FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors.

    FirstSectorofCluster = ((N - 2) * BPB_SecPerClus) + FirstDataSector.

    FirstSectorofCluster =0x0200

    les calcules sont fait appartir du document qui est sur le sit suivant:
    http://msdn.microsoft.com/en-us/wind...dware/gg463080


    Le résultat que j'obtient pour FirstSectorofCluster et la meme adresse que le BPB???

    Es-ce que je fais quelque chose de faux?
    Es-ce que j'ai bien compris? faut-il bien prendre le résultat de FirstSectorofCluster pour l'utiliser comme adresse dans la commande CMD17?

  16. #15
    PA5CAL

    Re : Sd fat32

    Citation Envoyé par wintsif Voir le message
    BPB_RootEntCnt =0x0000 (ofset 17)
    Cela signifierait que la taille du répertoire racine est nulle, et que par conséquent la carte ne peut contenir aucun fichier... ?

    Non, cette valeur est nécessairement fausse.

    Il faudrait que tu vérifies si c'est bien le secteur de boot du volume que tu as lu.

    Citation Envoyé par wintsif Voir le message
    faut-il bien prendre le résultat de FirstSectorofCluster pour l'utiliser comme adresse dans la commande CMD17?
    Certainement pas. FirstSectorofCluster représente une adresse depuis le début du volume, et non pas depuis le début du disque ou de la carte.

    Par ailleurs, il est exprimé en nombre de secteurs du volume (dont la taille est indiquée par BPB_BytsPerSec) et non pas en nombre de secteurs de la carte (dont la taille est fixée par la librairie à laquelle CMD17 appartient). Les deux tailles de secteur sont généralement identiques et égales à 512, mais pas nécessairement.

  17. #16
    wintsif

    Re : Sd fat32

    j'ai pu lire la table d'allocation puis commencer à lire le début du fichier voulu mais le probleme et au moment ou nous devons changer de cluster!
    Nous ne trouvons pas ou se trouve l'information du prochain cluster!
    pouvez vous m'aider?

  18. #17
    PA5CAL

    Re : Sd fat32

    C'est la FAT qui donne la position du cluster suivant dans la chaîne des clusters appartenant à un fichier :
    • l'entrée de répertoire indique le numéro du premier cluster du fichier ;
    • dans la FAT, à la position correspondant au premier cluster, on trouve le numéro du second cluster, ou bien -1 s'il n'y en a qu'un ;
    • dans la FAT, à la position correspondant au second cluster, on trouve le numéro du troisième cluster, ou bien -1 si c'est le dernier ;
    ... et ainsi de suite.

  19. #18
    wintsif

    Re : Sd fat32

    Je viens de me rendre compte que nous lisions pas la table d'allocation mais ROOT DIRECTORY et le début des données d'un fichier.

    Notre probleme est de trouver au se situe la FAT pour pouvoir voire la chaine de cluster!

  20. #19
    Murayama

    Re : Sd fat32

    Bonjour!

    Les tables FAT se trouvent à l'endroit indiqué dans le premier
    secteur de la partition. Je ne sais plus exactement où c'est, mais
    en tout cas quand on lit le secteur 0 ou le premier secteur de la
    partition, on a accès à toutes ces infos. Il y a beaucoup de doc
    en cherchant un peu sur google. Normalement, vous devriez
    pouvoir extraire ou calculer le nombre de tables, le début de
    la première et leur taille (donc calculer le début des autres,
    etc...). Ensuite, vous pouvez calculer la taille physique de répertoire
    root, et l'accès aux données est juste après le root.

    Pascal

    Citation Envoyé par wintsif Voir le message
    Je viens de me rendre compte que nous lisions pas la table d'allocation mais ROOT DIRECTORY et le début des données d'un fichier.

    Notre probleme est de trouver au se situe la FAT pour pouvoir voire la chaine de cluster!

  21. #20
    PA5CAL

    Re : Sd fat32

    Citation Envoyé par wintsif Voir le message
    Notre probleme est de trouver au se situe la FAT pour pouvoir voire la chaine de cluster!
    J'ai déjà donné la réponse plus haut (post #13).

Discussions similaires

  1. Formatage en FAT32 ?
    Par clo-13190 dans le forum Matériel - Hardware
    Réponses: 18
    Dernier message: 08/03/2011, 12h25
  2. De NTFS a Fat32
    Par inviteaf3b6a54 dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 20/04/2010, 07h30
  3. Reformatage NTFS en FAT32
    Par invitef3dd8bd8 dans le forum Matériel - Hardware
    Réponses: 2
    Dernier message: 29/06/2009, 21h14
  4. Formatage FAT32 et Vista
    Par invite70eda27f dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 25/09/2007, 22h39
  5. FAT32 vers NTFS
    Par invite13cf20f5 dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 23/05/2007, 02h46
Découvrez nos comparatifs produits sur l'informatique et les technologies.