Présentation de la carte SD

D'en bas des atomes ponctuels deGuide de développement FPGA, Je pensais que c'était bien, alors j'ai déménagé.

1. Introduction à la carte SD

Le nom anglais complet de la carte SD est Secure Digital Card, à savoir Secure Digital Card (également connue sous le nom de Secure Digital Card), qui est développée sur la base de MMC (Multimedia Card), avec deux caractéristiques principales: une sécurité plus élevée et une lecture et une écriture plus rapides. la vitesse. La longueur et la largeur de la carte SD et de la carte MMC sont toutes deux de 32 mm x 24 mm. La différence est que l'épaisseur de la carte SD est de 2,1 mm, tandis que l'épaisseur de la carte MMC est de 1,4 mm. La carte SD est légèrement plus épaisse que le Carte MMC pour une plus grande capacité.L'unité de stockage, quant à elle, la carte SD a plus de broches de contact que la carte MMC, et il y a un interrupteur de protection en écriture sur le côté. Les cartes SD et les cartes MMC maintiennent la compatibilité ascendante, c'est-à-dire que les cartes MMC sont accessibles par les nouveaux périphériques SD et la compatibilité dépend du logiciel d'application, mais les cartes SD ne sont pas accessibles par les périphériques MMC. La carte SD et la carte MMC se distinguent par l'étiquette apposée sur la carte. Dans l'image ci-dessous, celle avec la lettre «MultiMediaCard» sur le côté gauche de l'image est une carte MMC, et celle avec la lettre «SD» sur le côté droit de l'image est une carte SD.

Insérez la description de l'image ici
La carte SD dans l'image de droite ci-dessus est en fait une carte SDHC. La carte SD est divisée en trois niveaux en termes de capacité de stockage: carte SD, carte SDHC (Secure Digital High Capacity, carte numérique sécurisée haute capacité) et carte SDXC ( SD eXtended Capacity, une carte mémoire sécurisée avec une capacité étendue). La carte SD est développée sur la base d'une carte MMC, en utilisant le système de fichiers FAT12 / FAT16, la carte SD adopte la spécification du protocole SD1.0, qui stipule que la capacité de stockage maximale de la carte SD est de 2 Go; la carte SDHC est une carte SD de stockage de grande capacité , En utilisant le système de fichiers FAT32, la carte SDHC adopte la spécification du protocole SD2.0, qui stipule que la capacité de stockage de la carte SDHC varie de 2 Go à 32 Go; la carte SDXC est une nouvelle norme proposée, qui est différente du système de fichiers FAT utilisé par les cartes SD et les cartes SDHC La carte SDXC utilise le système de fichiers exFAT, c'est-à-dire le système de fichiers FAT étendu. La carte SDXC adopte la spécification du protocole SD3.0, qui stipule que la capacité de stockage de la carte SDXC varie de 32 Go à 2 To (2048 Go), et est généralement utilisée pour les appareils photo SLR de milieu à haut de gamme et les caméscopes haute définition.

Les cartes SD avec des spécifications de protocole différentes ont des niveaux de vitesse différents. Dans la spécification du protocole SD1.0 (moins utilisé maintenant), «X» est utilisé pour indiquer différents niveaux de vitesse; dans la spécification du protocole SD2.0, SpeedClass est utilisé pour indiquer différents niveaux de vitesse; la spécification du protocole SD3.0 utilise UHS ( Ultra High Speed) signifie différents niveaux de vitesse. Dans la spécification SD2.0, les niveaux de vitesse des cartes SD sont divisés en cartes ordinaires (Classe2, Classe4, Classe6) et cartes à grande vitesse (Classe10); la spécification SD3.0 divise les niveaux de vitesse des cartes SD en grades de vitesse UHS 1 et 3. Les vitesses de lecture et d'écriture et les applications de différents niveaux sont indiquées dans la figure ci-dessous.
Insérez la description de l'image ici
La carte SD a 9 lignes de broches au total et peut fonctionner en mode SDIO ou SPI. En mode SDIO, partagé avec CLK, CMD, DAT [3: 0] six lignes de signal; en mode SPI, partagé avec CS (SDIO_DAT [3]), CLK (SDIO_CLK), MISO (SDIO_DAT [0]), MOSI (SDIO_CMD ) Quatre lignes de signal. La définition de l'interface de la carte SD et la description de chaque fonction de broche sont illustrées à la Figure 39.1.3.

Insérez la description de l'image ici
En plus des cartes SD standard sur le marché, il existe également des cartes MicroSD (anciennement appelées cartes TF), qui sont des cartes mémoire flash extrêmement petites, inventées par SanDisk (SanDisk), et sont principalement utilisées dans les téléphones mobiles. La carte MicroSD peut être convertie en carte SD en insérant l'adaptateur (adaptateur), et sa séquence de fonctionnement est la même que celle de la carte SD. La définition de l'interface de la carte MicroSD et la description de chaque fonction de broche sont illustrées à la Figure 39.1.4.
Insérez la description de l'image ici
Dans la version 2.0 de la carte SD standard, la fréquence d'horloge de travail peut atteindre 50 Mhz. En mode SDIO, elle adopte une largeur de données de 4 bits et, théoriquement, elle peut atteindre un taux de transmission de 200 Mbps (50Mx4bit); en mode SPI, elle adopte des données de 1 bit largeur, théoriquement Il peut atteindre un taux de transmission de 50 Mbps. Par conséquent, le taux de transfert de la carte SD en mode SDIO est plus rapide et sa séquence de fonctionnement est plus compliquée. Pour utiliser la carte SD pour lire des fichiers musicaux et des images, la vitesse de transmission en mode SPI a été en mesure de répondre à nos besoins, nous utilisons donc le mode SPI de la carte SD dans ce chapitre pour tester la lecture et l'écriture de la carte SD.

2. Commande de la carte SD et retour des données

La carte SD doit être initialisée avant les opérations normales de lecture et d'écriture.Le processus d'initialisation de la carte SD consiste à écrire des commandes sur la carte SD pour la faire fonctionner dans le mode de fonctionnement attendu. Lors de la lecture et de l'écriture de la carte SD, il est également nécessaire d'envoyer d'abord la commande d'écriture et la commande de lecture, de sorte que le format de commande de la carte SD est un contenu important pour l'apprentissage des cartes SD. Le format de commande de la carte SD est composé de 6 octets. Lors de l'envoi de données, le bit haut est le premier. Le format de commande d'écriture de la carte SD est indiqué dans la figure ci-dessous:
Insérez la description de l'image ici
Octet1: Le premier octet du mot de commande est la commande nombre (tel que CMD0, CMD1, etc.)), le format est "0 1 xxxxxx". Le bit le plus élevé du numéro de commande est toujours 0, qui est le bit de début du numéro de commande; le deuxième bit le plus élevé est toujours 1, qui est le bit d'envoi du numéro de commande; les 6 bits inférieurs sont le numéro de commande spécifique (tel comme CMD55, 8'd55 = 8'b0011_0111, le numéro de commande est 0 1 1 1 0 1 1 1 = 0x77).

Byte2 ~ Byte5: Paramètres de commande. Certains paramètres de commande sont des bits réservés et le contenu du paramètre n'est pas défini. Les bits réservés doivent être mis à 0.

Octet 6: les 7 premiers bits sont des bits de contrôle CRC (contrôle de redondance cyclique) et le dernier bit est le bit d'arrêt 0. La carte SD n'active pas la vérification CRC par défaut en mode SPI et active la vérification CRC en mode SDIO. C'est-à-dire qu'en mode SPI, le bit de contrôle CRC doit être envoyé, mais la carte SD l'ignorera automatiquement lors de la lecture du bit de contrôle CRC, de sorte que tous les bits de contrôle peuvent être mis à 1. Il est à noter que la carte SD est allumée par défaut en mode SDIO Lors de la réception de la commande de réponse de la carte SD pour retourner CMD0, tirez vers le bas la puce de sélection CS pour entrer en mode SPI. Ainsi, lors de l'envoi de la commande CMD0, la carte SD est en mode SDIO et la vérification CRC doit être activée. En outre, la vérification CRC de CMD8 est toujours activée et la vérification CRC doit également être activée. À l'exception de ces deux commandes, le CRC des autres commandes n'a pas besoin d'être vérifié.

Les commandes de la carte SD sont divisées en commandes standard (telles que CMD0) et commandes liées à l'application (telles que ACMD41). La commande ACMD est une commande spéciale et la méthode d'envoi est la même que la commande standard, mais avant d'envoyer la commande liée à l'application, la commande CMD55 doit d'abord être envoyée pour indiquer à la carte SD que la commande suivante est liée à l'application. commande, pas une commande standard. Après l'envoi de la commande, la carte SD renverra les informations de réponse. Les différentes commandes CMD auront différents types de valeurs de retour. Les valeurs de retour couramment utilisées sont le type R1, le type R3 et le type R7 (le type R7 est dédié aux commandes CMD8) . Les commandes couramment utilisées de la carte SD sont décrites dans le tableau suivant (Tableau 39.1.2).

Insérez la description de l'image ici
Insérez la description de l'image ici
Le format de données de type R1 de retour de la carte SD est indiqué dans la figure ci-dessous:
Insérez la description de l'image ici
Comme on peut le voir sur la figure ci-dessus, le format R1 de type de retour de carte SD renvoie 1 octet au total, le bit le plus élevé est fixé à 0 et les autres bits représentent respectivement les drapeaux de l'état correspondant et le niveau haut est effectif.

Le format de données de retour de la carte SD de type R3 est indiqué dans la figure ci-dessous:
Insérez la description de l'image ici
Comme le montre la figure ci-dessus, le format R3 de type de retour de carte SD renvoie un total de 5 octets. Le premier octet renvoyé est le contenu de R1 décrit précédemment, et les octets restants sont le registre OCR (Operation Conditions Register). Content .

Le format de données de retour de la carte SD de type R7 est indiqué dans la figure ci-dessous:
Insérez la description de l'image ici
Comme le montre la figure ci-dessus, le format de retour de carte SD de type R7 renvoie un total de 5 octets. Le premier octet renvoyé est le contenu de R1 décrit ci-dessus, et les octets restants contiennent des informations de tension de fonctionnement de la carte SD et des octets de contrôle. Parmi eux, la plage de tension est un paramètre relativement important, et son contenu spécifique est le suivant:
Insérez la description de l'image ici
Avant l'opération normale de lecture et d'écriture de la carte SD, la carte SD doit être initialisée pour la faire fonctionner dans le mode de fonctionnement attendu. Il existe une différence entre le protocole de la version 1.0 de la carte SD et le protocole de la version 2.0 dans le processus d'initialisation. Seule la carte SD avec le protocole de la version SD 2.0 prend en charge la commande CMD8, de sorte que la carte SD qui répond à cette commande peut être considérée comme Carte de protocole de version SD2.0, sinon il s'agit d'une carte SD ou d'une carte MMC avec le protocole de version SD1.0; pour CMD8 ne répondant pas, vous pouvez envoyer la commande CMD55 + ACMD41, si elle renvoie 0, cela signifie que la carte de version de protocole SD1.0 est initialisé avec succès, s'il renvoie une erreur, il est déterminé comme carte MMC; Après avoir déterminé la carte MMC, continuez à envoyer la commande CMD1 à la carte, si elle renvoie 0, la carte MMC est initialisée avec succès, sinon elle est jugée comme un carte d'erreur.

3. Initialisation de la carte SD

La plupart des cartes SD du marché adoptant le protocole de version SD2.0, nous n'introduirons que le processus d'initialisation du protocole de version SD2.0 Les cartes SD mentionnées ci-dessous représentent toutes des cartes SDHC basées sur le protocole de version SD2.0. Les étapes d'initialisation détaillées sont les suivantes:

1. Une fois la carte SD allumée, le FPGA hôte envoie d'abord au moins 74 horloges de synchronisation à la carte SD esclave.Pendant la période de synchronisation à la mise sous tension, la puce sélectionne la broche CS et la broche MOSI doit être haute (broche MOSI sauf pour envoi de commandes ou de données, tous les autres moments sont de haut niveau);

2. Déroulez la broche CS de la sélection de puce, envoyez la commande CMD0 (0x40) pour réinitialiser la carte SD et attendez que la carte SD renvoie les données de réponse après l'envoi de la commande;

3. Une fois que la carte SD a renvoyé les données de réponse, attendez d'abord 8 cycles d'horloge, puis tirez le signal CS de la sélection de puce. À ce stade, évaluez les données de réponse renvoyées. Si les données renvoyées sont le signal d'achèvement de réinitialisation 0x01, la sélection de puce CS est faible lors de la réception des informations de retour, à ce moment la carte SD entre en mode SPI et commence l'étape suivante, si la valeur renvoyée est une autre valeur, la deuxième étape est à nouveau exécutée.

4. Déroulez la broche CS de la puce et envoyez la commande CMD8 (0x48) pour interroger le numéro de version de la carte SD. Seules les cartes de version SD2.0 prennent en charge cette commande. Une fois la commande envoyée, attendez la carte SD pour renvoyer les données de réponse;

5. Une fois que la carte SD a renvoyé les données de réponse, attendez d'abord 8 cycles d'horloge, puis tirez le signal CS de la sélection de puce. À ce stade, évaluez les données de réponse renvoyées. Si la plage de tension renvoyée est 4'b0001, c'est-à-dire 2,7V ~ 3,6V, cela signifie que la carte SD est la version 2.0, passez à l'étape suivante, sinon passez à nouveau à l'étape 4;

6. Déroulez la broche CS de la puce et envoyez la commande CMD55 (0x77) pour indiquer à la carte SD que la prochaine commande envoyée est une commande liée à l'application. Une fois la commande envoyée, attendez que la carte SD renvoie le données de réponse;

7. Une fois que la carte SD a renvoyé les données de réponse, attendez d'abord 8 cycles d'horloge, puis tirez le signal CS de la sélection de puce. À ce stade, évaluez les données de réponse renvoyées. Si les données renvoyées sont un signal d'inactivité 0x01, passez à l'étape suivante, sinon réexécutez l'étape 6.

8. Déroulez la broche CS de la puce, envoyez la commande ACMD41 (0x69) pour demander si la carte SD est initialisée et attendez que la carte SD renvoie les données de réponse après l'envoi de la commande;

9. Une fois que la carte SD a renvoyé les données de réponse, attendez d'abord 8 cycles d'horloge, puis tirez le signal CS de la sélection de puce. À ce stade, évaluez les données de réponse renvoyées. Si les données renvoyées sont 0x00, l'initialisation est terminée à ce moment, sinon, recommencez l'étape 6.

La séquence des commandes de mise sous tension et de réinitialisation de la carte SD est illustrée dans la figure ci-dessous:
Insérez la description de l'image ici

Quatre opérations de lecture et d'écriture sur la carte SD

À ce stade, la carte SD a terminé les opérations de réinitialisation et d'initialisation, et entre les opérations de lecture et d'écriture en mode SPI. Il convient de noter que lorsque la carte SD est initialisée, la fréquence d'horloge de SPI_CLK ne peut pas dépasser 400 KHz. Une fois l'initialisation terminée, la fréquence d'horloge de SPI_CLK est commutée sur la fréquence d'horloge maximale de la carte SD. Bien que de nombreuses cartes SD sur le marché prennent actuellement en charge l'initialisation avec une fréquence d'horloge plus rapide, afin d'être compatible avec plus de cartes SD, la fréquence d'horloge ne peut pas dépasser 400KHz lorsque la carte SD est initialisée.

Le volume de données de lecture et d'écriture sur la carte SD doit être un multiple entier de 512 octets, c'est-à-dire que le volume de données minimum pour les opérations de lecture et d'écriture sur la carte SD est de 512 octets. Nous pouvons configurer la longueur des données d'une seule opération de lecture et d'écriture via la commande CMD16, de sorte que la quantité de données lues et écrites à chaque fois soit de (n * 512) octets (n≥1). Cette opération de lecture et d'écriture sur carte SD utilise SD La configuration par défaut de la carte, c'est-à-dire le volume de données d'une seule opération de lecture et d'écriture, est de 512 octets.

Une fois la carte SD initialisée, la carte SD peut être lue et écrite. Le test de lecture et d'écriture de la carte SD consiste à écrire d'abord les données sur la carte SD, puis à lire les données de la carte SD et à vérifier l'exactitude des données. Le chronogramme de l'opération d'écriture sur la carte SD est illustré dans la figure ci-dessous:

Insérez la description de l'image ici
Le processus de l'opération d'écriture sur la carte SD est le suivant:

1. Déroulez la broche CS de la puce, envoyez la commande CMD24 (0x58) pour lire un seul bloc de données et attendez que la carte SD renvoie les données de réponse après l'envoi de la commande;

2. Une fois que la carte SD a renvoyé les données de réponse correctes 0x00, attendez au moins 8 cycles d'horloge avant d'envoyer l'en-tête de données 0xfe;

3. Après avoir envoyé l'en-tête de données 0xfe, commencez à envoyer 512 octets de données;

4. Une fois la transmission des données terminée, envoyez 2 octets de données de contrôle CRC. Puisque la vérification CRC n'est pas effectuée sur les données en mode SPI, envoyez simplement deux octets de 0xff directement;

5. Une fois les données de vérification envoyées, attendez que la carte SD réponde;

6. Une fois que la carte SD a renvoyé les données de réponse, elle entre dans l'état occupé d'écriture (la broche MISO est faible), c'est-à-dire que d'autres opérations ne sont pas autorisées pour le moment. Lorsqu'il est détecté que la broche MISO est haute, la carte SD quitte l'état occupé d'écriture à ce moment;

7. Tirez la broche CS vers le haut et autorisez d'autres opérations après avoir attendu 8 cycles d'horloge.

Le chronogramme de l'opération de lecture de la carte SD est illustré dans la figure ci-dessous:
Insérez la description de l'image ici
Le processus d'opération de lecture de la carte SD est le suivant:

1. Déroulez la broche CS de la puce, envoyez la commande CMD17 (0x51) pour lire un seul bloc de données et attendez que la carte SD renvoie les données de réponse après l'envoi de la commande;

2. Une fois que la carte SD a renvoyé les données de réponse correctes 0x00, préparez-vous à analyser l'en-tête de données 0xfe renvoyé par la carte SD;

3. Après avoir analysé l'en-tête de données 0xfe, recevez les 512 octets de données renvoyés par la carte SD;

4. Une fois l'analyse des données terminée, les deux octets suivants de la valeur de contrôle CRC sont reçus. Le contrôle CRC n'étant pas effectué sur les données en mode SPI, ces deux octets peuvent être ignorés directement;

5. Après avoir reçu les données de vérification, attendez 8 cycles d'horloge;

6. Relevez la broche CS de la puce et permettez à d'autres opérations d'être effectuées après avoir attendu 8 cycles d'horloge.

Je suppose que tu aimes

Origine blog.csdn.net/qq_39507748/article/details/113195336
conseillé
Classement