Bonjour,
Je réalise en ce moment un projet pour lequel j'ai besoin d'utiliser une carte SD.
Je lis par bloc de 512 octets (taille des secteurs), ce qui me permet donc de lire un secteur d'un coup.
Pour cela, j'utilise la commande 17 (CMD17) qui prend comme argument le numéro du secteur à lire pour les cartes SD, et l'adresse du secteur pour les cartes SDHC (enfin, d'après ce que j'ai lu).
Je dois donc, pour les cartes SDHC, multiplier le numéro par le nombre d'octet par secteur, donc je multiplie par 512.
Je lis donc le premier secteur de ma carte SD, qui se trouve être le Master Boot Record (MBR).
A l'offset 452, je trouve le numéro du secteur du BSR; admettons, dans l'ordre des données que j'ai lu: 0x00 0x20 0x00 0x00.
Le numéro est donc 0x2000 (puisque c'est en little endian).
Puisque j'utilise une carte SDHC, j'envoie donc la commande 17 avec comme argument non pas le numéro, mais l'adresse: 0x2000000000000 (décalage de 9 vers la gauche puisque multiplier par 512).
Mais je ne trouve pas le BSR. J'essai donc sans le décalage, et donc envoie l'argument 0x20000: et là, je trouve le BSR.
Comment cela se fait-il? Est-ce que je dois, que ce soit pour les cartes SD et pour les cartes SDHC, envoyé le numéro comme argument?
Car je ne suis qu'au début, et je ne peux donc pas vérifié avec les secteurs contenant les fichiers (pas encore codé).
Merci d'avance.
PS: Je sais que je pourrais utiliser les librairies déjà codées, mais je préfére tout coder.
Partager