2 votes

Initialisation de la carte SD par SPI

J'ai vu beaucoup d'informations sur les cartes MMC/SD et j'ai essayé de faire une bibliothèque pour lire tout cela (en modifiant le fichier Procyon AVRlib ).

Mais j'ai quelques problèmes ici. Je n'ai pas changé le code original et j'ai essayé ici. Mon problème concerne l'initialisation d'une carte SD. J'en ai deux ici, une de 256 MB et une autre de 1 GB.

J'envoie les commandes d'init dans cet ordre : CMD0, CMD55, ACMD41, et CMD1.

Mais la carte SD de 256 Mo ne renvoie qu'une réponse 0x01 pour chaque commande. J'ai envoyé la commande CMD1 un grand nombre de fois et la carte SD 256 MB renvoie toujours seulement 0x01, jamais 0x00.

La SD 1 GB est plus folle... CMD0 retourne avec 0x01. Sympa, mais la commande CMD55 répond avec 0x05. D'autres fois, elle répond avec 0xC1 et aussi parfois avec 0xF0 avec un 0x5F dans l'interation suivante...

Sur Internet, on trouve des informations et des exemples, mais c'est un peu confus. Ici, dans mon projet, je dois utiliser une carte de 1 Go et j'essaie avec une carte microSD avec un adaptateur SD (je pense que ce n'est pas le problème).

Comment puis-je résoudre ce problème ?

PS : Mon problème est similaire à celui de la question Stack Overflow Problèmes d'initialisation de la carte SD en SPI mais la solution n'a pas résolu mon problème. La carte SD de 1 Go ne renvoie jamais que 0x01... :cry :

2voto

domen Points 487

Pourquoi avez-vous besoin de CMD1 ? Et avez-vous lu la note en dessous, qui dit "CMD1 est une commande valide pour la carte mémoire SD de taille standard fine (1,4 mm) uniquement si elle est utilisée après la réinitialisation d'une carte (pas après la réinitialisation à la mise sous tension)" ?

À propos de la carte de 1 Go, des idées qui me viennent à l'esprit :

  • Après chaque commande (envoyer une commande, obtenir une réponse), envoyez-vous 8 octets factices avant de rendre CS élevé ?
  • Les valeurs renvoyées semblent étranges (0x05 n'a pas de bit occupé, donc WTF ?), peut-être y a-t-il un problème matériel ?
  • La carte fonctionne-t-elle autrement ?

1voto

Turbo J Points 3166

1voto

Captain Kirk Points 11

Toutefois, cette solution peut ne pas fonctionner pour certaines marques de cartes. Pour ces cartes, vous devrez peut-être modifier la procédure/la bibliothèque. C'est peut-être la raison pour laquelle votre carte de 1 Go fonctionne différemment - il s'agit peut-être d'une carte de marque différente. Le mode SPI de certaines cartes peut ne pas être très populaire pour les équipements commerciaux, et peut donc être plus dévié dans les spécifications par certains fabricants de cartes.

Si vous mordez les commandes et les horloges, vous pouvez avoir plus de contrôle et de confiance que ces procédures sont correctes. C'est utile car vous avez besoin d'une base solide sur laquelle vous pouvez vous appuyer pour progresser petit à petit. J'ai constaté que les 80 horloges <400 kHz étaient critiques sur une carte, mais qu'elles pouvaient fonctionner à plus de 2 MHz sur une autre.

Essayez de faire progresser une commande à la fois qui soit fiable pour les deux cartes.

1voto

Clifford Points 29933

Une explication simple de l'utilisation de MMC/SD sur SPI est fournie. aquí . J'ai utilisé l'outil associé Bibliothèque du système de fichiers FAT aussi et cela fonctionne bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X