Bonjour,
Je cherche à lire une carte SD depuis un PIC. Je ne comprends pas bien le fonctionnement complet des communications en SPI et je pense que mon problème vient de là (de mon manque de connaissance ).
Au final, mon but est simplement de lire le contenu de la carte et d'ouvrir et lire des fichiers, mais j'ai trouvé un code tout fait permettant déjà de monter la carte, ouvrir un fichier ou le créer s'il n'existe pas et écrire un texte pour vérifier que tout fonctionne correctement. J'avais bon espoir que ça fonctionne tout seul puisque j'utilise un PIC18F46K22 et que le tuto en question utilise un 18F45K22, qui est de la même série.
Je réutilise donc pour l'instant exactement le code téléchargé.
=> Première chose que je ne comprends pas, dans MCC Generated Files/pin_manager.h, SD_CS est configuré sur RC0 alors que la doc indique SS1 sur RA5. J'ai essayé de configurer les 2 pins avec le même résultat, donc je reste pour l'instant sur RC0 comme dans le tuto.
=> Deuxième chose : Vu que rien ne s'écrit sur ma carte, j'ai également modifié le main.c comme ceci :
J'ai un breakpoint sur le while pour pouvoir visualiser la valeur de etat en mode Debugger.Code:UINT bw; FRESULT etat; SYSTEM_Initialize(); etat = f_mount(&FatFs, "", 1); if (etat == FR_OK) { /* Mount SD */ if (f_open(&Fil, "test.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE) == FR_OK) { /* Open or create a file */ if ((Fil.fsize != 0) && (f_lseek(&Fil, Fil.fsize) != FR_OK)) goto endSD; /* Jump to the end of the file */ f_write(&Fil, "Hello world! This is text message written to sd card\r\n", 54, &bw); /* Write data to the file */ endSD: f_close(&Fil); /* Close the file */ } } while (1) { // Add your application code }
Il se trouve que j'ai etat = FR_NOT_READY défini comme "The physical drive cannot work" dans FatFS/ff.h
Je pense donc à une erreur de configuration de ma communication SPI (la carte SD fonctionne très bien en la branchant sur un ordinateur ou sur un système à base de PIC fonctionnel), mais comme je ne comprends pas grand chose de ce qui s'y passe, je viens vous demander si vous pourriez m'aider à initialiser correctement cette communication.
Merci beaucoup à vous.
PS : j'ai réalisé un petit circuit pour le branchement de ma carte SD en suivant les indications du même tuto. Je ne pense pas qu'il y ait de problème à ce niveau, mais par principe, je préfère préciser...
N'ayant pas de résistances de 2,1kΩ et 3,3kΩ, j'ai utilisé 2,7kΩ et 3,9kΩ pour diviser les tensions de sortie du PIC, ce qui d'après mes calculs, avec le PIC alimenté directement par le PicKit3 en 4,5V (d'après MPLabX, mes ports USB ne délivrent pas 5V), je devrais avoir des tensions d'entrées pour la carte SD de (4,5-0,7)*3,9/6,6 = 2,25V > 2,06V comme conseillé dans le tuto. La carte elle-même est alimentée par le 4,5V d'alim passant par un régulateur LDO qui délivre 3,27V à la carte (valeur mesurée).
-----